• Johan Hovold's avatar
    USB: yurex: fix NULL-derefs on disconnect · aafb00a9
    Johan Hovold authored
    The driver was using its struct usb_interface pointer as an inverted
    disconnected flag, but was setting it to NULL without making sure all
    code paths that used it were done with it.
    
    Before commit ef61eb43 ("USB: yurex: Fix protection fault after
    device removal") this included the interrupt-in completion handler, but
    there are further accesses in dev_err and dev_dbg statements in
    yurex_write() and the driver-data destructor (sic!).
    
    Fix this by unconditionally stopping also the control URB at disconnect
    and by using a dedicated disconnected flag.
    
    Note that we need to take a reference to the struct usb_interface to
    avoid a use-after-free in the destructor whenever the device was
    disconnected while the character device was still open.
    
    Fixes: aadd6472 ("USB: yurex.c: remove dbg() usage")
    Fixes: 45714104 ("USB: yurex.c: remove err() usage")
    Cc: stable <stable@vger.kernel.org>     # 3.5: ef61eb43Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
    Link: https://lore.kernel.org/r/20191009153848.8664-6-johan@kernel.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    aafb00a9
yurex.c 12.7 KB