From: t00416110 Date: Thu, 17 Jan 2019 09:16:22 +0000 (+0800) Subject: conf.c: fix memory leak and mount error X-Git-Tag: lxc-3.2.0~188^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a3ed9b811821e2c85a11edd941af97c7e984e510;p=thirdparty%2Flxc.git conf.c: fix memory leak and mount error 1. cleanup namespace memory 2. fix bug when ro mount not setted, mount propagation will be skipped. Signed-off-by: t00416110 --- diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 0d86d66e5..6b2ebf7ec 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -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); diff --git a/src/lxc/conf.h b/src/lxc/conf.h index a9e238ac1..85daf1b6a 100644 --- a/src/lxc/conf.h +++ b/src/lxc/conf.h @@ -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 */