Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

comedi: pcmda12: Add sanity checks for I/O base address

The "pcmda12" driver uses an admin-supplied configuration option
(`it->options[0]`) to configure the I/O port base address of a
PCM-D/A-12 or PCM-A/D-16 board. It currently allows any base address to
be configured. I cannot find a full manual, but the short datasheet
says it uses 15 consecutive I/O addresses on "any even sixteen port
boundary", so assume it supports base addresses (configured by on-board
jumpers) in the range 0 to 0x3E0 on 32-byte boundaries.

Add a sanity check to ensure the device is not configured at an
unsupported base address.

Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Link: https://patch.msgid.link/20260130170416.49994-42-abbotti@mev.co.uk
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Ian Abbott and committed by
Greg Kroah-Hartman
c375d40d 0ca9f815

+8 -1
+8 -1
drivers/comedi/drivers/pcmda12.c
··· 120 120 struct comedi_subdevice *s; 121 121 int ret; 122 122 123 - ret = comedi_request_region(dev, it->options[0], 0x10); 123 + /* 124 + * The datasheet says it requires 16 contiguous addresses and is 125 + * "configurable on any even sixteen port boundary". So require 126 + * a 32-byte boundary and assume it uses 10-bit addresses like 127 + * similar boards. 128 + */ 129 + ret = comedi_check_request_region(dev, it->options[0], 0x10, 130 + 0, 0x3ff, 32); 124 131 if (ret) 125 132 return ret; 126 133