Patch "module: wrapper for symbol name." has been added to the 3.10-stable tree
This is a note to let you know that I've just added the patch titled
module: wrapper for symbol name.
to the 3.10-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
module-wrapper-for-symbol-name.patch
and it can be found in the queue-3.10 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
2e7bac536106236104e9e339531ff0fcdb7b8147Mon Sep 17 00:00:00 2001
From: Rusty Russell <[email protected]>
Date: Wed, 3 Feb 2016 16:55:26 +1030
Subject: module: wrapper for symbol name.
From: Rusty Russell <[email protected]>
commit 2e7bac536106236104e9e339531ff0fcdb7b8147 upstream.
This trivial wrapper adds clarity and makes the following patch smaller.
--- kernel/module.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-)
kernel/module.c +15 -11
@@ -3398,6 +3398,11 @@ static inline int is_arm_mapping_symbol( && (str[2 ] =='\0' || str[2 ] =='.' ); } +static const char *symname (struct module *mod,unsigned int symnum) +{ +return mod->strtab + mod->symtab[symnum].st_name; +} + static const char *get_ksymbol(struct module *mod, unsigned long addr, unsigned long *size,
@@ -3420,15 +3425,15 @@ static const char *get_ksymbol(struct mo/* We ignore unnamed symbols: they're uninformative * and inserted at a whim. */ +if (*symname (mod, i) =='\0' + ||is_arm_mapping_symbol (symname (mod, i))) +continue ; +if (mod->symtab[i].st_value <= addr - && mod->symtab[i].st_value > mod->symtab[best].st_value - && *(mod->strtab + mod->symtab[i].st_name) !='\0' - && !is_arm_mapping_symbol (mod->strtab + mod->symtab[i].st_name)) + && mod->symtab[i].st_value > mod->symtab[best].st_value) best = i;if (mod->symtab[i].st_value > addr - && mod->symtab[i].st_value < nextval - && *(mod->strtab + mod->symtab[i].st_name) !='\0' - && !is_arm_mapping_symbol (mod->strtab + mod->symtab[i].st_name)) + && mod->symtab[i].st_value < nextval) nextval = mod->symtab[i].st_value; }
@@ -3439,7 +3444,7 @@ static const char *get_ksymbol(struct mo *size = nextval - mod->symtab[best].st_value;if (offset) *offset = addr - mod->symtab[best].st_value; -return mod->strtab + mod->symtab[best].st_name; +return symname (mod, best); }/* For kallsyms to ask for address resolution. NULL means not found. Careful
@@ -3540,8 +3545,7 @@ int module_get_kallsym(unsigned int symnif (symnum < mod->num_symtab) { *value = mod->symtab[symnum].st_value; *type = mod->symtab[symnum].st_info; -strlcpy (name, mod->strtab + mod->symtab[symnum].st_name, -KSYM_NAME_LEN ); +strlcpy (name,symname (mod, symnum),KSYM_NAME_LEN );strlcpy (module_name, mod->name,MODULE_NAME_LEN ); *exported =is_exported (name, *value, mod);preempt_enable ();
@@ -3558,7 +3562,7 @@ static unsigned long mod_find_symname(stunsigned int i;for (i =0 ; i < mod->num_symtab; i++) -if (strcmp (name, mod->strtab+mod->symtab[i].st_name) ==0 && +if (strcmp (name,symname (mod, i)) ==0 && mod->symtab[i].st_info !='U' )return mod->symtab[i].st_value;return 0 ;
@@ -3602,7 +3606,7 @@ int module_kallsyms_on_each_symbol(int (if (mod->state ==MODULE_STATE_UNFORMED )continue ;for (i =0 ; i < mod->num_symtab; i++) { - ret =fn (data, mod->strtab + mod->symtab[i].st_name, + ret =fn (data,symname (mod, i), mod, mod->symtab[i].st_value);if (ret !=0 )return ret;
Patches currently in stable-queue which might be from [email protected] are
queue-3.10/module-wrapper-for-symbol-name.patch