The structs' comedi_insn, coomedi_insnlist, comedi_cmd,
comedi_chaninfo, and comedi_rangeinfo are all passed to
the kernel from user space using ioctl commands. They
are then copied to kernel space using copy_from_user()
before the data is passed to the drivers.

The __user annotation should not be used with variables
inside the struct. This produces a lot of sparse warnings
like:

warning: dereference of noderef expression 

Signed-off-by: H Hartley Sweeten <[email protected]>
Cc: Ian Abbott <[email protected]>
Cc: Mori Hess <[email protected]>
Cc: Greg Kroah-Hartman <[email protected]>

---

Note: This patch exposes some new warnings about different
address space. These will be addressed.

diff --git a/drivers/staging/comedi/comedi.h b/drivers/staging/comedi/comedi.h
index 8ea55ae..2e2f366 100644
--- a/drivers/staging/comedi/comedi.h
+++ b/drivers/staging/comedi/comedi.h
@@ -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 {
_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

Reply via email to