[PATCH 1/1] switch_root: When console doesn't exist don't bail out
Andrei Gherzan
andrei at gherzan.com
Thu Mar 23 23:44:28 UTC 2017
Busybox is very often used in initramfs at the end of which usually
there is a switch_root to the actual rootfs. There are many cases where
the console kernel argument is either just a placeholder (for example
RaspberryPi uses serial0 and serial1) or configured as null to avoid any
console messages - usually you would see such of a setup in production
environments.
Currently busybox bails out if can't open the console argument. If this
happenes in initramfs and if the console=null for example, you get in a
blind kernel panic. Avoid this by checking if the console exists and if
not warn and continue.
Signed-off-by: Andrei Gherzan <andrei at gherzan.com>
---
util-linux/switch_root.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/util-linux/switch_root.c b/util-linux/switch_root.c
index 6034485d7..a39ec0ba7 100644
--- a/util-linux/switch_root.c
+++ b/util-linux/switch_root.c
@@ -39,6 +39,7 @@
#include <sys/vfs.h>
#include <sys/mount.h>
+#include <unistd.h>
#include "libbb.h"
// Make up for header deficiencies
#ifndef RAMFS_MAGIC
@@ -140,12 +141,14 @@ int switch_root_main(int argc UNUSED_PARAM, char **argv)
/*xchdir("/"); - done in xchroot */
// If a new console specified, redirect stdin/stdout/stderr to it
- if (console) {
- close(0);
- xopen(console, O_RDWR);
- xdup2(0, 1);
- xdup2(0, 2);
- }
+ if (console)
+ if (access(console, F_OK)) {
+ close(0);
+ xopen(console, O_RDWR);
+ xdup2(0, 1);
+ xdup2(0, 2);
+ } else
+ bb_error_msg("specified console doesn't exist, ignoring");
// Exec real init
execv(argv[0], argv);
--
2.12.0
More information about the busybox
mailing list