staging: comedi: remove __user annotation inside of struct's
PATCH v2 1/1 staging: comedi: remove __user annotation inside of struct's
Remove the __user annotations in the struct definitions in comedi.h.
These structs are used to pass information from user-space to kernel-space. The copy_from_user and copy_to_user functions are used to transfer the data between the address spaces.
The drivers then use the information internally under the assumption that they are kernel-space objects. Having the __user annotations inside the structs produces a number of sparse warnings of the type:
warning: dereference of noderef expression
According to Grek Kroah-Hartman:
"When the kernel exports .h files, stuff like this should work "automatically", so there is no need to not put __user markings."
---
v2: update commit message
Note: This patch exposes some new warnings about different address space. These will be addressed.
drivers/staging/comedi/comedi.h +8 -8
@@ -335,7 +335,7 @@struct comedi_insn {unsigned int insn;unsigned int n; -unsigned int __user *data; +unsigned int *data;unsigned int subdev;unsigned int chanspec;unsigned int unused[3 ];
@@ -343,7 +343,7 @@struct comedi_insnlist {unsigned int n_insns; -struct comedi_insn __user *insns; +struct comedi_insn *insns; };struct comedi_cmd {
@@ -365,24 +365,24 @@unsigned int stop_src;unsigned int stop_arg; -unsigned int __user *chanlist;/* channel/range list */ +unsigned int *chanlist;/* channel/range list */ unsigned int chanlist_len; -short __user *data;/* data list, size depends on subd flags */ +short *data;/* data list, size depends on subd flags */ unsigned int data_len; };struct comedi_chaninfo {unsigned int subdev; -unsigned int __user *maxdata_list; -unsigned int __user *flaglist; -unsigned int __user *rangelist; +unsigned int *maxdata_list; +unsigned int *flaglist; +unsigned int *rangelist;unsigned int unused[4 ]; };struct comedi_rangeinfo {unsigned int range_type; -void __user *range_ptr; +void *range_ptr; };struct comedi_krange {
Greg KH
maintainerQuoted 7 lines · H Hartley Sweeten
Remove the
__userannotations in the struct definitions incomedi.h.These structs are used to pass information from user-space to kernel-space. The
copy_from_userandcopy_to_userfunctions are used to transfer the data between the address spaces.
Quoted 8 lines
The drivers then use the information internally under the assumption that they are kernel-space objects. Having the
__userannotations inside the structs produces a number of sparse warnings of the type:warning: dereference of noderef expression
According to Grek Kroah-Hartman:
That would be "Greg" :)
Greg KH
maintainerQuoted 12 lines · H Hartley Sweeten
Remove the
__userannotations in the struct definitions incomedi.h.These structs are used to pass information from user-space to kernel-space. The
copy_from_userandcopy_to_userfunctions are used to transfer the data between the address spaces.The drivers then use the information internally under the assumption that they are kernel-space objects. Having the
__userannotations inside the structs produces a number of sparse warnings of the type:
Quoted 6 lines
warning: dereference of noderef expression
According to Grek Kroah-Hartman:
"When the kernel exports .h files, stuff like this should work "automatically", so there is no need to not put
__usermarkings."
Wait, for some reason I thought you were adding __user markings, not removing them from the structures. That is why I said the above statement.
Why again are you removing them? Didn't you just cause more sparse warnings to pop up?
confused,
greg k-h
Quoted 8 lines · Greg KH
Quoted 7 lines · H Hartley Sweeten
Remove the
__userannotations in the struct definitions incomedi.h.These structs are used to pass information from user-space to kernel-space. The
copy_from_userandcopy_to_userfunctions are used to transfer the data between the address spaces.
Quoted 8 lines
Quoted 8 lines
The drivers then use the information internally under the assumption that they are kernel-space objects. Having the
__userannotations inside the structs produces a number of sparse warnings of the type:warning: dereference of noderef expression
According to Grek Kroah-Hartman:
Sorry about that typo... ;-)
Quoted 7 lines
Quoted 3 lines
"When the kernel exports .h files, stuff like this should work "automatically", so there is no need to not put
__usermarkings."Wait, for some reason I thought you were adding
__usermarkings, not removing them from the structures. That is why I said the above statement.
Ah.. Missed the "not" in your comment...
Quoted 3 lines
Why again are you removing them? Didn't you just cause more sparse warnings to pop up?
I still think they should be removed but I need to dig thru it a bit.
The structs in question are used internally in the comedi drivers after the data has been passed into the kernel using the various ioctl's. The ioctl code does do the copy_from/to_user correctly (kind of, I did notice one place where the copy_from_user is referencing a kernel pointer). But, when the driver's try to use the data, assuming it's kernel space data, it's still annotated as __user so we get all the "warning: dereference of noderef expression" along with a couple other sparse warnings.
Ian Abbott did reply that he thought the patch was correct. With my miss-read of your comment I thought you were agreeing.
Regardless, I'll keep looking it over...
Regards,
Hartley