86 lines
2.8 KiB
Diff
86 lines
2.8 KiB
Diff
|
From 4d7c18c7c0abf9c2347581d07a8e8be3d3969bd2 Mon Sep 17 00:00:00 2001
|
||
|
From: Harald Hoyer <harald@redhat.com>
|
||
|
Date: Wed, 30 Oct 2013 12:22:52 +0100
|
||
|
Subject: [PATCH] Handle crypto modules with and without modaliases
|
||
|
|
||
|
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 | 14 ++++++++++----
|
||
|
dracut.sh | 5 +++++
|
||
|
modules.d/01fips/fips.sh | 1 -
|
||
|
3 files changed, 15 insertions(+), 5 deletions(-)
|
||
|
|
||
|
diff --git a/dracut-functions.sh b/dracut-functions.sh
|
||
|
index 2e6e845..38095ba 100755
|
||
|
--- a/dracut-functions.sh
|
||
|
+++ b/dracut-functions.sh
|
||
|
@@ -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
|
||
|
diff --git a/dracut.sh b/dracut.sh
|
||
|
index 4613d5b..ae792c4 100755
|
||
|
--- 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
|
||
|
diff --git a/modules.d/01fips/fips.sh b/modules.d/01fips/fips.sh
|
||
|
index f0a4c5c..98dd1c2 100755
|
||
|
--- a/modules.d/01fips/fips.sh
|
||
|
+++ b/modules.d/01fips/fips.sh
|
||
|
@@ -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
|