I\'ve implemented some kind of character device and I need help with copy_ from_user function.
I\'ve a structure:
struct my_struct{
int a;
int *b;
You must always use copy_from_user
and similar to access user space memory from kernel space, regardless of how you got the pointer. Since b
is a pointer to user space memory, you must use copy_from_user
to access it.
These functions do two important additional tasks:
copy_*_user
family of functions have a special override that tells the PF handler that all is well, and the fault should be handled normally; and in the event that the fault cannot be satisfied by IO (ie, what would normally cause a SIGSEGV
or SIGBUS
), return an error code instead so their caller can do any necessary cleanup before returning to userspace with -EFAULT
.You are correct in your surmising. If you need to access the value *b
, you will need to use copy_from_user
(and copy_to_user
to update it back in the user process).