staging: comedi: ni_at_a2150: range check board index
authorIan Abbott <abbotti@mev.co.uk>
Mon, 1 Sep 2014 13:13:30 +0000 (14:13 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 8 Sep 2014 20:44:22 +0000 (13:44 -0700)
The "ni_at_a2150" driver determines the board type by calling
`a2150_probe()`.  This reads a register and converts it to a board index
in the range 0 to 3.  However, the board table array it indexes into
(`a2150_boards[]`) only has 2 entries.  Return an error from the
Comedi driver "attach" handler `a2150_attach()` if the probed board
index is beyond the end of the array.

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

index de67161f61850b0c70710ef32ff1b1176b167fba..32e7bf27778109e47d96a1f0b9b7133ed393f106 100644 (file)
@@ -705,7 +705,11 @@ static int a2150_attach(struct comedi_device *dev, struct comedi_devconfig *it)
        if (ret)
                return ret;
 
-       dev->board_ptr = a2150_boards + a2150_probe(dev);
+       i = a2150_probe(dev);
+       if (i >= ARRAY_SIZE(a2150_boards))
+               return -ENODEV;
+
+       dev->board_ptr = a2150_boards + i;
        thisboard = comedi_board(dev);
        dev->board_name = thisboard->name;