On Tuesday, September 18, 2012 11:47 AM, Ian Abbott wrote:
> 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 <abbo...@mev.co.uk>
> ---
>  drivers/staging/comedi/comedi_fops.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/staging/comedi/comedi_fops.c 
> b/drivers/staging/comedi/comedi_fops.c
> index 7d18325..55722b3 100644
> --- a/drivers/staging/comedi/comedi_fops.c
> +++ b/drivers/staging/comedi/comedi_fops.c
> @@ -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;
>               }

Ian,

If we "fix" the drivers that still use this, couldn't the "aux_data" usage
be deprecated? Then we could just remove the comedi_aux_data()
function as well as the related chunk in do_devconfig_ioctl().

The comedi_nonfree_firmware tarball has firmware for 5 drivers:

These two are good:
daqboard2000 - uses request_firmware() and attach_pci
ni_pcidio - uses request_firmware() and attach_pci

This one needs converted to attach_pci (this driver is a mess):
jr3_pci - uses request_firmware() still uses attach

This one is broken and needs fixed:
me4000 - uses attach_pci, the firmware upload code is missing

This one needs converted to request_firmware() and attach_pci 
me_daq - uses comedi_aux_data() still uses attach

The usbdux, usbduxfast, and usbduxsigma drivers all use
request_firmware_nowait() in the usb_driver probe. The
comedi_driver for all these have both an attach and attach_usb.
The attach functions use comedi_aux_data(), the attach_pci
functions are triggered by the completion function of
request_firmware_nowait(). It looks like these could be fixed
by just dropping the attach method. BTW, where are the
firmware files for these drivers?

Regards,
Hartley


_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

Reply via email to