Hi Naveen,
On Tue, Apr 2, 2024 at 3:17 PM Naveen Chaudhary
<naveenchaudhary2010(a)hotmail.com> wrote:
Thanks Tao,
On a funny side, though I didn't understand this area of code much, but I ironically
made the exact same fix to avoid problem for time being on my side, thinking there might
be a different fix coming 🙂. Glad its now taken care. Thanks 🙂
IMHO this is the right fix. If you look through the crash code, there
are plenty of cases like:
for_each_mod_mem_type(t) {
if (!lm->symtable[t])
continue;
So it shouldn't be an exception here. Just my opinion, let's see how
other people think of it. If you want to know more about the
background, you can check the patchset 7750e61fdb2a ("Support module
memory layout change on Linux 6.4"), which will give you more info.
In addition, please feel free to post your code, even if you are not
very confident of it. The mailing list is open for discussion :)
Thanks,
Tao Liu
Regards,
Naveen
________________________________
From: Tao Liu <ltao(a)redhat.com>
Sent: Tuesday, April 2, 2024 12:15 PM
To: devel(a)lists.crash-utility.osci.io <devel(a)lists.crash-utility.osci.io>
Cc: Tao Liu <ltao(a)redhat.com>; Naveen Chaudhary
<naveenchaudhary2010(a)hotmail.com>
Subject: [Crash-Utility][PATCH] symbols.c: skip non-exist module memory type
Not all mod_mem_type will be included for kernel modules. E.g. in the
following module case:
(gdb) p lm->symtable[0]
$1 = (struct syment *) 0x4dcbad0
(gdb) p lm->symtable[1]
$2 = (struct syment *) 0x4dcbb70
(gdb) p lm->symtable[2]
$3 = (struct syment *) 0x4dcbc10
(gdb) p lm->symtable[3]
$4 = (struct syment *) 0x0
(gdb) p lm->symtable[4]
$5 = (struct syment *) 0x4dcbcb0
(gdb) p lm->symtable[5]
$6 = (struct syment *) 0x4dcbd00
(gdb) p lm->symtable[6]
$7 = (struct syment *) 0x0
(gdb) p lm->symtable[7]
$8 = (struct syment *) 0x4dcbb48
mod_mem MOD_RO_AFTER_INIT(3) and MOD_INIT_RODATA(6) is not exist, which should
be skipped, otherwise a segfault will happen.
Fixes: 7750e61fdb2a ("Support module memory layout change on Linux 6.4")
Signed-off-by: Tao Liu <ltao(a)redhat.com>
Reported-by: Naveen Chaudhary <naveenchaudhary2010(a)hotmail.com>
---
symbols.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/symbols.c b/symbols.c
index cbc9ed1..27e55c6 100644
--- a/symbols.c
+++ b/symbols.c
@@ -5580,7 +5580,7 @@ value_search_module_6_4(ulong value, ulong *offset)
sp = lm->symtable[t];
sp_end = lm->symend[t];
- if (value < sp->value || value > sp_end->value)
+ if (!sp || value < sp->value || value >
sp_end->value)
continue;
splast = NULL;
--
2.40.1