[PATCH] out of bounds access in hiddev_cleanup

From: Olaf Hering
Date: Wed May 19 2004 - 12:40:40 EST



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.

--- linux-2.6.5/drivers/usb/input/hiddev.c-dist 2004-05-16 17:16:20.260126241 +0200
+++ linux-2.6.5/drivers/usb/input/hiddev.c 2004-05-16 17:16:55.285207314 +0200
@@ -232,7 +232,7 @@ static int hiddev_fasync(int fd, struct
static struct usb_class_driver hiddev_class;
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);
kfree(hiddev);
}



--
USB is for mice, FireWire is for men!

sUse lINUX ag, nÃRNBERG
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/