diff --git a/0007-Fix-memory-leak-in-high-level-API-781.patch b/0007-Fix-memory-leak-in-high-level-API-781.patch new file mode 100644 index 0000000000000000000000000000000000000000..a5b52208f3e7a5ba227398d0f399a593a839e01f --- /dev/null +++ b/0007-Fix-memory-leak-in-high-level-API-781.patch @@ -0,0 +1,69 @@ +From 2ecbbb7e091c8fefe099ac9df4a90fc6d6e07a7a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Matthias=20G=C3=B6rgens?= +Date: Fri, 14 Apr 2023 19:19:03 +0800 +Subject: [PATCH] Fix memory leak in high level API (#781) + +Previously, in the high level API if we received a signal between +setting up signal handlers and processing INIT, we would leak + +``` +$ ./example/hello -s -d -f mountpoint/ +[9/9] Linking target example/hello_ll +FUSE library version: 3.14.1 +nullpath_ok: 0 + +================================================================= +==178330==ERROR: LeakSanitizer: detected memory leaks + +Direct leak of 352 byte(s) in 1 object(s) allocated from: + #0 0x7fbb19abf411 in __interceptor_calloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:77 + #1 0x7fbb1a0efd3b in fuse_fs_new ../lib/fuse.c:4814 + #2 0x7fbb1a0f02b5 in fuse_new_31 ../lib/fuse.c:4913 + #3 0x7fbb1a10ec5e in fuse_main_real ../lib/helper.c:345 + #4 0x5625db8ab418 in main ../example/hello.c:176 + #5 0x7fbb1983c78f (/usr/lib/libc.so.6+0x2378f) + +SUMMARY: AddressSanitizer: 352 byte(s) leaked in 1 allocation(s). +``` + +That's because `fuse_lowlevel.c`s `fuse_session_destroy` would only call +the user supplied `op.destroy`, if INIT had been processed, but the high +level API relied on `op.destroy` to free `f->fs`. + +This patch moves the freeing into `fuse_destroy` that will always be +called by our high-level API. +--- + lib/fuse.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/lib/fuse.c b/lib/fuse.c +index a95d7c1..ff5d91b 100644 +--- a/lib/fuse.c ++++ b/lib/fuse.c +@@ -2670,7 +2670,6 @@ void fuse_fs_destroy(struct fuse_fs *fs) + fs->op.destroy(fs->user_data); + if (fs->m) + fuse_put_module(fs->m); +- free(fs); + } + + static void fuse_lib_destroy(void *data) +@@ -2679,7 +2678,6 @@ static void fuse_lib_destroy(void *data) + + fuse_create_context(f); + fuse_fs_destroy(f->fs); +- f->fs = NULL; + } + + static void fuse_lib_lookup(fuse_req_t req, fuse_ino_t parent, +@@ -5100,6 +5098,7 @@ void fuse_destroy(struct fuse *f) + free(f->name_table.array); + pthread_mutex_destroy(&f->lock); + fuse_session_destroy(f->se); ++ free(f->fs); + free(f->conf.modules); + free(f); + fuse_delete_context_key(); +-- +2.33.0 + diff --git a/fuse3.spec b/fuse3.spec index d181bda401287082b96fa0bc08958be588b6ff2c..f17eba7d5fbd2a7b67f2ce57d9c590ff4ce6d8fd 100644 --- a/fuse3.spec +++ b/fuse3.spec @@ -2,7 +2,7 @@ Name: fuse3 Version: %{fuse3ver} -Release: 6 +Release: 7 Summary: User space File System of fuse3 License: GPL+ and LGPLv2+ URL: http://fuse.sf.net @@ -15,6 +15,7 @@ Patch3: 0003-Fix-fd-leak-with-clone_fd.patch Patch4: 0004-Use-destroy_req-instead-of-free-to-destroy-fuse_req.patch Patch5: 0005-Fix-use-after-free-warning.patch Patch6: 0006-Disable-leak-suppression-773.patch +Patch7: 0007-Fix-memory-leak-in-high-level-API-781.patch BuildRequires: libselinux-devel, pkgconfig, systemd-udev, meson, fdupes BuildRequires: autoconf, automake, libtool, gettext-devel, ninja-build @@ -105,6 +106,9 @@ install -p -m 0644 %{SOURCE1} %{buildroot}%{_sysconfdir} %{_mandir}/man8/* %changelog +* Thu Feb 8 2024 yangyun -3.10.5-7 +- fix memory leak in high level API + * Thu Jun 8 2023 volcanodragon -3.10.5-6 - Sync fome patches