Commit cd489960 authored by Johan Hovold's avatar Johan Hovold Committed by Khalid Elmously

USB: chaoskey: fix use-after-free on release

BugLink: https://bugs.launchpad.net/bugs/1848780

commit 93ddb1f5 upstream.

The driver was accessing its struct usb_interface in its release()
callback without holding a reference. This would lead to a
use-after-free whenever the device was disconnected while the character
device was still open.

Fixes: 66e3e591 ("usb: Add driver for Altus Metrum ChaosKey device (v2)")
Cc: stable <stable@vger.kernel.org>     # 4.1
Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
Link: https://lore.kernel.org/r/20191009153848.8664-3-johan@kernel.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarConnor Kuehl <connor.kuehl@canonical.com>
Signed-off-by: default avatarKhalid Elmously <khalid.elmously@canonical.com>
parent f03e4b88
...@@ -96,6 +96,7 @@ static void chaoskey_free(struct chaoskey *dev) ...@@ -96,6 +96,7 @@ static void chaoskey_free(struct chaoskey *dev)
usb_dbg(dev->interface, "free"); usb_dbg(dev->interface, "free");
kfree(dev->name); kfree(dev->name);
kfree(dev->buf); kfree(dev->buf);
usb_put_intf(dev->interface);
kfree(dev); kfree(dev);
} }
...@@ -144,6 +145,8 @@ static int chaoskey_probe(struct usb_interface *interface, ...@@ -144,6 +145,8 @@ static int chaoskey_probe(struct usb_interface *interface,
if (dev == NULL) if (dev == NULL)
return -ENOMEM; return -ENOMEM;
dev->interface = usb_get_intf(interface);
dev->buf = kmalloc(size, GFP_KERNEL); dev->buf = kmalloc(size, GFP_KERNEL);
if (dev->buf == NULL) { if (dev->buf == NULL) {
...@@ -169,8 +172,6 @@ static int chaoskey_probe(struct usb_interface *interface, ...@@ -169,8 +172,6 @@ static int chaoskey_probe(struct usb_interface *interface,
strcat(dev->name, udev->serial); strcat(dev->name, udev->serial);
} }
dev->interface = interface;
dev->in_ep = in_ep; dev->in_ep = in_ep;
dev->size = size; dev->size = size;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment