From e148ac5a6cccd1c9c23bf7b3085b50fdb1cd1cf9 Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Wed, 16 May 2012 14:22:43 +0200 Subject: [PATCH] core/main.c: do_switch_root(): do not remove the old root if not in initrd Only recursively remove the old root, if we have been in an initrd/initramfs. --- src/core/main.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/core/main.c b/src/core/main.c index 747121461d..d7143edae2 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -1180,6 +1180,7 @@ static int do_switch_root(const char *switch_root) { int i; int cfd = -1; struct stat switch_root_stat, sb; + bool remove_old_root; if (path_equal(switch_root, "/")) return 0; @@ -1190,6 +1191,8 @@ static int do_switch_root(const char *switch_root) { goto fail; } + remove_old_root = in_initrd(); + for (i = 0; umounts[i] != NULL; i++) { char newmount[PATH_MAX]; @@ -1215,7 +1218,8 @@ static int do_switch_root(const char *switch_root) { goto fail; } - cfd = open("/", O_RDONLY); + if (remove_old_root) + cfd = open("/", O_RDONLY); if (mount(switch_root, "/", NULL, MS_MOVE, NULL) < 0) { r = -errno;