]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
Handle crypto modules with and without modaliases
authorHarald Hoyer <harald@redhat.com>
Wed, 30 Oct 2013 11:22:52 +0000 (12:22 +0100)
committerHarald Hoyer <harald@redhat.com>
Wed, 30 Oct 2013 11:24:37 +0000 (12:24 +0100)
If new kernels have modules split out, handle the case, where modules
have to modalias and just install them.

Also add the crypto drivers and names to host_modalias.

dracut-functions.sh
dracut.sh
modules.d/01fips/fips.sh

index 2e6e8456feca427da4d6a0e59525e29e06ef29ab..38095ba42ab78e4323a4ac3bd840e43951b3b3fa 100755 (executable)
@@ -1480,7 +1480,7 @@ dracut_kernel_post() {
 
 module_is_host_only() {
     local _mod=$1
-    local _modenc a i
+    local _modenc a i _k _s _v _aliases
     _mod=${_mod##*/}
     _mod=${_mod%.ko}
     _modenc=${_mod//-/_}
@@ -1497,19 +1497,25 @@ module_is_host_only() {
         # this covers the case, where a new module is introduced
         # or a module was renamed
         # or a module changed from builtin to a module
+
         if [[ -d /lib/modules/$kernel_current ]]; then
             # if the modinfo can be parsed, but the module
             # is not loaded, then we can safely return 1
             modinfo -F filename "$_mod" &>/dev/null && return 1
         fi
 
-        # Finally check all modalias, if we install for a kernel
-        # different from the current one
-        for a in $(modinfo -k $kernel -F alias $_mod 2>/dev/null); do
+        _aliases=$(modinfo -k $kernel -F alias $_mod 2>/dev/null)
+
+        # if the module has no aliases, install it
+        [[ $_aliases ]] || return 0
+
+        # finally check all modalias
+        for a in $_aliases; do
             for i in "${!host_modalias[@]}"; do
                 [[ $i == $a ]]  && return 0
             done
         done
+
     fi
 
     return 1
index 4613d5b6a8b99ebaf6aaf029985694061ab6cdec..ae792c47a48fe71946583db0f20e7f666e184172 100755 (executable)
--- a/dracut.sh
+++ b/dracut.sh
@@ -968,6 +968,11 @@ if [[ $hostonly ]]; then
 
     rm -f -- "$initdir/.modalias"
 
+    while read _k _s _v; do
+        [ "$_k" != "name" -a "$_k" != "driver" ] && continue
+        host_modalias["$_v"]=1
+    done </proc/crypto
+
     # check /proc/modules
     declare -A host_modules
     while read m rest; do
index f0a4c5c2636e67ff5d326c7af4e64e0ed507c8bd..98dd1c2fef742450d49a35584c3dc6f0da3f8da9 100755 (executable)
@@ -96,7 +96,6 @@ do_fips()
                 _found=0
                 while read _k _s _v; do
                     [ "$_k" != "name" -a "$_k" != "driver" ] && continue
-                    [ "$_k" = "driver" ] && _v=$(str_replace "$_v" "_" "-")
                     [ "$_v" != "$_module" ] && continue
                     _found=1
                     break