Overview
About vulnerability
In the Linux kernel, the following vulnerability has been resolved:
comedi: ni_atmio16d: Fix invalid clean-up after failed attach
If the driver’s COMEDI “attach” handler function (atmio16d_attach())
returns an error, the COMEDI core will call the driver’s “detach”
handler function (atmio16d_detach()) to clean up. This calls
reset_atmio16d() unconditionally, but depending on where the error
occurred in the attach handler, the device may not have been
sufficiently initialized to call reset_atmio16d(). It uses
dev->iobase as the I/O port base address and dev->private as the
pointer to the COMEDI device’s private data structure. dev->iobase
may still be set to its initial value of 0, which would result in
undesired writes to low I/O port addresses. dev->private may still be
NULL, which would result in null pointer dereferences.
Fix atmio16d_detach() by checking that dev->private is valid
(non-null) before calling reset_atmio16d(). This implies that
dev->iobase was set correctly since that is set up before
dev->private.
Details
- Affected product:
- AlmaLinux 9.2 ESU , CentOS 6 ELS , CentOS 7 ELS , CentOS 8.4 ELS , CentOS 8.5 ELS , CentOS Stream 8 ELS , CloudLinux 7 ELS , Oracle Linux 6 ELS , Oracle Linux 7 ELS , RHEL 7 ELS , TuxCare 9.6 ESU , Ubuntu 16.04 ELS , Ubuntu 18.04 ELS , Ubuntu 20.04 ELS
- Affected packages:
- kernel @ 4.18.0 (+15 more)
In the Linux kernel, the following vulnerability has been resolved:
comedi: ni_atmio16d: Fix invalid clean-up after failed attach
If the driver’s COMEDI “attach” handler function (atmio16d_attach())
returns an error, the COMEDI core will call the driver’s “detach”
handler function (atmio16d_detach()) to clean up. This calls
reset_atmio16d() unconditionally, but depending on where the error
occurred in the attach handler, the device may not have been
sufficiently initialized to call reset_atmio16d(). It uses
dev->iobase as the I/O port base address and dev->private as the
pointer to the COMEDI device’s private data structure. dev->iobase
may still be set to its initial value of 0, which would result in
undesired writes to low I/O port addresses. dev->private may still be
NULL, which would result in null pointer dereferences.
Fix atmio16d_detach() by checking that dev->private is valid
(non-null) before calling reset_atmio16d(). This implies that
dev->iobase was set correctly since that is set up before
dev->private.