Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12:Update
dracut.1458
0058-dracut-add-warning-when-including-unsuppor...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0058-dracut-add-warning-when-including-unsupported-module.patch of Package dracut.1458
From 5473e4b5d8d9bbf9bd995dff815647de0ed1b30b Mon Sep 17 00:00:00 2001 From: Jeff Mahoney <jeffm@suse.com> Date: Thu, 12 Jun 2014 09:30:01 +0200 Subject: dracut: add warning when including unsupported modules With self-built kernels (often used for debugging by both internal and external development), it's a common mistake to not set up Module.supported properly. As a result, modules can end up without the supported tag. "make install" will happily build an initramfs, via dracut, that will not boot due to the kernel refusing to load the unsupported modules. This patch adds a --check-supported option to check whether all modules added to the initramfs are marked supported and warn if they are not. It will not cause the initramfs creation to fail. The option is intended to be called via /sbin/installkernel, which will check to see if the kernel has CONFIG_SUSE_KERNEL_SUPPORTED before using the option. Signed-off-by: Jeff Mahoney <jeffm@suse.com> --- dracut-functions.sh | 21 +++++++++++++++++++++ dracut.8.asc | 11 +++++++++++ dracut.sh | 5 +++++ 3 files changed, 37 insertions(+) diff --git a/dracut-functions.sh b/dracut-functions.sh index 5b3b1fb..1e0779a 100755 --- a/dracut-functions.sh +++ b/dracut-functions.sh @@ -1400,6 +1400,17 @@ for_each_module_dir() { done } +check_supported_kmod() { + kmod=$1 + supported=$(modinfo -k $kernel -F supported $kmod 2>/dev/null) + case "$supported" in + yes|external) ;; + *) dwarn "Module \"$(basename $kmod)\" is unsupported. This may cause" \ + "problems while booting." ;; + esac +} + + # Install a single kernel module along with any firmware it may require. # $1 = full path to kernel module to install install_kmod_with_fw() { @@ -1462,6 +1473,10 @@ install_kmod_with_fw() { fi fi done + + if [[ "$check_supported" = "yes" ]]; then + check_supported_kmod $1 + fi return 0 } @@ -1508,6 +1523,12 @@ dracut_kernel_post() { inst_simple "$_modpath" "/lib/modules/$kernel/${_destpath}" || exit $? done < "$DRACUT_KERNEL_LAZY_HASHDIR/lazylist.dep" fi + + if [[ $check_supported ]]; then + while read _modpath; do + check_supported_kmod $_modpath + done < "$DRACUT_KERNEL_LAZY_HASHDIR/lazylist.dep" + fi ) & _pid=$(jobs -p | while read a ; do printf ":$a";done) _pid=${_pid##*:} diff --git a/dracut.8.asc b/dracut.8.asc index 5ff0e82..39cbb98 100644 --- a/dracut.8.asc +++ b/dracut.8.asc @@ -456,6 +456,17 @@ will not be able to boot. Regenerate all initramfs images at the default location with the kernel versions found on the system. Additional parameters are passed through. +**--check-supported**:: + The kernel may be configured to check whether a module is + supported by the vendor before allowing it to be loaded. On these + systems, it's possible to generate an initramfs image that will + fail to boot due to unsupported modules being refused. This + option enables a check that will issue a warning if a module built + without the support option enabled is encountered while building + the image. Use of this option assumes that the kernel requires + supported modules and will issue a warning on every module if used + otherwise. + FILES ----- _/var/log/dracut.log_:: diff --git a/dracut.sh b/dracut.sh index 79a6840..a58e134 100755 --- a/dracut.sh +++ b/dracut.sh @@ -193,6 +193,9 @@ Creates initial ramdisk images for preloading modules --printsize Print out the module install size --sshkey [SSHKEY] Add ssh key to initramfs (use with ssh-client module) --logfile [FILE] Logfile to use (overrides configuration setting) + --check-supported Check to ensure that modules are marked supported when + using a kernel that is configured to check the + support status of a module before loading. If [LIST] has multiple arguments, then you have to put these in quotes. @@ -374,6 +377,7 @@ rearrange_params() --long noimageifnotneeded \ --long early-microcode \ --long no-early-microcode \ + --long check-supported \ -- "$@") if (( $? != 0 )); then @@ -557,6 +561,7 @@ while :; do --printsize) printsize="yes";; --regenerate-all) regenerate_all="yes";; --noimageifnotneeded) noimageifnotneeded="yes";; + --check-supported) check_supported="yes" ;; --) shift; break;; -- 1.8.4.5
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor