• Ian Abbott's avatar
    staging: comedi: prevent auto-unconfig of manually configured devices · 7d3135af
    Ian Abbott authored
    When a low-level comedi driver auto-configures a device, a `struct
    comedi_dev_file_info` is allocated (as well as a `struct
    comedi_device`) by `comedi_alloc_board_minor()`.  A pointer to the
    hardware `struct device` is stored as a cookie in the `struct
    comedi_dev_file_info`.  When the low-level comedi driver
    auto-unconfigures the device, `comedi_auto_unconfig()` uses the cookie
    to find the `struct comedi_dev_file_info` so it can detach the comedi
    device from the driver, clean it up and free it.
    
    A problem arises if the user manually unconfigures and reconfigures the
    comedi device using the `COMEDI_DEVCONFIG` ioctl so that is no longer
    associated with the original hardware device.  The problem is that the
    cookie is not cleared, so that a call to `comedi_auto_unconfig()` from
    the low-level driver will still find it, detach it, clean it up and free
    it.
    
    Stop this problem occurring by always clearing the `hardware_device`
    cookie in the `struct comedi_dev_file_info` whenever the
    `COMEDI_DEVCONFIG` ioctl call is successful.
    Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    7d3135af
comedi_fops.c 56.8 KB