]> git.hungrycats.org Git - linux/commitdiff
staging: comedi: amplc_pc263: fix possible NULL deref during detach
authorIan Abbott <abbotti@mev.co.uk>
Wed, 3 Oct 2012 15:25:19 +0000 (16:25 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 31 Oct 2012 17:10:00 +0000 (10:10 -0700)
commit 1d1171ffda585c1cab7bd7cf4bd8f8fd5923fb4a upstream.

`pc263_detach()` is called by the comedi core to clean up if either
`pc263_attach()` or `pc263_attach_pci()` returns an error.  It sets
`thisboard` to the return value of `comedi_board(dev)` and assumes it is
non-null.  This is a valid assumption if `pc263_attach()` fails, but not
if `pc263_attach_pci()` fails, leading to a possible NULL pointer
dereference.

Check `thisboard` at the top of `pc263_detach()` and return early if it
is `NULL`.  This is okay because no other resources need cleaning up in
this case.

Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/drivers/amplc_pc263.c

index 8191c4e28e0a6849fb53e7def7b4fc1639c79c09..8c0fbd1ceea57d8a2b954203419c92eb2c741557 100644 (file)
@@ -310,8 +310,11 @@ static int __devinit pc263_attach_pci(struct comedi_device *dev,
 
 static void pc263_detach(struct comedi_device *dev)
 {
+       const struct pc263_board *thisboard = comedi_board(dev);
        struct pci_dev *pcidev = comedi_to_pci_dev(dev);
 
+       if (!thisboard)
+               return;
        if (pcidev) {
                if (dev->iobase)
                        comedi_pci_disable(pcidev);