Hi Kazu,
On Thu, Apr 4, 2024 at 4:31 PM HAGIO KAZUHITO(萩尾 一仁) <k-hagio-ab(a)nec.com> wrote:
On 2024/04/03 16:06, Tao Liu wrote:
> 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>
> ---
>
> v1 -> v2: Keep the same code style as other similar iteration/checking cases.
Thank you for the update, applied with some information in the commit
log for someone searches for this issue more easily.
Thanks, that's better! And thanks for the code review and merge!
Thanks,
Tao Liu
https://github.com/crash-utility/crash/commit/ced754d3f8ce796d0d894dbb0f3...
Thanks,
Kazu
>
> ---
> symbols.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/symbols.c b/symbols.c
> index cbc9ed1..b7627a8 100644
> --- a/symbols.c
> +++ b/symbols.c
> @@ -5577,6 +5577,9 @@ value_search_module_6_4(ulong value, ulong *offset)
> continue;
>
> for_each_mod_mem_type(t) {
> + if (!lm->symtable[t])
> + continue;
> +
> sp = lm->symtable[t];
> sp_end = lm->symend[t];
>