OSDN Git Service

staging: comedi: quatech_daqp_cs: fix possible memory dereference issue
authorH Hartley Sweeten <hartleys@visionengravers.com>
Fri, 25 Jan 2013 22:02:06 +0000 (15:02 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 30 Jan 2013 04:06:41 +0000 (23:06 -0500)
In daqp_attach(), the first options value passed in the comedi_devconfig
is used as an index to the private dev_table[] in this driver. This table
is used to pass the pcmcia_device to the comedi_driver.

Fix the code so that the index is checked before the table is accessed
so that we don't get a possible memory dereference BUG.

Change the error returned to the comedi core from -EIO to -ENODEV.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/drivers/quatech_daqp_cs.c

index 185632e..2a5f9ab 100644 (file)
@@ -733,15 +733,16 @@ static int daqp_do_insn_write(struct comedi_device *dev,
 
 static int daqp_attach(struct comedi_device *dev, struct comedi_devconfig *it)
 {
-       int ret;
-       struct local_info_t *local = dev_table[it->options[0]];
+       struct local_info_t *local;
        struct comedi_subdevice *s;
+       int ret;
 
-       if (it->options[0] < 0 || it->options[0] >= MAX_DEV || !local) {
-               dev_err(dev->class_dev, "No such daqp device %d\n",
-                       it->options[0]);
-               return -EIO;
-       }
+       if (it->options[0] < 0 || it->options[0] >= MAX_DEV)
+               return -ENODEV;
+
+       local = dev_table[it->options[0]];
+       if (!local)
+               return -ENODEV;
 
        /* Typically brittle code that I don't completely understand,
         * but "it works on my card".  The intent is to pull the model