> Date: Sat, 18 Sep 2021 15:59:32 +0800 > From: Tao Liu <ltao@xxxxxxxxxx> > To: crash-utility@xxxxxxxxxx > Subject: [PATCH v4 4/4] Add check if an syment element > is installed one more time > Message-ID: <20210918075932.132339-5-ltao@xxxxxxxxxx> > Content-Type: text/plain; charset="US-ASCII" > > 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; Here, why don't we call the existing symname_hash_search() and redefine a new syment_is_installed()? Could you please describe more details? Thanks. Lianbo > > index = SYMNAME_HASH_INDEX(spn->name); > -- > 2.29.2 -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/crash-utility