mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 03:24:45 +01:00
When a symbol that is already registered is read again from *.symref
file, __add_symbol() removes the previous one from the hash table without
freeing it.
[Test Case]
$ cat foo.c
#include <linux/export.h>
void foo(void);
void foo(void) {}
EXPORT_SYMBOL(foo);
$ cat foo.symref
foo void foo ( void )
foo void foo ( void )
When a symbol is removed from the hash table, it must be freed along
with its ->name and ->defn members. However, sym->name cannot be freed
because it is sometimes shared with node->string, but not always. If
sym->name and node->string share the same memory, free(sym->name) could
lead to a double-free bug.
To resolve this issue, always assign a strdup'ed string to sym->name.
Fixes:
|
||
|---|---|---|
| .. | ||
| .gitignore | ||
| genksyms.c | ||
| genksyms.h | ||
| keywords.c | ||
| lex.l | ||
| Makefile | ||
| parse.y | ||