initramfs: Effectively disable GPU drivers from kdump kernel

The gitlab issue https://gitlab.freedesktop.org/gpiccoli/kdumpst/-/issues/19
was first reported by Saurabh, regarding GPU drivers getting included on
the kdump initrd. We've managed to improve the code a bit, but the solution
we proposed there was both wrong (for initcpio) *and* incomplete.

The user Ethanell reopened the issue, mentioning that even after the
patch that allegedly fixed the problem, they were getting amdgpu driver
included in the kdump initrd. That was the "wrong" portion of the fix:
in my naivety, I thought we could just remove the modules in the kdump
install hook. But...happens that initcpio works with a lazy approach: some
install hooks execute add_module(), and that signals to the later effective
inclusion of the modules by mkinitcpio; so in other words, the kdump
install hook was deleting no modules at all.

Special thanks to Foxboron and noclaf for the discussion about that on
IRC, which was very enlightening.

Now, the proper approach is simple: just to skip hooks that add the GPU
drivers, like plymouth and kms. Also took the opportunity to include the
microcode hook in the ban list, since we don't want kernel updating CPU
ucode in case of the microcode packages were updated (would be rare, but
why not save a bit of space dropping that?). Finally, I've removed the
GPU drivers delete code from the initcpio kdump install hook, since it
was a nop in the end.

That's it, right? No. Still there's the part two of my statement above:
the prior approach was wrong, but not only, it was also *incomplete*. That
is due to cases like Ethanell's: users that manually include GPU drivers
in their initramfs images, for things like crypto or splash screen. It's
also hard or better saying, *impossible*, to guess all hooks that add GPU
drivers to the initramfs.

So to cover manual inclusions or other hooks, we also add hereby extra
kdump command-line flags to avoid the DRM and some GFX drivers probe
during the kdump kernel boot. In order to not grow the drivers ban list
too much, my attempt was to add common in-tree GPU drivers, but also block
the DRM init call. Hopefully this time this is enough to disable GFX on kdump!

Fixes: 4767b8095f ("initramfs: Fix the removal of GPU drivers from the minimal initrd")
Reported-by: Ethanell (@flifloo)
Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
This commit is contained in:
Guilherme G. Piccoli
2024-08-08 10:17:18 -03:00
parent 585f92b30e
commit 92afdc48d6
3 changed files with 2 additions and 9 deletions

View File

@ -50,7 +50,7 @@ MOUNT_FOLDER="/var/crash/kdumpst"
FULL_COREDUMP=1 FULL_COREDUMP=1
MAKEDUMPFILE_COREDUMP_CMD="-z -d 31" MAKEDUMPFILE_COREDUMP_CMD="-z -d 31"
MAKEDUMPFILE_DMESG_CMD="--dump-dmesg" MAKEDUMPFILE_DMESG_CMD="--dump-dmesg"
KDUMP_APPEND_CMDLINE="panic=-1 oops=panic fsck.mode=force fsck.repair=yes nr_cpus=1 reset_devices" KDUMP_APPEND_CMDLINE="panic=-1 oops=panic fsck.mode=force fsck.repair=yes nr_cpus=1 reset_devices initcall_blacklist=drm_core_init module_blacklist=amdgpu,i915,nouveau"
# #
# #
# GRUB-related settings # GRUB-related settings

View File

@ -8,7 +8,7 @@
create_initramfs_mkinitcpio() { create_initramfs_mkinitcpio() {
rm -f "${MOUNT_FOLDER}/kdump-initrd-$1.img" rm -f "${MOUNT_FOLDER}/kdump-initrd-$1.img"
mkinitcpio -A kdump -g "${MOUNT_FOLDER}/kdump-initrd-$1.img" -k "$1" 1>/dev/null mkinitcpio -A kdump -S microcode,kms,plymouth -g "${MOUNT_FOLDER}/kdump-initrd-$1.img" -k "$1" 1>/dev/null
if [ -s "${MOUNT_FOLDER}/kdump-initrd-$1.img" ]; then if [ -s "${MOUNT_FOLDER}/kdump-initrd-$1.img" ]; then
logger "kdumpst: created initcpio minimal initramfs" logger "kdumpst: created initcpio minimal initramfs"

View File

@ -33,13 +33,6 @@ build() {
BASE_FLD="${MOUNT_FOLDER#*$TGT}" BASE_FLD="${MOUNT_FOLDER#*$TGT}"
echo "${BASE_FLD}" > "${BUILDROOT}"/usr/lib/kdumpst/kdump.dir echo "${BASE_FLD}" > "${BUILDROOT}"/usr/lib/kdumpst/kdump.dir
# Finally, we shouldn't have DRM/GPU drivers and firmwares here,
# but...just in case, let's remove all of that nevertheless.
# Our list includes the most common GFX FW blobs (AMD, i915, Nvidia)
# and all GPU/DRM drivers.
rm -rf "${BUILDROOT}"/usr/lib/firmware/{amdgpu,i915,nvidia,radeon}/
rm -rf "${BUILDROOT}"/usr/lib/modules/*/kernel/drivers/gpu/drm/*
add_runscript add_runscript
} }