patch "USB: adutux: fix use-after-free on disconnect" added to usb-linus
Subsystems (2)
This is a note to let you know that I've just added the patch titled
USB: adutux: fix use-after-free on disconnect
to my usb git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
in the usb-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From 44efc269db7929f6275a1fa927ef082e533ecde0 Mon Sep 17 00:00:00 2001
From: Johan Hovold <[email protected]>
Date: Wed, 25 Sep 2019 11:29:12 +0200
Subject: USB: adutux: fix use-after-free on disconnect
The driver was clearing its struct usb_device pointer, which it used as an inverted disconnected flag, before deregistering the character device and without serialising against racing release().
This could lead to a use-after-free if a racing release() callback observes the cleared pointer and frees the driver data before disconnect() is finished with it.
This could also lead to NULL-pointer dereferences in a racing open().
--- drivers/usb/misc/adutux.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/usb/misc/adutux.c +4 -3
@@ -762,14 +762,15 @@ static void adu_disconnect(struct usb_interface *interface) dev =usb_get_intfdata (interface); -mutex_lock (&dev->mtx);/* not interruptible */ - dev->udev =NULL ;/* poison */ usb_deregister_dev (interface, &adu_class); -mutex_unlock (&dev->mtx);mutex_lock (&adutux_mutex);usb_set_intfdata (interface,NULL ); +mutex_lock (&dev->mtx);/* not interruptible */ + dev->udev =NULL ;/* poison */ +mutex_unlock (&dev->mtx); +/* if the device is not opened, then we clean up right now */ if (!dev->open_count)adu_delete (dev);
Signature · 1 line
2.23.0