diff options
Diffstat (limited to 'kernel/module.c')
| -rw-r--r-- | kernel/module.c | 17 | 
1 files changed, 15 insertions, 2 deletions
diff --git a/kernel/module.c b/kernel/module.c index 9ee93421269c..3ee507c0a92f 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -2481,7 +2481,8 @@ static char *next_string(char *string, unsigned long *secsize)  	return string;  } -static char *get_modinfo(struct load_info *info, const char *tag) +static char *get_next_modinfo(const struct load_info *info, const char *tag, +			      char *prev)  {  	char *p;  	unsigned int taglen = strlen(tag); @@ -2492,13 +2493,25 @@ static char *get_modinfo(struct load_info *info, const char *tag)  	 * get_modinfo() calls made before rewrite_section_headers()  	 * must use sh_offset, as sh_addr isn't set!  	 */ -	for (p = (char *)info->hdr + infosec->sh_offset; p; p = next_string(p, &size)) { +	char *modinfo = (char *)info->hdr + infosec->sh_offset; + +	if (prev) { +		size -= prev - modinfo; +		modinfo = next_string(prev, &size); +	} + +	for (p = modinfo; p; p = next_string(p, &size)) {  		if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=')  			return p + taglen + 1;  	}  	return NULL;  } +static char *get_modinfo(const struct load_info *info, const char *tag) +{ +	return get_next_modinfo(info, tag, NULL); +} +  static void setup_modinfo(struct module *mod, struct load_info *info)  {  	struct module_attribute *attr;  | 
