Hello all, I'm trying to figure out why the do_syslog code in kernel/printk.c is using put_user instead of copy_to_user. There is even a comment about how because of sleep, the buffer is read from back to front to minimize the impact of printk overwriting the syslog section we are using. That wouldn't be necessary if a temporary copy was made and then written out with copy_to_user. Does that make sense or am I missing something? Thanks, William
-----Original Message----- From: kernelnewbies-bounces@kernelnewbies.org [mailto:kernelnewbies- bounces@kernelnewbies.org] On Behalf Of william douglas Sent: Thursday, August 11, 2011 1:23 PM To: kernelnewbies@kernelnewbies.org Subject: SYSLOG_ACTION_READ_ALL question
Hello all,
I'm trying to figure out why the do_syslog code in kernel/printk.c is using put_user instead of copy_to_user.
I *THINK* this has something to do with copy_to_user not being well-behaved in other than process context and since printk() gets called in all contexts, it wouldn't be a safe operation. But don't take my word for it.
On Thu, Aug 11, 2011 at 1:50 PM, Jeff Haran <jharan@bytemobile.com> wrote:
-----Original Message----- From: kernelnewbies-bounces@kernelnewbies.org [mailto:kernelnewbies- bounces@kernelnewbies.org] On Behalf Of william douglas Sent: Thursday, August 11, 2011 1:23 PM To: kernelnewbies@kernelnewbies.org Subject: SYSLOG_ACTION_READ_ALL question
Hello all,
I'm trying to figure out why the do_syslog code in kernel/printk.c is using put_user instead of copy_to_user.
I *THINK* this has something to do with copy_to_user not being well-behaved in other than process context and since printk() gets called in all contexts, it wouldn't be a safe operation. But don't take my word for it.
Well from what I understand, copy_to_user doesn't work in interrupt context for example as there is no user space necessarily to copy to. In this case we have a __user buffer to copy back to and __copy_to_user looks sane for the work load so I'm still unsure.
On Fri, Aug 12, 2011 at 03:22, william douglas <william.r.douglas@gmail.com> wrote:
Hello all,
I'm trying to figure out why the do_syslog code in kernel/printk.c is using put_user instead of copy_to_user.
There is even a comment about how because of sleep, the buffer is read from back to front to minimize the impact of printk overwriting the syslog section we are using. That wouldn't be necessary if a temporary copy was made and then written out with copy_to_user.
Does that make sense or am I missing something?
looking at lxr.linux.no, right now I got impression that put_user is somewhat a wrapper for copy_to_user. What I quickly check is that put_user employ checking like might_sleep() and might_fault()...might be handy in certain situation IMHO -- regards, Mulyadi Santosa Freelance Linux trainer and consultant blog: the-hydra.blogspot.com training: mulyaditraining.blogspot.com
participants (3)
-
Jeff Haran -
Mulyadi Santosa -
william douglas