From 064be81716a4eabb76c232748503d1d6316e2ee4 Mon Sep 17 00:00:00 2001 From: Pavel Valena Date: Thu, 4 Jan 2024 02:16:43 +0100 Subject: [PATCH] dracut-057-53.git20240104 Also fixup resolves (adding RHEL-3630 bellow), as the correct issue was not added in the corresponding commit message (e413d9d60f578cdeef0d831c9e76e5a427e57ed9). Resolves: RHEL-15821,RHEL-3630 --- 0052.patch | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++ dracut.spec | 6 ++++- 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 0052.patch diff --git a/0052.patch b/0052.patch new file mode 100644 index 0000000..9e33fce --- /dev/null +++ b/0052.patch @@ -0,0 +1,77 @@ +From 4c46806a793d66a188c4e9b40e74f6c371ac5b8a Mon Sep 17 00:00:00 2001 +From: runsisi +Date: Sat, 6 Aug 2022 10:15:48 +0800 +Subject: [PATCH] fix(dracut-install): use stripped kernel module path as hash + key + +in install_dependent_modules we use &path[kerneldirlen] as the key for inserting, +let's do the same for checking. + +otherwise installing kernel module has circular dependency from a custom kernel +module directory will cause infinite recursion and segfault. + +$ grep ipmi kbuilt/lib/modules/5.10.121/modules.dep +kernel/drivers/char/ipmi/ipmi_msghandler.ko: +kernel/drivers/char/ipmi/ipmi_devintf.ko: kernel/drivers/char/ipmi/ipmi_msghandler.ko + +$ grep ipmi kbuilt/lib/modules/5.10.121/modules.softdep +softdep ipmi_msghandler post: ipmi_devintf + +$ ./dracut-install -D /tmp --kerneldir ~/working/kernel/linux-5.10.121/kbuilt/lib/modules/5.10.121 -m ipmi-devintf +Segmentation fault (core dumped) + +(gdb) b install_dependent_modules +Breakpoint 1 at 0x7db0: file src/install/dracut-install.c, line 1513. +(gdb) bt + #0 install_dependent_modules (modlist=0x0) at src/install/dracut-install.c:1513 + #1 0x000055555555c027 in install_dependent_modules (modlist=modlist@entry=0x555555579e90) at src/install/dracut-install.c:1553 + #2 0x000055555555bf1c in install_dependent_modules (modlist=0x5555555799d0) at src/install/dracut-install.c:1548 + #3 0x000055555555c034 in install_dependent_modules (modlist=modlist@entry=0x55555557a3f0) at src/install/dracut-install.c:1554 + #4 0x000055555555bf1c in install_dependent_modules (modlist=0x555555579d60) at src/install/dracut-install.c:1548 + #5 0x000055555555c034 in install_dependent_modules (modlist=modlist@entry=0x55555557b170) at src/install/dracut-install.c:1554 + #6 0x000055555555bf1c in install_dependent_modules (modlist=0x55555557a0f0) at src/install/dracut-install.c:1548 + #7 0x000055555555c034 in install_dependent_modules (modlist=modlist@entry=0x555555575320) at src/install/dracut-install.c:1554 + #8 0x000055555555bf1c in install_dependent_modules (modlist=0x55555557ab30) at src/install/dracut-install.c:1548 + #9 0x000055555555c034 in install_dependent_modules (modlist=modlist@entry=0x55555557dd60) at src/install/dracut-install.c:1554 + #10 0x000055555555bf1c in install_dependent_modules (modlist=0x55555557b640) at src/install/dracut-install.c:1548 + #11 0x000055555555c034 in install_dependent_modules (modlist=modlist@entry=0x55555557e0f0) at src/install/dracut-install.c:1554 + #12 0x000055555555bf1c in install_dependent_modules (modlist=0x55555557b9d0) at src/install/dracut-install.c:1548 + #13 0x000055555555c034 in install_dependent_modules (modlist=modlist@entry=0x555555574340) at src/install/dracut-install.c:1554 + #14 0x000055555555bf1c in install_dependent_modules (modlist=0x55555557cf70) at src/install/dracut-install.c:1548 + #15 0x000055555555c034 in install_dependent_modules (modlist=modlist@entry=0x5555555768d0) at src/install/dracut-install.c:1554 + #16 0x000055555555bf1c in install_dependent_modules (modlist=0x55555557d750) at src/install/dracut-install.c:1548 + #17 0x000055555555c034 in install_dependent_modules (modlist=modlist@entry=0x55555557e700) at src/install/dracut-install.c:1554 + #18 0x000055555555bf1c in install_dependent_modules (modlist=0x55555557de90) at src/install/dracut-install.c:1548 + #19 0x000055555555c034 in install_dependent_modules (modlist=modlist@entry=0x555555581c90) at src/install/dracut-install.c:1554 + #20 0x000055555555bf1c in install_dependent_modules (modlist=0x555555571e60) at src/install/dracut-install.c:1548 + #21 0x000055555555c034 in install_dependent_modules (modlist=modlist@entry=0x55555556b620) at src/install/dracut-install.c:1554 + #22 0x000055555555bf1c in install_dependent_modules (modlist=0x555555583000) at src/install/dracut-install.c:1548 + #23 0x000055555555c034 in install_dependent_modules (modlist=modlist@entry=0x55555556b640) at src/install/dracut-install.c:1554 + #24 0x000055555555bf1c in install_dependent_modules (modlist=0x555555571b40) at src/install/dracut-install.c:1548 + #25 0x000055555555c034 in install_dependent_modules (modlist=modlist@entry=0x555555574100) at src/install/dracut-install.c:1554 + #26 0x000055555555c4b0 in install_module (mod=mod@entry=0x555555573bc0) at src/install/dracut-install.c:1617 + #27 0x000055555555c93d in install_modules (argc=argc@entry=1, argv=argv@entry=0x7fffffffd6e0) at src/install/dracut-install.c:1952 + #28 0x000055555555862a in main (argc=, argv=0x7fffffffd6a8) at src/install/dracut-install.c:2090 + +Signed-off-by: runsisi + +(Cherry-picked commit: 7bb1f64b972586d86d82fcb23de4b979eab0ddfe) + +Resolves: RHEL-15821 +--- + src/install/dracut-install.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/install/dracut-install.c b/src/install/dracut-install.c +index 6025bd67..997d62d3 100644 +--- a/src/install/dracut-install.c ++++ b/src/install/dracut-install.c +@@ -1522,7 +1522,7 @@ static int install_dependent_modules(struct kmod_list *modlist) + if (check_hashmap(items_failed, path)) + return -1; + +- if (check_hashmap(items, path)) { ++ if (check_hashmap(items, &path[kerneldirlen])) { + continue; + } + diff --git a/dracut.spec b/dracut.spec index dff886f..6253355 100644 --- a/dracut.spec +++ b/dracut.spec @@ -5,7 +5,7 @@ # strip the automatically generated dep here and instead co-own the # directory. %global __requires_exclude pkg-config -%define dist_free_release 52.git20231207 +%define dist_free_release 53.git20240104 Name: dracut Version: 057 @@ -80,6 +80,7 @@ Patch48: 0048.patch Patch49: 0049.patch Patch50: 0050.patch Patch51: 0051.patch +Patch52: 0052.patch Source1: https://www.gnu.org/licenses/lgpl-2.1.txt @@ -531,6 +532,9 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/ %{_prefix}/lib/kernel/install.d/51-dracut-rescue.install %changelog +* Thu Jan 04 2024 Pavel Valena - 057-53.git20240104 +- fix(dracut-install): use stripped kernel module path as hash + * Thu Dec 07 2023 Pavel Valena - 057-52.git20231207 - fix(dracut.sh): remove microcode check based on