Commit 3a386413 authored by Olaf Hering's avatar Olaf Hering Committed by Greg Kroah-Hartman

[PATCH] USB: out of bounds access in hiddev_cleanup

hiddev_table[] is an array of pointers.  the minor number is used as an
offset.  hiddev minors start either with zero, or with 96.  If they start
with 96, the offset must be reduced by HIDDEV_MINOR_BASE because only 16
minors are available.  unplugging a hiddevice will zero data outside the
hiddev_table array.

this was spotted by Takashi Iwai.
parent 6dbb845a
...@@ -232,7 +232,7 @@ static int hiddev_fasync(int fd, struct file *file, int on) ...@@ -232,7 +232,7 @@ static int hiddev_fasync(int fd, struct file *file, int on)
static struct usb_class_driver hiddev_class; static struct usb_class_driver hiddev_class;
static void hiddev_cleanup(struct hiddev *hiddev) static void hiddev_cleanup(struct hiddev *hiddev)
{ {
hiddev_table[hiddev->hid->minor] = NULL; hiddev_table[hiddev->hid->minor - HIDDEV_MINOR_BASE] = NULL;
usb_deregister_dev(hiddev->hid->intf, &hiddev_class); usb_deregister_dev(hiddev->hid->intf, &hiddev_class);
kfree(hiddev); kfree(hiddev);
} }
......
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