Originally Posted by jiml8
You cannot do a write from a kernel module.
Look into the copy_to_user() command. You might also want to consider memory mapping.
Well, I wouldn't say that it's impossible.
But I'm now finding myself in the same situation where I need to perform some file operations from within my kernel driver.
I was pondering about performing file operations from inside the
kernel. Say we talk about a driver that is compiled within the kernel or an LKM which is loadable - it is possible to perform file operations such as open, read and write from inside the kernel using the provided sys_* functions such as sys_open and the rest.
My question is, how is it possible to specify to the open syscall upon
which user permissions to use?
If you investigate the sys_open function you'll see that at some point
(allocation) it uses the current pointer to grab the uid and gid upon which to check for permissions.
How is this a problem?
Well if the sys_open is called from a user process then that's normal
because the user process has been interrupted and THAT process will be what the current pointer address to, but if we're doing it all in kernel then the current point will be of some random process which we have no affiliation with...
So, what do you think? is it possible to explicitly provide a
task_struct of a dummy process which I created on my own to functions like sys_open?
I'd be happy to hear your thoughts and ideas about this.