summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH Hartley Sweeten <hartleys@visionengravers.com>2012-06-30 04:39:45 +0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-07-07 02:46:06 +0400
commit70fcd1b7a6be4f4f60f4d05beeb3976bb0eaf6a2 (patch)
treef9fd223ee8897c276f4277dc523a2080c016b255
parent464c94514c703bc61c3f85db397582aa8f17cf9d (diff)
downloadlinux-70fcd1b7a6be4f4f60f4d05beeb3976bb0eaf6a2.tar.xz
staging: comedi: ni_670x: fix dereference of an invalid pointer
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>
-rw-r--r--drivers/staging/comedi/drivers/ni_670x.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/staging/comedi/drivers/ni_670x.c b/drivers/staging/comedi/drivers/ni_670x.c
index bab964477118..46f373a0c0ca 100644
--- a/drivers/staging/comedi/drivers/ni_670x.c
+++ b/drivers/staging/comedi/drivers/ni_670x.c
@@ -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)