staging: comedi: ni_670x: fix dereference of an invalid pointer
authorH Hartley Sweeten <hartleys@visionengravers.com>
Sat, 30 Jun 2012 00:39:45 +0000 (17:39 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 6 Jul 2012 22:46:06 +0000 (15:46 -0700)
The attach if this driver can fail before the subdevices are
allocated. If the attach fails the comedi core will call the
detach routine to allow the driver to do it's cleanup.

We need to make sure that the subdevice allocation was successful
before trying to dereference subdevice[0] to free the allocated
range table list.

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/ni_670x.c

index bab9644771182014b2f8ce499374c8ea0b63c62e..46f373a0c0cad63d1175626e1de050a5ed9142c6 100644 (file)
@@ -301,8 +301,13 @@ static int ni_670x_attach(struct comedi_device *dev,
 static void ni_670x_detach(struct comedi_device *dev)
 {
        struct ni_670x_private *devpriv = dev->private;
+       struct comedi_subdevice *s;
 
-       kfree(dev->subdevices[0].range_table_list);
+       if (dev->n_subdevices) {
+               s = dev->subdevices + 0;
+               if (s)
+                       kfree(s->range_table_list);
+       }
        if (devpriv && devpriv->mite)
                mite_unsetup(devpriv->mite);
        if (dev->irq)