]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
conf.c: fix memory leak and mount error 2788/head
authort00416110 <tanyifeng1@huawei.com>
Thu, 17 Jan 2019 09:16:22 +0000 (17:16 +0800)
committert00416110 <tanyifeng1@huawei.com>
Thu, 17 Jan 2019 09:33:34 +0000 (17:33 +0800)
1. cleanup namespace memory
2. fix bug when ro mount not setted, mount propagation will be skipped.

Signed-off-by: t00416110 <tanyifeng1@huawei.com>
src/lxc/conf.c
src/lxc/conf.h

index 0d86d66e55da8a7d0b9aa13fe412f624f42e4425..6b2ebf7ec6ef7234070e69fc5643f46c61ee1702 100644 (file)
@@ -2103,6 +2103,9 @@ static int mount_entry(const char *fsname, const char *target,
                }
        }
 
+#ifdef HAVE_STATVFS
+skipremount:
+#endif
        if (pflags) {
                ret = mount(NULL, target, NULL, pflags, NULL);
                if (ret < 0) {
@@ -2119,10 +2122,6 @@ static int mount_entry(const char *fsname, const char *target,
                DEBUG("Changed mount propagation for \"%s\"", target);
        }
 
-
-#ifdef HAVE_STATVFS
-skipremount:
-#endif
        DEBUG("Mounted \"%s\" on \"%s\" with filesystem type \"%s\"",
              srcpath ? srcpath : "(null)", target, fstype);
 
@@ -3833,6 +3832,16 @@ int lxc_clear_config_keepcaps(struct lxc_conf *c)
        return 0;
 }
 
+int lxc_clear_namespace(struct lxc_conf *c)
+{
+       int i;
+       for (i = 0; i < LXC_NS_MAX; i++) {
+               free(c->ns_share[i]);
+               c->ns_share[i] = NULL;
+       }
+       return 0;
+}
+
 int lxc_clear_cgroups(struct lxc_conf *c, const char *key, int version)
 {
        char *global_token, *namespaced_token;
@@ -4125,6 +4134,7 @@ void lxc_conf_free(struct lxc_conf *conf)
        lxc_clear_sysctls(conf, "lxc.sysctl");
        lxc_clear_procs(conf, "lxc.proc");
        lxc_clear_apparmor_raw(conf);
+       lxc_clear_namespace(conf);
        free(conf->cgroup_meta.dir);
        free(conf->cgroup_meta.controllers);
        free(conf->shmount.path_host);
index a9e238ac160db53ec3e8215df1b7f7fdb6b760fe..85daf1b6a514d189df90990c70a17ee3ec601593 100644 (file)
@@ -462,5 +462,6 @@ extern int lxc_clear_sysctls(struct lxc_conf *c, const char *key);
 extern int setup_proc_filesystem(struct lxc_list *procs, pid_t pid);
 extern int lxc_clear_procs(struct lxc_conf *c, const char *key);
 extern int lxc_clear_apparmor_raw(struct lxc_conf *c);
+extern int lxc_clear_namespace(struct lxc_conf *c);
 
 #endif /* __LXC_CONF_H */