lxc/0033-conf-ensure-that-the-idmap-pointer-itself-is-freed.patch
WangFengTu 10f4794cfe conf: ensure that the idmap pointer itself is freed
see https://github.com/lxc/lxc/pull/3504

Signed-off-by: WangFengTu <wangfengtu@huawei.com>
2021-11-19 10:18:09 +08:00

72 lines
2.0 KiB
Diff

From 8156691b97ac48763cf42c03aa3b92cfa37f1488 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner@ubuntu.com>
Date: Tue, 4 Aug 2020 00:05:05 +0200
Subject: [PATCH] conf: ensure that the idmap pointer itself is freed
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
(cherry-picked from https://github.com/lxc/lxc/pull/3504)
Conflicts:
src/lxc/conf.c
Signed-off-by: WangFengTu <wangfengtu@huawei.com>
---
src/lxc/conf.c | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
diff --git a/src/lxc/conf.c b/src/lxc/conf.c
index 2a6e27aa4..7464e4a15 100644
--- a/src/lxc/conf.c
+++ b/src/lxc/conf.c
@@ -5362,7 +5362,15 @@ static int lxc_free_idmap(struct lxc_list *id_map)
return 0;
}
-define_cleanup_function(struct lxc_list *, lxc_free_idmap);
+
+static int __lxc_free_idmap(struct lxc_list *id_map)
+{
+ lxc_free_idmap(id_map);
+ free(id_map);
+ return 0;
+}
+
+define_cleanup_function(struct lxc_list *, __lxc_free_idmap);
int lxc_clear_idmaps(struct lxc_conf *c)
{
@@ -5939,7 +5947,7 @@ static struct lxc_list *get_minimal_idmap(const struct lxc_conf *conf,
int userns_exec_1(const struct lxc_conf *conf, int (*fn)(void *), void *data,
const char *fn_name)
{
- call_cleaner(lxc_free_idmap) struct lxc_list *idmap = NULL;
+ call_cleaner(__lxc_free_idmap) struct lxc_list *idmap = NULL;
int ret = -1, status = -1;
char c = '1';
pid_t pid;
@@ -6015,7 +6023,7 @@ int userns_exec_minimal(const struct lxc_conf *conf,
int (*fn_parent)(void *), void *fn_parent_data,
int (*fn_child)(void *), void *fn_child_data)
{
- call_cleaner(lxc_free_idmap) struct lxc_list *idmap = NULL;
+ call_cleaner(__lxc_free_idmap) struct lxc_list *idmap = NULL;
uid_t resuid = LXC_INVALID_UID;
gid_t resgid = LXC_INVALID_GID;
char c = '1';
@@ -6306,10 +6314,8 @@ on_error:
if (pid > 0)
ret = wait_for_pid(pid);
- if (idmap) {
- lxc_free_idmap(idmap);
- free(idmap);
- }
+ if (idmap)
+ __lxc_free_idmap(idmap);
if (host_uid_map && (host_uid_map != container_root_uid))
free(host_uid_map);
--
2.25.1