diff mbox series

scsi: scsi_debug: fix a memory leak.

Message ID 20210208111734.34034-1-mlombard@redhat.com (mailing list archive)
State Accepted
Headers show
Series scsi: scsi_debug: fix a memory leak. | expand

Commit Message

Maurizio Lombardi Feb. 8, 2021, 11:17 a.m. UTC
The sdebug_q_arr pointer must be freed when the module is unloaded

# cat /sys/kernel/debug/kmemleak
unreferenced object 0xffff888e1cfb0000 (size 4096):
  comm "modprobe", pid 165555, jiffies 4325987516 (age 685.194s)
  hex dump (first 32 bytes):
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  backtrace:
    [<00000000458f4f5d>] 0xffffffffc06702d9
    [<000000003edc4b1f>] do_one_initcall+0xe9/0x57d
    [<00000000da7d518c>] do_init_module+0x1d1/0x6f0
    [<000000009a6a9248>] load_module+0x36bd/0x4f50
    [<00000000ddb0c3ce>] __do_sys_init_module+0x1db/0x260
    [<000000009532db57>] do_syscall_64+0xa5/0x420
    [<000000002916b13d>] entry_SYSCALL_64_after_hwframe+0x6a/0xdf

Fixes: 87c715dcde633f4cc4690a24a240e838181e6a9d

Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
---
 drivers/scsi/scsi_debug.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Douglas Gilbert Feb. 8, 2021, 5:38 p.m. UTC | #1
On 2021-02-08 6:17 a.m., Maurizio Lombardi wrote:
> The sdebug_q_arr pointer must be freed when the module is unloaded
> 
> # cat /sys/kernel/debug/kmemleak
> unreferenced object 0xffff888e1cfb0000 (size 4096):
>    comm "modprobe", pid 165555, jiffies 4325987516 (age 685.194s)
>    hex dump (first 32 bytes):
>      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
>      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
>    backtrace:
>      [<00000000458f4f5d>] 0xffffffffc06702d9
>      [<000000003edc4b1f>] do_one_initcall+0xe9/0x57d
>      [<00000000da7d518c>] do_init_module+0x1d1/0x6f0
>      [<000000009a6a9248>] load_module+0x36bd/0x4f50
>      [<00000000ddb0c3ce>] __do_sys_init_module+0x1db/0x260
>      [<000000009532db57>] do_syscall_64+0xa5/0x420
>      [<000000002916b13d>] entry_SYSCALL_64_after_hwframe+0x6a/0xdf
> 
> Fixes: 87c715dcde633f4cc4690a24a240e838181e6a9d
> 
> Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>

Acked-by: Douglas Gilbert <dgilbert@interlog.com>

Thanks.

> ---
>   drivers/scsi/scsi_debug.c | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
> index 4a08c450b756..b6540b92f566 100644
> --- a/drivers/scsi/scsi_debug.c
> +++ b/drivers/scsi/scsi_debug.c
> @@ -6881,6 +6881,7 @@ static void __exit scsi_debug_exit(void)
>   
>   	sdebug_erase_all_stores(false);
>   	xa_destroy(per_store_ap);
> +	kfree(sdebug_q_arr);
>   }
>   
>   device_initcall(scsi_debug_init);
>
Martin K. Petersen Feb. 9, 2021, 3:43 a.m. UTC | #2
On Mon, 8 Feb 2021 12:17:34 +0100, Maurizio Lombardi wrote:

> The sdebug_q_arr pointer must be freed when the module is unloaded
> 
> # cat /sys/kernel/debug/kmemleak
> unreferenced object 0xffff888e1cfb0000 (size 4096):
>   comm "modprobe", pid 165555, jiffies 4325987516 (age 685.194s)
>   hex dump (first 32 bytes):
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
>   backtrace:
>     [<00000000458f4f5d>] 0xffffffffc06702d9
>     [<000000003edc4b1f>] do_one_initcall+0xe9/0x57d
>     [<00000000da7d518c>] do_init_module+0x1d1/0x6f0
>     [<000000009a6a9248>] load_module+0x36bd/0x4f50
>     [<00000000ddb0c3ce>] __do_sys_init_module+0x1db/0x260
>     [<000000009532db57>] do_syscall_64+0xa5/0x420
>     [<000000002916b13d>] entry_SYSCALL_64_after_hwframe+0x6a/0xdf
> 
> [...]

Applied to 5.11/scsi-fixes, thanks!

[1/1] scsi: scsi_debug: fix a memory leak.
      https://git.kernel.org/mkp/scsi/c/f852c596f2ee
diff mbox series

Patch

diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index 4a08c450b756..b6540b92f566 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -6881,6 +6881,7 @@  static void __exit scsi_debug_exit(void)
 
 	sdebug_erase_all_stores(false);
 	xa_destroy(per_store_ap);
+	kfree(sdebug_q_arr);
 }
 
 device_initcall(scsi_debug_init);