diff --git a/0017-btrfs-progs-qgroup-clear-stale-fix-memory-leak.patch b/0017-btrfs-progs-qgroup-clear-stale-fix-memory-leak.patch new file mode 100644 index 0000000000000000000000000000000000000000..566cd150f9720b4118a45f7b7d0199790b6001fc --- /dev/null +++ b/0017-btrfs-progs-qgroup-clear-stale-fix-memory-leak.patch @@ -0,0 +1,80 @@ +From 5aed7ea89aaa16aea87669d30220d8e0340ed76c Mon Sep 17 00:00:00 2001 +From: Qu Wenruo +Date: Fri, 17 Oct 2025 16:30:02 +0800 +Subject: [PATCH] btrfs-progs: qgroup clear-stale: fix memory leak + +[BUG] +ASAN test fails at misc/055 with the following leak: + +Qgroupid Referenced Exclusive Path +-------- ---------- --------- ---- +0/5 16.00KiB 16.00KiB +0/256 16.00KiB 16.00KiB +====== RUN CHECK /home/runner/work/btrfs-progs/btrfs-progs/btrfs qgroup clear-stale /home/runner/work/btrfs-progs/btrfs-progs/tests/mnt + +================================================================= +==102571==ERROR: LeakSanitizer: detected memory leaks + +Indirect leak of 4096 byte(s) in 1 object(s) allocated from: + #0 0x7fd1c98fbb37 in malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:69 + #1 0x55aa2f8953f8 in btrfs_util_subvolume_path_fd libbtrfsutil/subvolume.c:178 + #2 0x55aa2f8fa2a6 in get_or_add_qgroup cmds/qgroup.c:837 + #3 0x55aa2f8fa7e9 in update_qgroup_info cmds/qgroup.c:883 + #4 0x55aa2f8fd912 in __qgroups_search cmds/qgroup.c:1385 + #5 0x55aa2f8fe196 in qgroups_search_all cmds/qgroup.c:1453 + #6 0x55aa2f902a7c in cmd_qgroup_clear_stale cmds/qgroup.c:2281 + #7 0x55aa2f73425b in cmd_execute cmds/commands.h:126 + #8 0x55aa2f734bcc in handle_command_group /home/runner/work/btrfs-progs/btrfs-progs/btrfs.c:177 + #9 0x55aa2f73425b in cmd_execute cmds/commands.h:126 + #10 0x55aa2f735a96 in main /home/runner/work/btrfs-progs/btrfs-progs/btrfs.c:518 + #11 0x7fd1c942a1c9 (/lib/x86_64-linux-gnu/libc.so.6+0x2a1c9) (BuildId: 08134323d00289185684a4cd177d202f39c2a5f3) + #12 0x7fd1c942a28a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28a) (BuildId: 08134323d00289185684a4cd177d202f39c2a5f3) + #13 0x55aa2f734144 in _start (/home/runner/work/btrfs-progs/btrfs-progs/btrfs+0x84144) (BuildId: 56f3dd838e1ae189c142c5d27fac025cd46deddb) + +Indirect leak of 432 byte(s) in 2 object(s) allocated from: + #0 0x7fd1c98fb4d0 in calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:77 + #1 0x55aa2f8fa1a1 in get_or_add_qgroup cmds/qgroup.c:822 + #2 0x55aa2f8fa7e9 in update_qgroup_info cmds/qgroup.c:883 + #3 0x55aa2f8fd912 in __qgroups_search cmds/qgroup.c:1385 + #4 0x55aa2f8fe196 in qgroups_search_all cmds/qgroup.c:1453 + #5 0x55aa2f902a7c in cmd_qgroup_clear_stale cmds/qgroup.c:2281 + #6 0x55aa2f73425b in cmd_execute cmds/commands.h:126 + #7 0x55aa2f734bcc in handle_command_group /home/runner/work/btrfs-progs/btrfs-progs/btrfs.c:177 + #8 0x55aa2f73425b in cmd_execute cmds/commands.h:126 + #9 0x55aa2f735a96 in main /home/runner/work/btrfs-progs/btrfs-progs/btrfs.c:518 + #10 0x7fd1c942a1c9 (/lib/x86_64-linux-gnu/libc.so.6+0x2a1c9) (BuildId: 08134323d00289185684a4cd177d202f39c2a5f3) + #11 0x7fd1c942a28a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28a) (BuildId: 08134323d00289185684a4cd177d202f39c2a5f3) + #12 0x55aa2f734144 in _start (/home/runner/work/btrfs-progs/btrfs-progs/btrfs+0x84144) (BuildId: 56f3dd838e1ae189c142c5d27fac025cd46deddb) + +[CAUSE] +Above leaks are caused by two btrfs_qgroup structures and one path for +toplevel qgroup. + +It's caused by the fact that we called qgroups_search_all() but didn't +do any cleanup. + +[FIX] +Call __free_all_qgroups() inside cmd_qgroup_clear_stale() to properly +free the qgroups. + +Fixes: 701ab151c2b6 ("btrfs-progs: qgroup: new command to delete stale qgroups") +Signed-off-by: Qu Wenruo +--- + cmds/qgroup.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/cmds/qgroup.c b/cmds/qgroup.c +index 2f1893c..c1522f9 100644 +--- a/cmds/qgroup.c ++++ b/cmds/qgroup.c +@@ -2226,6 +2226,7 @@ static int cmd_qgroup_clear_stale(const struct cmd_struct *cmd, int argc, char * + + out: + close_file_or_dir(fd, dirstream); ++ __free_all_qgroups(&qgroup_lookup); + return !!ret; + } + static DEFINE_SIMPLE_COMMAND(qgroup_clear_stale, "clear-stale"); +-- +2.43.0 + diff --git a/btrfs-progs.spec b/btrfs-progs.spec index d8af3c6ebdc19388a19a6fd36ffbf1f09dcba5b9..1094065c245efee64a83762eb9e8807e8f6805ef 100644 --- a/btrfs-progs.spec +++ b/btrfs-progs.spec @@ -1,6 +1,6 @@ Name: btrfs-progs Version: 6.6.3 -Release: 17 +Release: 18 Summary: btrfs userspace programs License: GPLv2 and GPL+ and LGPL-2.1+ and GPL-3.0+ and LGPL-2.1 and MIT URL: https://btrfs.wiki.kernel.org/index.php/Main_Page @@ -22,6 +22,7 @@ Patch0013: 0013-btrfs-progs-corrupt-block-fix-memory-leak-in-debug_c.patch Patch0014: 0014-btrfs-progs-image-fix-the-bug-that-filename-sanitiza.patch Patch0015: 0015-btrfs-progs-convert-fix-the-filename-output-when-rol.patch Patch0016: 0016-btrfs-progs-fix-the-wrong-size-from-device_get_parti.patch +Patch0017: 0017-btrfs-progs-qgroup-clear-stale-fix-memory-leak.patch BuildRequires: python3-devel >= 3.4 BuildRequires: libacl-devel, e2fsprogs-devel, libblkid-devel, libuuid-devel, zlib-devel, libzstd-devel, lzo-devel, systemd-devel @@ -87,6 +88,9 @@ make mandir=%{_mandir} bindir=%{_sbindir} libdir=%{_libdir} incdir=%{_includedir %{_mandir}/man8/*.gz %changelog +* Fri Oct 17 2025 cenhuilin - 6.6.3-18 +- btrfs-progs: qgroup clear-stale: fix memory leak + * Fri Aug 29 2025 liuh - 6.6.3-17 - sync patch from community btrfs-progs: fix the wrong size from device_get_partition_size_sysfs()