2020-06-03 02:59:47

by Zhang, Qiang

[permalink] [raw]
Subject: [PATCH] usb: usbtest: fix missing kfree(dev->buf) in usbtest_disconnect

From: Zqiang <[email protected]>

BUG: memory leak
unreferenced object 0xffff888055046e00 (size 256):
comm "kworker/2:9", pid 2570, jiffies 4294942129 (age 1095.500s)
hex dump (first 32 bytes):
00 70 04 55 80 88 ff ff 18 bb 5a 81 ff ff ff ff .p.U......Z.....
f5 96 78 81 ff ff ff ff 37 de 8e 81 ff ff ff ff ..x.....7.......
backtrace:
[<00000000d121dccf>] kmemleak_alloc_recursive
include/linux/kmemleak.h:43 [inline]
[<00000000d121dccf>] slab_post_alloc_hook mm/slab.h:586 [inline]
[<00000000d121dccf>] slab_alloc_node mm/slub.c:2786 [inline]
[<00000000d121dccf>] slab_alloc mm/slub.c:2794 [inline]
[<00000000d121dccf>] kmem_cache_alloc_trace+0x15e/0x2d0 mm/slub.c:2811
[<000000005c3c3381>] kmalloc include/linux/slab.h:555 [inline]
[<000000005c3c3381>] usbtest_probe+0x286/0x19d0
drivers/usb/misc/usbtest.c:2790
[<000000001cec6910>] usb_probe_interface+0x2bd/0x870
drivers/usb/core/driver.c:361
[<000000007806c118>] really_probe+0x48d/0x8f0 drivers/base/dd.c:551
[<00000000a3308c3e>] driver_probe_device+0xfc/0x2a0 drivers/base/dd.c:724
[<000000003ef66004>] __device_attach_driver+0x1b6/0x240
drivers/base/dd.c:831
[<00000000eee53e97>] bus_for_each_drv+0x14e/0x1e0 drivers/base/bus.c:431
[<00000000bb0648d0>] __device_attach+0x1f9/0x350 drivers/base/dd.c:897
[<00000000838b324a>] device_initial_probe+0x1a/0x20 drivers/base/dd.c:944
[<0000000030d501c1>] bus_probe_device+0x1e1/0x280 drivers/base/bus.c:491
[<000000005bd7adef>] device_add+0x131d/0x1c40 drivers/base/core.c:2504
[<00000000a0937814>] usb_set_configuration+0xe84/0x1ab0
drivers/usb/core/message.c:2030
[<00000000e3934741>] generic_probe+0x6a/0xe0 drivers/usb/core/generic.c:210
[<0000000098ade0f1>] usb_probe_device+0x90/0xd0
drivers/usb/core/driver.c:266
[<000000007806c118>] really_probe+0x48d/0x8f0 drivers/base/dd.c:551
[<00000000a3308c3e>] driver_probe_device+0xfc/0x2a0 drivers/base/dd.c:724

Fixes: fabbf2196d0d ("USB: usbtest fix coding style")
Reported-by: Kyungtae Kim <[email protected]>
Signed-off-by: Zqiang <[email protected]>
---
drivers/usb/misc/usbtest.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
index 98ada1a3425c..bae88893ee8e 100644
--- a/drivers/usb/misc/usbtest.c
+++ b/drivers/usb/misc/usbtest.c
@@ -2873,6 +2873,7 @@ static void usbtest_disconnect(struct usb_interface *intf)

usb_set_intfdata(intf, NULL);
dev_dbg(&intf->dev, "disconnect\n");
+ kfree(dev->buf);
kfree(dev);
}

--
2.24.1


2020-06-03 18:41:41

by Alan Stern

[permalink] [raw]
Subject: Re: [PATCH] usb: usbtest: fix missing kfree(dev->buf) in usbtest_disconnect

On Wed, Jun 03, 2020 at 11:05:06AM +0800, [email protected] wrote:
> From: Zqiang <[email protected]>
>
> BUG: memory leak
> unreferenced object 0xffff888055046e00 (size 256):
> comm "kworker/2:9", pid 2570, jiffies 4294942129 (age 1095.500s)
> hex dump (first 32 bytes):
> 00 70 04 55 80 88 ff ff 18 bb 5a 81 ff ff ff ff .p.U......Z.....
> f5 96 78 81 ff ff ff ff 37 de 8e 81 ff ff ff ff ..x.....7.......
> backtrace:
> [<00000000d121dccf>] kmemleak_alloc_recursive
> include/linux/kmemleak.h:43 [inline]
> [<00000000d121dccf>] slab_post_alloc_hook mm/slab.h:586 [inline]
> [<00000000d121dccf>] slab_alloc_node mm/slub.c:2786 [inline]
> [<00000000d121dccf>] slab_alloc mm/slub.c:2794 [inline]
> [<00000000d121dccf>] kmem_cache_alloc_trace+0x15e/0x2d0 mm/slub.c:2811
> [<000000005c3c3381>] kmalloc include/linux/slab.h:555 [inline]
> [<000000005c3c3381>] usbtest_probe+0x286/0x19d0
> drivers/usb/misc/usbtest.c:2790
> [<000000001cec6910>] usb_probe_interface+0x2bd/0x870
> drivers/usb/core/driver.c:361
> [<000000007806c118>] really_probe+0x48d/0x8f0 drivers/base/dd.c:551
> [<00000000a3308c3e>] driver_probe_device+0xfc/0x2a0 drivers/base/dd.c:724
> [<000000003ef66004>] __device_attach_driver+0x1b6/0x240
> drivers/base/dd.c:831
> [<00000000eee53e97>] bus_for_each_drv+0x14e/0x1e0 drivers/base/bus.c:431
> [<00000000bb0648d0>] __device_attach+0x1f9/0x350 drivers/base/dd.c:897
> [<00000000838b324a>] device_initial_probe+0x1a/0x20 drivers/base/dd.c:944
> [<0000000030d501c1>] bus_probe_device+0x1e1/0x280 drivers/base/bus.c:491
> [<000000005bd7adef>] device_add+0x131d/0x1c40 drivers/base/core.c:2504
> [<00000000a0937814>] usb_set_configuration+0xe84/0x1ab0
> drivers/usb/core/message.c:2030
> [<00000000e3934741>] generic_probe+0x6a/0xe0 drivers/usb/core/generic.c:210
> [<0000000098ade0f1>] usb_probe_device+0x90/0xd0
> drivers/usb/core/driver.c:266
> [<000000007806c118>] really_probe+0x48d/0x8f0 drivers/base/dd.c:551
> [<00000000a3308c3e>] driver_probe_device+0xfc/0x2a0 drivers/base/dd.c:724
>
> Fixes: fabbf2196d0d ("USB: usbtest fix coding style")

This patch doesn't really fix that commit. In fact, it has nothing to
do with that commit. You shouldn't just put random commit IDs into your
Changelog.

> Reported-by: Kyungtae Kim <[email protected]>
> Signed-off-by: Zqiang <[email protected]>
> ---
> drivers/usb/misc/usbtest.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
> index 98ada1a3425c..bae88893ee8e 100644
> --- a/drivers/usb/misc/usbtest.c
> +++ b/drivers/usb/misc/usbtest.c
> @@ -2873,6 +2873,7 @@ static void usbtest_disconnect(struct usb_interface *intf)
>
> usb_set_intfdata(intf, NULL);
> dev_dbg(&intf->dev, "disconnect\n");
> + kfree(dev->buf);
> kfree(dev);
> }
>
> --
> 2.24.1

Aside from that one issue,

Acked-by: Alan Stern <[email protected]>