Re: [PATCH] out of bounds access in hiddev_cleanup

Vojtech Pavlik
2004-05-20T10:16:13Z

On Wed, May 19, 2004 at 07:39:29PM +0200, Olaf Hering wrote:
>
> 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);
> }

Already applied to my tree, thanks for forwarding it anyway.

--
Vojtech Pavlik
SuSE Labs, SuSE CR