]> git.proxmox.com Git - mirror_lxcfs.git/commitdiff
fix reinitialization with fuse3
authorWolfgang Bumiller <w.bumiller@proxmox.com>
Fri, 29 Jul 2022 07:30:10 +0000 (09:30 +0200)
committerWolfgang Bumiller <w.bumiller@proxmox.com>
Fri, 29 Jul 2022 07:30:10 +0000 (09:30 +0200)
With fuse3 `fuse_get_context` returns NULL before fuse was
fully initialized, so we must not access it.

Futher, we call 'do_reload' for normal initialization as
well, so let's prevent that from re-initializing the
bindings initially and only do this on actual reloads,
otherwise we do it twice on startup.

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
Fixes #549

src/bindings.c
src/lxcfs.c

index 422a6229dc1e78cffbaba391b4f5995500b7f464..fee7ede0dab672cf2a844fe3f0ccf3974f2f4b26 100644 (file)
@@ -943,5 +943,5 @@ void *lxcfs_fuse_init(struct fuse_conn_info *conn, void *data)
        can_use_sys_cpu = true;
 #endif
        has_versioned_opts = true;
-       return fc->private_data;
+       return fc ? fc->private_data : NULL;
 }
index d1a3d805c0c9cdf805453335c4b2d00cc30e2084..fed896c965835ae14c4dc1219aff6b3297035cf0 100644 (file)
@@ -123,7 +123,7 @@ static int lxcfs_init_library(void)
 
 /* do_reload - reload the dynamic library.  Done under
  * lock and when we know the user_count was 0 */
-static void do_reload(void)
+static void do_reload(bool reinit)
 {
        int ret;
        char lxcfs_lib_path[PATH_MAX];
@@ -164,7 +164,7 @@ static void do_reload(void)
 
 good:
        /* initialize the library */
-       if (lxcfs_init_library() < 0) {
+       if (reinit && lxcfs_init_library() < 0) {
                log_exit("Failed to initialize liblxcfs.so");
        }
 
@@ -180,7 +180,7 @@ static void up_users(void)
 {
        users_lock();
        if (users_count == 0 && need_reload)
-               do_reload();
+               do_reload(true);
        users_count++;
        users_unlock();
 }
@@ -1362,7 +1362,7 @@ int main(int argc, char *argv[])
        fuse_argv[fuse_argc++] = new_argv[0];
        fuse_argv[fuse_argc] = NULL;
 
-       do_reload();
+       do_reload(false);
        if (install_signal_handler(SIGUSR1, sigusr1_reload)) {
                lxcfs_error("%s - Failed to install SIGUSR1 signal handler", strerror(errno));
                goto out;