________________________________________ 发件人: Zhang, Qiang <qiang.zhang@xxxxxxxxxxxxx> 发送时间: 2020年11月17日 13:49 收件人: jikos@xxxxxxxxxx; benjamin.tissoires@xxxxxxxxxx 抄送: stern@xxxxxxxxxxxxxxxxxxx; linux-usb@xxxxxxxxxxxxxxx 主题: [PATCH] HID: usbhid: fix memleak for ctrl or out raw_report From: Zqiang <qiang.zhang@xxxxxxxxxxxxx> When the usb device disconnect, usbhid_stop function be called, if ctrl or out's raw_report exists, need to be free. Signed-off-by: Zqiang <qiang.zhang@xxxxxxxxxxxxx> --- drivers/hid/usbhid/hid-core.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c index 17a29ee0ac6c..f8a49f8d4015 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c @@ -1209,6 +1209,7 @@ static int usbhid_start(struct hid_device *hid) static void usbhid_stop(struct hid_device *hid) { struct usbhid_device *usbhid = hid->driver_data; + int index; if (WARN_ON(!usbhid)) return; @@ -1232,6 +1233,13 @@ static void usbhid_stop(struct hid_device *hid) hid->claimed = 0; + for (index = 0; index < HID_CONTROL_FIFO_SIZE; index++) { + if (usbhid->ctrl[index].raw_report) + kfree(usbhid->ctrl[index].raw_report); + if (usbhid->out[index].raw_report) + kfree(usbhid->out[index].raw_report); + } + usb_free_urb(usbhid->urbin); usb_free_urb(usbhid->urbctrl); usb_free_urb(usbhid->urbout); -- 2.17.1