staging: comedi: fix sparse warning in do_devconfig_ioctl()
authorIan Abbott <abbotti@mev.co.uk>
Tue, 18 Sep 2012 18:46:57 +0000 (19:46 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 Sep 2012 10:26:12 +0000 (11:26 +0100)
For the COMEDI_DEVCONFIG ioctl, the user application may embed a pointer
to firmware data within a designated element (or two elements for 64-bit
pointers) of the `options[]` array in the `struct comedi_devconfig`.
`do_devconfig_ioctl()` calls `comedi_aux_data()` to extract the pointer
value.  It needs to be treated as a `__user` pointer so the firmware
data can be copied into kernel memory, so cast the result of
`comedi_aux_data()` to avoid a "sparse" warning.  This is not ideal but
`comedi_aux_data()` is called elsewhere in a wholly kernel memory
context so we can't just change its return type to include the `__user`
tag.

Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/comedi_fops.c

index 626fa723f19918862338a78a784b02706eb1a470..9b9d4e8a2cf90817f9c2018c9eb2ed15d487bcfa 100644 (file)
@@ -370,7 +370,8 @@ static int do_devconfig_ioctl(struct comedi_device *dev,
                        return -ENOMEM;
 
                if (copy_from_user(aux_data,
-                                  comedi_aux_data(it.options, 0), aux_len)) {
+                                  (unsigned char __user *
+                                   )comedi_aux_data(it.options, 0), aux_len)) {
                        vfree(aux_data);
                        return -EFAULT;
                }