• P
    s390/cio: fix out-of-bounds access on cio_ignore free · 1b607411
    Peter Oberparleiter 提交于
    The channel-subsystem-driver scans for newly available devices whenever
    device-IDs are removed from the cio_ignore list using a command such as:
    
      echo free >/proc/cio_ignore
    
    Since an I/O device scan might interfer with running I/Os, commit
    172da89e ("s390/cio: avoid excessive path-verification requests")
    introduced an optimization to exclude online devices from the scan.
    
    The newly added check for online devices incorrectly assumes that
    an I/O-subchannel's drvdata points to a struct io_subchannel_private.
    For devices that are bound to a non-default I/O subchannel driver, such
    as the vfio_ccw driver, this results in an out-of-bounds read access
    during each scan.
    
    Fix this by changing the scan logic to rely on a driver-independent
    online indication. For this we can use struct subchannel->config.ena,
    which is the driver's requested subchannel-enabled state. Since I/Os
    can only be started on enabled subchannels, this matches the intent
    of the original optimization of not scanning devices where I/O might
    be running.
    
    Fixes: 172da89e ("s390/cio: avoid excessive path-verification requests")
    Fixes: 0c3812c3 ("s390/cio: derive cdev information only for IO-subchannels")
    Cc: <stable@vger.kernel.org> # v5.15
    Reported-by: NAlexander Egorenkov <egorenar@linux.ibm.com>
    Reviewed-by: NVineeth Vijayan <vneethv@linux.ibm.com>
    Signed-off-by: NPeter Oberparleiter <oberpar@linux.ibm.com>
    Signed-off-by: NVasily Gorbik <gor@linux.ibm.com>
    1b607411
css.c 32.8 KB