From e58dab009be0efbc2fbf60b4cff50d79d6ffbca8 Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Wed, 31 Aug 2016 02:20:09 +0200 Subject: [PATCH 24/24] bindings: restore original working directory Signed-off-by: Christian Brauner --- bindings.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/bindings.c b/bindings.c index b2d5553..ac88f48 100644 --- a/bindings.c +++ b/bindings.c @@ -4345,7 +4345,8 @@ static int preserve_ns(int pid) static void __attribute__((constructor)) collect_and_mount_subsystems(void) { FILE *f; - char *line = NULL; + char *cret, *line = NULL; + char cwd[MAXPATHLEN]; size_t len = 0; int i, init_ns = -1; @@ -4353,6 +4354,7 @@ static void __attribute__((constructor)) collect_and_mount_subsystems(void) lxcfs_error("Error opening /proc/self/cgroup: %s\n", strerror(errno)); return; } + while (getline(&line, &len, f) != -1) { char *p, *p2; @@ -4394,6 +4396,10 @@ static void __attribute__((constructor)) collect_and_mount_subsystems(void) for (i = 0; i < num_hierarchies; i++) fd_hierarchies[i] = -1; + cret = getcwd(cwd, MAXPATHLEN); + if (!cret) + lxcfs_debug("Could not retrieve current working directory: %s.\n", strerror(errno)); + /* This function calls unshare(CLONE_NEWNS) our initial mount namespace * to privately mount lxcfs cgroups. */ if (!cgfs_setup_controllers()) { @@ -4406,6 +4412,9 @@ static void __attribute__((constructor)) collect_and_mount_subsystems(void) goto out; } + if (!cret || chdir(cwd) < 0) + lxcfs_debug("Could not change back to original working directory: %s.\n", strerror(errno)); + print_subsystems(); out: -- 2.9.3