diff options
-rw-r--r-- | sys-utils/switch_root.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/sys-utils/switch_root.c b/sys-utils/switch_root.c index 1222fb1b4..dac946f8c 100644 --- a/sys-utils/switch_root.c +++ b/sys-utils/switch_root.c @@ -23,6 +23,7 @@ #include <sys/mount.h> #include <sys/types.h> #include <sys/stat.h> +#include <sys/statfs.h> #include <sys/param.h> #include <fcntl.h> #include <stdio.h> @@ -36,6 +37,7 @@ #include "c.h" #include "nls.h" #include "closestream.h" +#include "statfs_magic.h" #ifndef MS_MOVE #define MS_MOVE 8192 @@ -177,12 +179,12 @@ static int switchroot(const char *newroot) if (cfd >= 0) { pid = fork(); if (pid <= 0) { - if (fstat(cfd, &sb) == 0) { - if (sb.st_dev == makedev(0, 1)) - recursiveRemove(cfd); - else - warn(_("old root filesystem is not an initramfs")); - } + struct statfs stfs; + if (fstatfs(cfd, &stfs) == 0 && + (stfs.f_type == STATFS_RAMFS_MAGIC || stfs.f_type == STATFS_TMPFS_MAGIC)) + recursiveRemove(cfd); + else + warn(_("old root filesystem is not an initramfs")); if (pid == 0) exit(EXIT_SUCCESS); |