diff --git a/src/lxc/lxc_init.c b/src/lxc/lxc_init.c index 78811de4b..29394c80d 100644 --- a/src/lxc/lxc_init.c +++ b/src/lxc/lxc_init.c @@ -195,6 +195,30 @@ static void kill_children(pid_t pid) fclose(f); } +static void remove_self(void) +{ + char path[PATH_MAX]; + ssize_t n; + + n = readlink("/proc/self/exe", path, sizeof(path)); + if (n < 0) { + SYSERROR("Failed to readlink \"/proc/self/exe\""); + return; + } + + path[n] = 0; + + if (umount2(path, MNT_DETACH) < 0) { + SYSERROR("Failed to unmount \"%s\"", path); + return; + } + + if (unlink(path) < 0) { + SYSERROR("Failed to unlink \"%s\"", path); + return; + } +} + int main(int argc, char *argv[]) { int i, ret; @@ -296,6 +320,8 @@ int main(int argc, char *argv[]) lxc_setup_fs(); + remove_self(); + pid = fork(); if (pid < 0) exit(EXIT_FAILURE);