Re: strncpy_from_user called from invalid context?

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

 



Hi Greg,

On Sat, Dec 18, 2010 at 2:27 PM, Greg Kerr <kerrgi@xxxxxxxxx> wrote:
> In order to learn the jprobes interface, I am a writing a fairly silly example
> jprobe. However, I'm having issues copying a string from userspace....
> Basically somehow I wind up calling a function that may sleep from an invalid
> context (interrupts disabled or something).
>
> I have the source of the function in question and the stack trace below. If
> anyone could give me a few pointers it would be greatly appreciated.

I'd get rid of the 1K stack variable. I think on x86, the kernel stack
is only 4K.
Use kmalloc instead. If your stack variable is crossing the page
boundary and nothing is mapped into memory there, then that could
cause the page fault.

I'd also recommend using strlcpy rather than strncpy.
See: <http://www.gratisoft.us/todd/papers/strlcpy.html>
Your use of strncpy is incomplete. To be complete, you need to do:

strncpy( dest, src, sizeof( dest ));
dest[ sizeof( dest ) - 1 ] = '\0';

I'm not 100% sure about strncpy_from_user but with regular strncpy, if
the length of the source is >= sizeof the destination, then your
destination string won't be null terminated.

And of course, you should make sure that the user-mode program passed
in a valid pointer.

-- 
Dave Hylands
Shuswap, BC, Canada
http://www.DaveHylands.com/

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux