diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c index 96b0181cf819..a211033b0517 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c @@ -1253,6 +1253,13 @@ static void usbhid_stop(struct hid_device *hid) usbhid->ctrltail = (usbhid->ctrltail + 1) & (HID_CONTROL_FIFO_SIZE - 1); } + while (usbhid->outtail != usbhid->outhead) { + kfree(usbhid->out[usbhid->outtail].raw_report); + usbhid->out[usbhid->outtail].raw_report = NULL; + + usbhid->outtail = (usbhid->outtail + 1) & + (HID_CONTROL_FIFO_SIZE - 1); + } spin_unlock_irq(&usbhid->lock); usb_kill_urb(usbhid->urbin);