]> git.baikalelectronics.ru Git - kernel.git/commit
staging: comedi: addi_apci_1500: check INSN_CONFIG_DIGITAL_TRIG shift
authorIan Abbott <abbotti@mev.co.uk>
Fri, 17 Jul 2020 14:52:57 +0000 (15:52 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 20 Jul 2020 08:19:02 +0000 (10:19 +0200)
commit01ed431594edd81d844d27c912d35eb7104b4b8e
tree6ff4f7d67ddb90ff84b29652b85d4834f318d66f
parent0c64f3cf7d0c38dd1453149476a45b0da9e09fc6
staging: comedi: addi_apci_1500: check INSN_CONFIG_DIGITAL_TRIG shift

The `INSN_CONFIG` comedi instruction with sub-instruction code
`INSN_CONFIG_DIGITAL_TRIG` includes a base channel in `data[3]`. This is
used as a right shift amount for other bitmask values without being
checked.  Shift amounts greater than or equal to 32 will result in
undefined behavior.  Add code to deal with this, adjusting the checks
for invalid channels so that enabled channel bits that would have been
lost by shifting are also checked for validity.  Only channels 0 to 15
are valid.

Fixes: 96616ab0de51c ("staging: comedi: addi_apci_1500: rewrite the subdevice support functions")
Cc: <stable@vger.kernel.org> #4.0+: 2b8fe23d7d5f: staging: comedi: verify array index is correct before using it
Cc: <stable@vger.kernel.org> #4.0+
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Link: https://lore.kernel.org/r/20200717145257.112660-5-abbotti@mev.co.uk
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/drivers/addi_apci_1500.c