fix memory leak in high level API
(cherry picked from commit 0093c0418c62d1c29f5da05cd767ff5e96285381)
This commit is contained in:
parent
473b89fb9c
commit
bb321d8b49
69
0007-Fix-memory-leak-in-high-level-API-781.patch
Normal file
69
0007-Fix-memory-leak-in-high-level-API-781.patch
Normal file
@ -0,0 +1,69 @@
|
||||
From 2ecbbb7e091c8fefe099ac9df4a90fc6d6e07a7a Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Matthias=20G=C3=B6rgens?= <matthias.goergens@gmail.com>
|
||||
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
|
||||
|
||||
@ -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 <yangyun50@huawei.com> -3.10.5-7
|
||||
- fix memory leak in high level API
|
||||
|
||||
* Thu Jun 8 2023 volcanodragon <linfeilong@huawei.com> -3.10.5-6
|
||||
- Sync fome patches
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user