[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: kernel thread and copy_to_user



Robert Love wrote:
> Think about what devnetfs is asking.
> 
> The function is prototyped as copy_to_user(to, from, len) where to and
> from are pointers.
> 
> If current->mm is invalid, then exactly whose "from" are you copying
> to?  Remember, Linux is a virtual memory operating system: there can be
> many mappings at the same address.
> 
> Likewise, with copy_from_user(), without a valid ->mm from where exactly
> are you copying from?
> 
> The functions pull the to/from user addresses from the loaded user
> address space.  Without a user address space, these functions do not
> work.  Nor could they.
> 
> In short, to answer the original question, kernel threads cannot copy
> from user-space since they have no user-space.  If you want to get data
> into and out of a kernel thread, expose an interface (procfs, sysfs,
> syscall, device file, etc.)

Thanks for your answer! It seems that I got confused. :)

So it seems that copy_from_user could only happen within a task? I 
mean, if the user-process get into the kernel with a syscall, then 
the syscall could do copy_from_user, then do some stuff with that 
data in kernel-space. But it's all happening within a task. Is that 
right?

Thanks for the clarification! :)

--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/