diff mbox series

btrfs: fix btrfs_test_delayed_refs leak

Message ID 20250210111728.32320-2-ddiss@suse.de (mailing list archive)
State New
Headers show
Series btrfs: fix btrfs_test_delayed_refs leak | expand

Commit Message

David Disseldorp Feb. 10, 2025, 11:17 a.m. UTC
The btrfs_transaction struct leaks, which can cause sporadic xfstests
failures when kmemleak checking is enabled:

kmemleak: 5 new suspected memory leaks (see /sys/kernel/debug/kmemleak)
> cat /sys/kernel/debug/kmemleak
unreferenced object 0xffff88810fdc6c00 (size 512):
  comm "modprobe", pid 203, jiffies 4294892552
  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 (crc 6736050f):
    __kmalloc_cache_noprof+0x133/0x2c0
    btrfs_test_delayed_refs+0x6f/0xbb0 [btrfs]
    btrfs_run_sanity_tests.cold+0x91/0xf9 [btrfs]
    0xffffffffa02fd055
    do_one_initcall+0x49/0x1c0
    do_init_module+0x5b/0x1f0
    init_module_from_file+0x70/0x90
    idempotent_init_module+0xe8/0x2c0
    __x64_sys_finit_module+0x6b/0xd0
    do_syscall_64+0x54/0x110
    entry_SYSCALL_64_after_hwframe+0x76/0x7e

The transaction struct was initially stack-allocated but switched to
heap following frame size compiler warnings.

Fixes: 2b34879d97e27 ("btrfs: selftests: add delayed ref self test cases")
Link: https://lore.kernel.org/all/20241206195100.GM31418@twin.jikos.cz/
Signed-off-by: David Disseldorp <ddiss@suse.de>
---
 fs/btrfs/tests/delayed-refs-tests.c | 1 +
 1 file changed, 1 insertion(+)

Comments

David Sterba Feb. 10, 2025, 5:13 p.m. UTC | #1
On Mon, Feb 10, 2025 at 10:17:29PM +1100, David Disseldorp wrote:
> The btrfs_transaction struct leaks, which can cause sporadic xfstests
> failures when kmemleak checking is enabled:
> 
> kmemleak: 5 new suspected memory leaks (see /sys/kernel/debug/kmemleak)
> > cat /sys/kernel/debug/kmemleak
> unreferenced object 0xffff88810fdc6c00 (size 512):
>   comm "modprobe", pid 203, jiffies 4294892552
>   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 (crc 6736050f):
>     __kmalloc_cache_noprof+0x133/0x2c0
>     btrfs_test_delayed_refs+0x6f/0xbb0 [btrfs]
>     btrfs_run_sanity_tests.cold+0x91/0xf9 [btrfs]
>     0xffffffffa02fd055
>     do_one_initcall+0x49/0x1c0
>     do_init_module+0x5b/0x1f0
>     init_module_from_file+0x70/0x90
>     idempotent_init_module+0xe8/0x2c0
>     __x64_sys_finit_module+0x6b/0xd0
>     do_syscall_64+0x54/0x110
>     entry_SYSCALL_64_after_hwframe+0x76/0x7e
> 
> The transaction struct was initially stack-allocated but switched to
> heap following frame size compiler warnings.
> 
> Fixes: 2b34879d97e27 ("btrfs: selftests: add delayed ref self test cases")
> Link: https://lore.kernel.org/all/20241206195100.GM31418@twin.jikos.cz/
> Signed-off-by: David Disseldorp <ddiss@suse.de>

Added to for-next, thanks.
Qu Wenruo Feb. 11, 2025, 2:54 a.m. UTC | #2
在 2025/2/10 21:47, David Disseldorp 写道:
> The btrfs_transaction struct leaks, which can cause sporadic xfstests
> failures when kmemleak checking is enabled:
> 
> kmemleak: 5 new suspected memory leaks (see /sys/kernel/debug/kmemleak)
>> cat /sys/kernel/debug/kmemleak
> unreferenced object 0xffff88810fdc6c00 (size 512):
>    comm "modprobe", pid 203, jiffies 4294892552
>    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 (crc 6736050f):
>      __kmalloc_cache_noprof+0x133/0x2c0
>      btrfs_test_delayed_refs+0x6f/0xbb0 [btrfs]
>      btrfs_run_sanity_tests.cold+0x91/0xf9 [btrfs]
>      0xffffffffa02fd055
>      do_one_initcall+0x49/0x1c0
>      do_init_module+0x5b/0x1f0
>      init_module_from_file+0x70/0x90
>      idempotent_init_module+0xe8/0x2c0
>      __x64_sys_finit_module+0x6b/0xd0
>      do_syscall_64+0x54/0x110
>      entry_SYSCALL_64_after_hwframe+0x76/0x7e
> 
> The transaction struct was initially stack-allocated but switched to
> heap following frame size compiler warnings.
> 
> Fixes: 2b34879d97e27 ("btrfs: selftests: add delayed ref self test cases")
> Link: https://lore.kernel.org/all/20241206195100.GM31418@twin.jikos.cz/
> Signed-off-by: David Disseldorp <ddiss@suse.de>

Reviewed-by: Qu Wenruo <wqu@suse.com>

Thanks,
Qu

> ---
>   fs/btrfs/tests/delayed-refs-tests.c | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/fs/btrfs/tests/delayed-refs-tests.c b/fs/btrfs/tests/delayed-refs-tests.c
> index 6558508c2ddf5..265370e79a546 100644
> --- a/fs/btrfs/tests/delayed-refs-tests.c
> +++ b/fs/btrfs/tests/delayed-refs-tests.c
> @@ -1009,6 +1009,7 @@ int btrfs_test_delayed_refs(u32 sectorsize, u32 nodesize)
>   	if (!ret)
>   		ret = select_delayed_refs_test(&trans);
>   
> +	kfree(transaction);
>   out_free_fs_info:
>   	btrfs_free_dummy_fs_info(fs_info);
>   	return ret;
diff mbox series

Patch

diff --git a/fs/btrfs/tests/delayed-refs-tests.c b/fs/btrfs/tests/delayed-refs-tests.c
index 6558508c2ddf5..265370e79a546 100644
--- a/fs/btrfs/tests/delayed-refs-tests.c
+++ b/fs/btrfs/tests/delayed-refs-tests.c
@@ -1009,6 +1009,7 @@  int btrfs_test_delayed_refs(u32 sectorsize, u32 nodesize)
 	if (!ret)
 		ret = select_delayed_refs_test(&trans);
 
+	kfree(transaction);
 out_free_fs_info:
 	btrfs_free_dummy_fs_info(fs_info);
 	return ret;