From d1264eb145c0aa0adc219dfb71fa5d7acc4e26ff Mon Sep 17 00:00:00 2001 From: Thomas Bächler Date: Sun, 10 Apr 2011 21:34:55 +0200 Subject: Fix problems in parsing the kernel command line The kernel command line allows quoted strings with whitespace in them. Until now, such parameters would crash /init and cause a kernel panic. Move parsing into a function and use the 'set' builtin to split /proc/cmdline into arguments. Fixes FS#13900 and FS#22080. --- init | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) (limited to 'init') diff --git a/init b/init index d79dd3d..e230f82 100644 --- a/init +++ b/init @@ -19,8 +19,6 @@ else fi /bin/mount -t tmpfs run /run -o nosuid,noexec,nodev,mode=1777,size=10M -read CMDLINE /proc/sys/kernel/modprobe @@ -28,27 +26,8 @@ echo "/sbin/modprobe" > /proc/sys/kernel/modprobe # set default mount handler mount_handler="default_mount_handler" -for cmd in ${CMDLINE}; do - case "${cmd}" in - \#*) break ;; # ignore everything after a # in the commandline - # The kernel passes those to the kernel on its own - [0123456Ss]) ;; - [0-9]*) ;; - single) ;; - rw) readwrite="yes" ;; - ro) readwrite="no" ;; - # only export stuff that does work with ash :) - *=*) rhs="$(echo "${cmd}" | cut -d= -f2-)" - cmd="$(echo "${cmd}" | cut -d= -f1 | sed 's|\.|_|g')" - cmd="$(echo "${cmd}" | sed 's|-|_|g')=\"${rhs}\"" - (echo "${cmd}" | grep -qe '^[0-9]') || eval "${cmd}" - ;; - *) cmd="$(echo "${cmd}" | sed 's|\.|_|g')" - cmd="$(echo "${cmd}" | sed 's|-|_|g')" - (echo "${cmd}" | grep -qe '^[0-9]') || eval "${cmd}=y" - ;; - esac -done +# parse the kernel command line +parse_cmdline # if available, start udevd at this stage if [ -x /sbin/udevd ]; then -- cgit v1.2.3-24-g4f1b