Blame 0083-check-root-candidates-more-carefully.patch

Harald Hoyer 55891e
From f8342dd5f2235979db7b5fc0d54df408538921e6 Mon Sep 17 00:00:00 2001
Harald Hoyer 55891e
From: Michal Soltys <soltys@ziu.info>
Harald Hoyer 55891e
Date: Mon, 17 Oct 2011 23:36:33 +0200
Harald Hoyer 55891e
Subject: [PATCH] check root candidates more carefully
Harald Hoyer 55891e
Harald Hoyer 55891e
This is from the following thread:
Harald Hoyer 55891e
Harald Hoyer 55891e
http://thread.gmane.org/gmane.linux.raid/35753/focus=35795
Harald Hoyer 55891e
Harald Hoyer 55891e
Additional tests + more specific info.
Harald Hoyer 55891e
Harald Hoyer 55891e
Signed-off-by: Michal Soltys <soltys@ziu.info>
Harald Hoyer 55891e
Harald Hoyer 55891e
[harald@redhat.com: usable_root(): relaxed check for root]
Harald Hoyer 55891e
---
Harald Hoyer 55891e
 modules.d/99base/dracut-lib.sh |    9 +++++++++
Harald Hoyer 55891e
 modules.d/99base/init          |   12 ++++++++++--
Harald Hoyer 55891e
 2 files changed, 19 insertions(+), 2 deletions(-)
Harald Hoyer 55891e
Harald Hoyer 55891e
diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
Harald Hoyer 55891e
index bc4d7c9..2cfaf93 100755
Harald Hoyer 55891e
--- a/modules.d/99base/dracut-lib.sh
Harald Hoyer 55891e
+++ b/modules.d/99base/dracut-lib.sh
Harald Hoyer 55891e
@@ -544,3 +544,12 @@ foreach_uuid_until() (
Harald Hoyer 55891e
 
Harald Hoyer 55891e
     return 1
Harald Hoyer 55891e
 )
Harald Hoyer 55891e
+
Harald Hoyer 55891e
+usable_root() {
Harald Hoyer 55891e
+    local _d
Harald Hoyer 55891e
+    [ -d $1 ] || return 1
Harald Hoyer 55891e
+    for _d in proc sys dev; do
Harald Hoyer 55891e
+        [ -e "$1"/$_d ] || return 1
Harald Hoyer 55891e
+    done
Harald Hoyer 55891e
+    return 0
Harald Hoyer 55891e
+}
Harald Hoyer 55891e
diff --git a/modules.d/99base/init b/modules.d/99base/init
Harald Hoyer 55891e
index 06d61a8..556ac68 100755
Harald Hoyer 55891e
--- a/modules.d/99base/init
Harald Hoyer 55891e
+++ b/modules.d/99base/init
Harald Hoyer 55891e
@@ -286,10 +286,18 @@ getarg 'rd.break=mount' 'rdbreak=mount' && emergency_shell -n mount "Break mount
Harald Hoyer 55891e
 # be sourced any number of times. As soon as one suceeds, no more are sourced.
Harald Hoyer 55891e
 i=0
Harald Hoyer 55891e
 while :; do
Harald Hoyer 55891e
-    [ -d "$NEWROOT/proc" ] && break;
Harald Hoyer 55891e
+    if ismounted "$NEWROOT"; then
Harald Hoyer 55891e
+        usable_root "$NEWROOT" && break;
Harald Hoyer 55891e
+        umount "$NEWROOT"
Harald Hoyer 55891e
+    fi
Harald Hoyer 55891e
     for f in $hookdir/mount/*.sh; do
Harald Hoyer 55891e
         [ -f "$f" ] && . "$f"
Harald Hoyer 55891e
-        [ -d "$NEWROOT/proc" ] && break;
Harald Hoyer 55891e
+        if ismounted "$NEWROOT"; then
Harald Hoyer 55891e
+            usable_root "$NEWROOT" && break;
Harald Hoyer 55891e
+            warn "$NEWROOT has no proper rootfs layout, ignoring and removing offending mount hook"
Harald Hoyer 55891e
+            umount "$NEWROOT"
Harald Hoyer 55891e
+            rm -f "$f"
Harald Hoyer 55891e
+        fi
Harald Hoyer 55891e
     done
Harald Hoyer 55891e
 
Harald Hoyer 55891e
     i=$(($i+1))