fix loading of fuse modules

(cherry picked from commit 92b3e9421b0a69d97c4bb7b4ab2bc4f27f1f688f)
This commit is contained in:
yangyun 2024-03-30 15:36:38 +08:00 committed by openeuler-sync-bot
parent b616232bc7
commit 3dd17ef9e0
2 changed files with 57 additions and 1 deletions

View File

@ -0,0 +1,52 @@
From f317ce6a15d7dff6fb5c91e98cf6fbb0a28c6225 Mon Sep 17 00:00:00 2001
From: Goswin von Brederlow <goswin-v-b@web.de>
Date: Fri, 13 Jan 2023 10:36:52 +0100
Subject: [PATCH] Fix loading of FUSE modules
dlsym returns the address of the module factory symbol, not the actual function (#722)
pointer. Change the type of `factory` to `fuse_module_factory_t*` to reflect
this and then dereference it when registering the module.
This is a followup to d92bf83, which introduced a NULL pointer dereference
when dlsym returns NULL, and 8ec7fd9, which reverted it back to not
dereferencing the symbol at all.
Fixes: #721
Co-authored-by: Goswin von Brederlow <brederlo@q-leap.de>
---
lib/fuse.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/fuse.c b/lib/fuse.c
index 44e4857..92f4bf0 100755
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -252,7 +252,7 @@ static int fuse_load_so_module(const char *module)
int ret = -1;
char *tmp;
struct fusemod_so *so;
- fuse_module_factory_t factory;
+ fuse_module_factory_t *factory;
tmp = malloc(strlen(module) + 64);
if (!tmp) {
@@ -274,13 +274,13 @@ static int fuse_load_so_module(const char *module)
}
sprintf(tmp, "fuse_module_%s_factory", module);
- *(void**)(&factory) = dlsym(so->handle, tmp);
+ factory = (fuse_module_factory_t*)dlsym(so->handle, tmp);
if (factory == NULL) {
fuse_log(FUSE_LOG_ERR, "fuse: symbol <%s> not found in module: %s\n",
tmp, dlerror());
goto out_dlclose;
}
- ret = fuse_register_module(module, factory, so);
+ ret = fuse_register_module(module, *factory, so);
if (ret)
goto out_dlclose;
--
2.33.0

View File

@ -2,7 +2,7 @@
Name: fuse3
Version: %{fuse3ver}
Release: 13
Release: 14
Summary: User space File System of fuse3
License: GPL+ and LGPLv2+
URL: http://fuse.sf.net
@ -19,6 +19,7 @@ Patch7: 0007-Fix-use-after-free-warning.patch
Patch8: 0008-Disable-leak-suppression-773.patch
Patch9: 0009-Fix-memory-leak-in-high-level-API-781.patch
Patch10: 0010-Fix-file-leak-in-high-level-API.patch
Patch11: 0011-Fix-loading-of-FUSE-modules.patch
BuildRequires: libselinux-devel, pkgconfig, systemd-udev, meson, fdupes
BuildRequires: autoconf, automake, libtool, gettext-devel, ninja-build
@ -109,6 +110,9 @@ install -p -m 0644 %{SOURCE1} %{buildroot}%{_sysconfdir}
%{_mandir}/man8/*
%changelog
* Sat Mar 30 2024 yangyun <yangyun50@huawei.com> -3.9.2-14
- fix loading of FUSE modules
* Sat Mar 30 2024 yangyun <yangyun50@huawei.com> -3.9.2-13
- fix file leak in high level api