X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=kernel%2Fkallsyms.c;h=74ba3cb21809454167bbfa80b33bbe59171fa86a;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=21387087be8785d30c92dffd9cb8cce06d4dcf3c;hpb=9213980e6a70d8473e0ffd4b39ab5b6caaba9ff5;p=linux-2.6.git diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c index 21387087b..74ba3cb21 100644 --- a/kernel/kallsyms.c +++ b/kernel/kallsyms.c @@ -40,14 +40,14 @@ static inline int is_kernel_text(unsigned long addr) /* Lookup the address for this symbol. Returns 0 if not found. */ unsigned long kallsyms_lookup_name(const char *name) { - char namebuf[128]; + char namebuf[KSYM_NAME_LEN+1]; unsigned long i; char *knames; for (i = 0, knames = kallsyms_names; i < kallsyms_num_syms; i++) { unsigned prefix = *knames++; - strlcpy(namebuf + prefix, knames, 127 - prefix); + strlcpy(namebuf + prefix, knames, KSYM_NAME_LEN - prefix); if (strcmp(namebuf, name) == 0) return kallsyms_addresses[i]; @@ -67,7 +67,7 @@ const char *kallsyms_lookup(unsigned long addr, /* This kernel should never had been booted. */ BUG_ON(!kallsyms_addresses); - namebuf[127] = 0; + namebuf[KSYM_NAME_LEN] = 0; namebuf[0] = 0; if (is_kernel_text(addr) || is_kernel_inittext(addr)) { @@ -84,7 +84,7 @@ const char *kallsyms_lookup(unsigned long addr, /* Grab name */ for (i = 0; i <= best; i++) { unsigned prefix = *name++; - strncpy(namebuf + prefix, name, 127 - prefix); + strncpy(namebuf + prefix, name, KSYM_NAME_LEN - prefix); name += strlen(name) + 1; } @@ -117,34 +117,22 @@ void __print_symbol(const char *fmt, unsigned long address) char *modname; const char *name; unsigned long offset, size; - char namebuf[128]; + char namebuf[KSYM_NAME_LEN+1]; + char buffer[sizeof("%s+%#lx/%#lx [%s]") + KSYM_NAME_LEN + + 2*(BITS_PER_LONG*3/10) + MODULE_NAME_LEN + 1]; name = kallsyms_lookup(address, &size, &offset, &modname, namebuf); - if (!name) { - char addrstr[sizeof("0x%lx") + (BITS_PER_LONG*3/10)]; - - sprintf(addrstr, "0x%lx", address); - printk(fmt, addrstr); - return; - } - - if (modname) { - /* This is pretty small. */ - char buffer[sizeof("%s+%#lx/%#lx [%s]") - + strlen(name) + 2*(BITS_PER_LONG*3/10) - + strlen(modname)]; - - sprintf(buffer, "%s+%#lx/%#lx [%s]", - name, offset, size, modname); - printk(fmt, buffer); - } else { - char buffer[sizeof("%s+%#lx/%#lx") - + strlen(name) + 2*(BITS_PER_LONG*3/10)]; - - sprintf(buffer, "%s+%#lx/%#lx", name, offset, size); - printk(fmt, buffer); + if (!name) + sprintf(buffer, "0x%lx", address); + else { + if (modname) + sprintf(buffer, "%s+%#lx/%#lx [%s]", name, offset, + size, modname); + else + sprintf(buffer, "%s+%#lx/%#lx", name, offset, size); } + printk(fmt, buffer); } /* To avoid O(n^2) iteration, we carry prefix along. */ @@ -155,7 +143,7 @@ struct kallsym_iter unsigned long value; unsigned int nameoff; /* If iterating in core kernel symbols */ char type; - char name[128]; + char name[KSYM_NAME_LEN+1]; }; /* Only label it "global" if it is exported. */ @@ -186,7 +174,8 @@ static unsigned long get_ksymbol_core(struct kallsym_iter *iter) shared with previous name (stem compression). */ stemlen = kallsyms_names[off++]; - strlcpy(iter->name+stemlen, kallsyms_names + off, 128-stemlen); + strlcpy(iter->name+stemlen, kallsyms_names + off, + KSYM_NAME_LEN+1-stemlen); off += strlen(kallsyms_names + off) + 1; iter->owner = NULL; iter->value = kallsyms_addresses[iter->pos]; @@ -320,5 +309,4 @@ int __init kallsyms_init(void) } __initcall(kallsyms_init); -EXPORT_SYMBOL(kallsyms_lookup); EXPORT_SYMBOL(__print_symbol);