symname_hash_install won't check if spn has been installed before. If it does, the second install will corrupt the hash table as well as spn->cnt counting. This patch adds the check to avoid such risks. Signed-off-by: Tao Liu <ltao@xxxxxxxxxx> --- symbols.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/symbols.c b/symbols.c index f7157b1..6d12c55 100644 --- a/symbols.c +++ b/symbols.c @@ -1147,6 +1147,20 @@ mod_symtable_hash_remove_range(struct syment *from, struct syment *to) symname_hash_remove(st->mod_symname_hash, sp); } +static inline int +syment_is_installed(struct syment *table[], struct syment *spn) +{ + struct syment *sp; + int index; + + index = SYMNAME_HASH_INDEX(spn->name); + for (sp = table[index]; sp; sp = sp->name_hash_next) { + if (sp == spn) + return TRUE; + } + return FALSE; +} + /* * Install a single static kernel symbol into the symname_hash. */ @@ -1156,7 +1170,7 @@ symname_hash_install(struct syment *table[], struct syment *spn) struct syment *sp; int index; - if (!spn) + if (!spn || syment_is_installed(table, spn)) return; index = SYMNAME_HASH_INDEX(spn->name); -- 2.29.2 -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/crash-utility