diff options
author | Ian Abbott <abbotti@mev.co.uk> | 2013-08-20 10:50:19 (GMT) |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-08-22 17:07:49 (GMT) |
commit | 2fd2bdfccae61efe18f6b92b6a45fbf936d75b48 (patch) | |
tree | 4e1baef4614cd7df3a298f3c83b53c2d30d3d7fc | |
parent | b88e75bb6576d99e0ba4f6edc978293d1ff9c01b (diff) | |
download | linux-fsl-qoriq-2fd2bdfccae61efe18f6b92b6a45fbf936d75b48.tar.xz |
staging: comedi: pcmuio: fix possible NULL deref on detach
pcmuio_detach() is called by the comedi core even if pcmuio_attach()
returned an error, so `dev->private` might be `NULL`. Check for that
before dereferencing it.
Also, as pointed out by Dan Carpenter, there is no need to check the
pointer passed to `kfree()` is non-NULL, so remove that check.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Cc: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/staging/comedi/drivers/pcmuio.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/staging/comedi/drivers/pcmuio.c b/drivers/staging/comedi/drivers/pcmuio.c index f942455..67e2bb1 100644 --- a/drivers/staging/comedi/drivers/pcmuio.c +++ b/drivers/staging/comedi/drivers/pcmuio.c @@ -672,12 +672,13 @@ static void pcmuio_detach(struct comedi_device *dev) struct pcmuio_private *devpriv = dev->private; int i; - for (i = 0; i < PCMUIO_MAX_ASICS; ++i) { - if (devpriv->asics[i].irq) - free_irq(devpriv->asics[i].irq, dev); - } - if (devpriv && devpriv->sprivs) + if (devpriv) { + for (i = 0; i < PCMUIO_MAX_ASICS; ++i) { + if (devpriv->asics[i].irq) + free_irq(devpriv->asics[i].irq, dev); + } kfree(devpriv->sprivs); + } comedi_legacy_detach(dev); } |