You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.7 KiB
Diff
50 lines
1.7 KiB
Diff
From 8f806bb1ea30f15db7ca36d1cfa79349f8115302 Mon Sep 17 00:00:00 2001
|
|
From: Karel Zak <kzak@redhat.com>
|
|
Date: Thu, 6 Nov 2014 12:50:27 +0100
|
|
Subject: [PATCH] switch_root: improve statfs->f_type portability
|
|
|
|
__SWORD_TYPE is not available everywhere, for example it's not defined
|
|
by musl libc. It also seems that __SWORD_TYPE is not used for f_type
|
|
on some architectures (s390x).
|
|
|
|
Reported-by: Natanael Copa <ncopa@alpinelinux.org>
|
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
---
|
|
include/statfs_magic.h | 11 +++++++++++
|
|
sys-utils/switch_root.c | 4 ++--
|
|
2 files changed, 13 insertions(+), 2 deletions(-)
|
|
|
|
--- a/include/statfs_magic.h
|
|
+++ b/include/statfs_magic.h
|
|
@@ -1,6 +1,17 @@
|
|
#ifndef UTIL_LINUX_STATFS_MAGIC_H
|
|
#define UTIL_LINUX_STATFS_MAGIC_H
|
|
|
|
+#include <sys/statfs.h>
|
|
+
|
|
+/*
|
|
+ * If possible then don't depend on internal libc __SWORD_TYPE type.
|
|
+ */
|
|
+#ifdef __GNUC__
|
|
+typedef __typeof__( ((struct statfs *)0)->f_type ) ul_statfs_ftype_t;
|
|
+#else
|
|
+typedef __SWORD_TYPE ul_statfs_ftype_t;
|
|
+#endif
|
|
+
|
|
/*
|
|
* Unfortunately, Linux kernel hedeader file <linux/magic.h> is incomplete
|
|
* mess and kernel returns by statfs f_type many numbers that are nowhere
|
|
--- a/sys-utils/switch_root.c
|
|
+++ b/sys-utils/switch_root.c
|
|
@@ -181,8 +181,8 @@ static int switchroot(const char *newroo
|
|
if (pid <= 0) {
|
|
struct statfs stfs;
|
|
if (fstatfs(cfd, &stfs) == 0 &&
|
|
- (stfs.f_type == (__SWORD_TYPE)STATFS_RAMFS_MAGIC ||
|
|
- stfs.f_type == (__SWORD_TYPE)STATFS_TMPFS_MAGIC))
|
|
+ (stfs.f_type == (ul_statfs_ftype_t) STATFS_RAMFS_MAGIC ||
|
|
+ stfs.f_type == (ul_statfs_ftype_t) STATFS_TMPFS_MAGIC))
|
|
recursiveRemove(cfd);
|
|
else
|
|
warn(_("old root filesystem is not an initramfs"));
|