From 0b440844bdaa8ca85fc6bc2bc9aab38b0aa7ebe9 Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Mon, 7 Mar 2011 13:09:25 +0100 Subject: [PATCH] dracut-functions: fixed instmods() return value The FIPS installkernel() relies on the instmods() return value. So only return 0, if the module and its dependencies were actually installed correctly. --- dracut-functions | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/dracut-functions b/dracut-functions index d8827fc..594cc0e 100755 --- a/dracut-functions +++ b/dracut-functions @@ -667,8 +667,10 @@ check_module_dir() { install_kmod_with_fw() { local modname=${1##*/} fwdir found modname=${modname%.ko*} + # no need to go further if the module is already installed + [[ -e "${initdir}/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" ]] && return 0 inst_simple "$1" "/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" || \ - return 0 # no need to go further if the module is already installed + return $? for fw in $(modinfo -k $kernel -F firmware $1 2>/dev/null); do found='' for fwdir in $fw_dir; do @@ -681,6 +683,7 @@ install_kmod_with_fw() { dinfo "Possible missing firmware \"${fw}\" for kernel module \"${mod}.ko\"" fi done + return 0 } # Do something with all the dependencies of a kernel module. @@ -690,13 +693,16 @@ install_kmod_with_fw() { # $2 = module to get dependencies for # rest of args = arguments to modprobe for_each_kmod_dep() { - local func=$1 kmod=$2 cmd modpapth options + local func=$1 kmod=$2 cmd modpapth options shift 2 - modprobe "$@" --ignore-install --quiet --show-depends $kmod | \ - while read cmd modpath options; do - [[ $cmd = insmod ]] || continue - $func $modpath - done + modprobe "$@" --ignore-install --show-depends $kmod 2>/dev/null | ( \ + local found=0; + while read cmd modpath options; do + [[ $cmd = insmod ]] || continue + $func ${modpath} || exit $? + found=1 + done; [[ $found -eq 0 ]] && exit 1; exit 0;) + return $? } # filter kernel modules to install certain modules that meet specific @@ -727,6 +733,7 @@ filter_kernel_modules () ( instmods() { [[ $no_kernel = yes ]] && return local mod mpargs modpath modname cmd moddirname + local ret=0 while (($# > 0)); do mod=${1%.ko*} case $mod in @@ -761,13 +768,15 @@ instmods() { # old version of modprobe which doesn't have '-d' option. moddirname=${srcmods%%/lib/modules/*} [[ -n ${moddirname} ]] && moddirname="-d ${moddirname}/" - + # ok, load the module, all its dependencies, and any firmware # it may require for_each_kmod_dep install_kmod_with_fw $mod \ --set-version $kernel ${moddirname} + ret=$((ret+$?)) ;; - esac - shift + esac + shift done + return $ret } -- 2.7.4