Date: Sat, 18 Sep 2021 15:59:32 +0800
From: Tao Liu <ltao(a)redhat.com>
To: crash-utility(a)redhat.com
Subject: [Crash-utility] [PATCH v4 4/4] Add check if an syment element
is installed one more time
Message-ID: <20210918075932.132339-5-ltao(a)redhat.com>
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(a)redhat.com>
---
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