From: Harald Hoyer Date: Wed, 16 May 2012 13:08:28 +0000 (+0200) Subject: main: do_switch_root() do not recursively remove across device boundaries X-Git-Tag: v183~62 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=97a66e94700845239cfe628da3569ac06034fa4d;ds=sidebyside main: do_switch_root() do not recursively remove across device boundaries --- diff --git a/src/core/main.c b/src/core/main.c index 878eaf353..4d09cb717 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -1234,7 +1234,14 @@ static int do_switch_root(const char *switch_root) { } if (cfd >= 0) { - rm_rf_children(cfd, false, false); + struct stat rb; + + if (fstat(cfd, &rb)) { + log_error("failed to stat old root directory"); + goto fail; + } + + rm_rf_children(cfd, false, false, &rb); close(cfd); cfd=-1; }