[Crash-utility] [PATCH v4 4/4] Add check if an syment element is installed one more time

Tao Liu ltao at redhat.com
Sat Sep 18 07:59:32 UTC 2021


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 at 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;
 
         index = SYMNAME_HASH_INDEX(spn->name);
-- 
2.29.2




More information about the Crash-utility mailing list