diff options
author | Johan Hovold <johan@kernel.org> | 2019-09-19 10:30:38 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-10-04 14:01:56 +0200 |
commit | cd81e6fa8e033e7bcd59415b4a65672b4780030b (patch) | |
tree | 7bb0c8d4965233fb2e3cbf1370a2f1b6b7f6e15c /drivers/usb/storage | |
parent | 33a7813219f208f4952ece60ee255fd983272dec (diff) | |
download | linux-cd81e6fa8e033e7bcd59415b4a65672b4780030b.tar.gz linux-cd81e6fa8e033e7bcd59415b4a65672b4780030b.tar.bz2 linux-cd81e6fa8e033e7bcd59415b4a65672b4780030b.zip |
USB: legousbtower: fix potential NULL-deref on disconnect
The driver is using its struct usb_device pointer as an inverted
disconnected flag, but was setting it to NULL before making sure all
completion handlers had run. This could lead to a NULL-pointer
dereference in a number of dev_dbg and dev_err statements in the
completion handlers which relies on said pointer.
Fix this by unconditionally stopping all I/O and preventing
resubmissions by poisoning the interrupt URBs at disconnect and using a
dedicated disconnected flag.
This also makes sure that all I/O has completed by the time the
disconnect callback returns.
Fixes: 9d974b2a06e3 ("USB: legousbtower.c: remove err() usage")
Fixes: fef526cae700 ("USB: legousbtower: remove custom debug macro")
Fixes: 4dae99638097 ("USB: legotower: remove custom debug macro and module parameter")
Cc: stable <stable@vger.kernel.org> # 3.5
Signed-off-by: Johan Hovold <johan@kernel.org>
Link: https://lore.kernel.org/r/20190919083039.30898-4-johan@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/storage')
0 files changed, 0 insertions, 0 deletions