|
|
90b079 |
From 662592c46a4561d517e2fa45e917e17824b658c9 Mon Sep 17 00:00:00 2001
|
|
|
90b079 |
From: Harald Hoyer <harald@redhat.com>
|
|
|
90b079 |
Date: Wed, 30 Oct 2013 12:22:52 +0100
|
|
|
90b079 |
Subject: [PATCH] Handle crypto modules with and without modaliases
|
|
|
90b079 |
|
|
|
90b079 |
If new kernels have modules split out, handle the case, where modules
|
|
|
90b079 |
have to modalias and just install them.
|
|
|
90b079 |
|
|
|
90b079 |
Also add the crypto drivers and names to host_modalias.
|
|
|
90b079 |
---
|
|
|
90b079 |
dracut-functions.sh | 14 ++++++++++----
|
|
|
90b079 |
dracut.sh | 5 +++++
|
|
|
90b079 |
modules.d/01fips/fips.sh | 1 -
|
|
|
90b079 |
3 files changed, 15 insertions(+), 5 deletions(-)
|
|
|
90b079 |
|
|
|
90b079 |
diff --git a/dracut-functions.sh b/dracut-functions.sh
|
|
|
90b079 |
index 2e6e845..38095ba 100755
|
|
|
90b079 |
--- a/dracut-functions.sh
|
|
|
90b079 |
+++ b/dracut-functions.sh
|
|
|
90b079 |
@@ -1480,7 +1480,7 @@ dracut_kernel_post() {
|
|
|
90b079 |
|
|
|
90b079 |
module_is_host_only() {
|
|
|
90b079 |
local _mod=$1
|
|
|
90b079 |
- local _modenc a i
|
|
|
90b079 |
+ local _modenc a i _k _s _v _aliases
|
|
|
90b079 |
_mod=${_mod##*/}
|
|
|
90b079 |
_mod=${_mod%.ko}
|
|
|
90b079 |
_modenc=${_mod//-/_}
|
|
|
90b079 |
@@ -1497,19 +1497,25 @@ module_is_host_only() {
|
|
|
90b079 |
# this covers the case, where a new module is introduced
|
|
|
90b079 |
# or a module was renamed
|
|
|
90b079 |
# or a module changed from builtin to a module
|
|
|
90b079 |
+
|
|
|
90b079 |
if [[ -d /lib/modules/$kernel_current ]]; then
|
|
|
90b079 |
# if the modinfo can be parsed, but the module
|
|
|
90b079 |
# is not loaded, then we can safely return 1
|
|
|
90b079 |
modinfo -F filename "$_mod" &>/dev/null && return 1
|
|
|
90b079 |
fi
|
|
|
90b079 |
|
|
|
90b079 |
- # Finally check all modalias, if we install for a kernel
|
|
|
90b079 |
- # different from the current one
|
|
|
90b079 |
- for a in $(modinfo -k $kernel -F alias $_mod 2>/dev/null); do
|
|
|
90b079 |
+ _aliases=$(modinfo -k $kernel -F alias $_mod 2>/dev/null)
|
|
|
90b079 |
+
|
|
|
90b079 |
+ # if the module has no aliases, install it
|
|
|
90b079 |
+ [[ $_aliases ]] || return 0
|
|
|
90b079 |
+
|
|
|
90b079 |
+ # finally check all modalias
|
|
|
90b079 |
+ for a in $_aliases; do
|
|
|
90b079 |
for i in "${!host_modalias[@]}"; do
|
|
|
90b079 |
[[ $i == $a ]] && return 0
|
|
|
90b079 |
done
|
|
|
90b079 |
done
|
|
|
90b079 |
+
|
|
|
90b079 |
fi
|
|
|
90b079 |
|
|
|
90b079 |
return 1
|
|
|
90b079 |
diff --git a/dracut.sh b/dracut.sh
|
|
|
90b079 |
index 173a259..c6a388a 100755
|
|
|
90b079 |
--- a/dracut.sh
|
|
|
90b079 |
+++ b/dracut.sh
|
|
|
90b079 |
@@ -968,6 +968,11 @@ if [[ $hostonly ]]; then
|
|
|
90b079 |
|
|
|
90b079 |
rm -f -- "$initdir/.modalias"
|
|
|
90b079 |
|
|
|
90b079 |
+ while read _k _s _v; do
|
|
|
90b079 |
+ [ "$_k" != "name" -a "$_k" != "driver" ] && continue
|
|
|
90b079 |
+ host_modalias["$_v"]=1
|
|
|
90b079 |
+ done
|
|
|
90b079 |
+
|
|
|
90b079 |
# check /proc/modules
|
|
|
90b079 |
declare -A host_modules
|
|
|
90b079 |
while read m rest; do
|
|
|
90b079 |
diff --git a/modules.d/01fips/fips.sh b/modules.d/01fips/fips.sh
|
|
|
90b079 |
index f0a4c5c..98dd1c2 100755
|
|
|
90b079 |
--- a/modules.d/01fips/fips.sh
|
|
|
90b079 |
+++ b/modules.d/01fips/fips.sh
|
|
|
90b079 |
@@ -96,7 +96,6 @@ do_fips()
|
|
|
90b079 |
_found=0
|
|
|
90b079 |
while read _k _s _v; do
|
|
|
90b079 |
[ "$_k" != "name" -a "$_k" != "driver" ] && continue
|
|
|
90b079 |
- [ "$_k" = "driver" ] && _v=$(str_replace "$_v" "_" "-")
|
|
|
90b079 |
[ "$_v" != "$_module" ] && continue
|
|
|
90b079 |
_found=1
|
|
|
90b079 |
break
|