Commit 93ddb1f5 authored by Johan Hovold's avatar Johan Hovold Committed by Greg Kroah-Hartman

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

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>
parent 123a0f12
...@@ -98,6 +98,7 @@ static void chaoskey_free(struct chaoskey *dev) ...@@ -98,6 +98,7 @@ static void chaoskey_free(struct chaoskey *dev)
usb_free_urb(dev->urb); usb_free_urb(dev->urb);
kfree(dev->name); kfree(dev->name);
kfree(dev->buf); kfree(dev->buf);
usb_put_intf(dev->interface);
kfree(dev); kfree(dev);
} }
} }
...@@ -145,6 +146,8 @@ static int chaoskey_probe(struct usb_interface *interface, ...@@ -145,6 +146,8 @@ static int chaoskey_probe(struct usb_interface *interface,
if (dev == NULL) if (dev == NULL)
goto out; goto out;
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)
...@@ -174,8 +177,6 @@ static int chaoskey_probe(struct usb_interface *interface, ...@@ -174,8 +177,6 @@ static int chaoskey_probe(struct usb_interface *interface,
goto out; goto out;
} }
dev->interface = interface;
dev->in_ep = in_ep; dev->in_ep = in_ep;
if (le16_to_cpu(udev->descriptor.idVendor) != ALEA_VENDOR_ID) if (le16_to_cpu(udev->descriptor.idVendor) != ALEA_VENDOR_ID)
......
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