@@ -118,7 +118,7 @@ static void do_show_stack(struct task_struct *task, unsigned long *fp,
for (i = 0; i < kstack_depth_to_print; i++) {
- name = kallsyms_lookup(ip, &size, &offset, &modname, tmpstr);
+ name = kallsyms_lookup(ip, &size, &offset, &modname, tmpstr, KSYM_NAME_LEN);
printk("%s[%p] 0x%lx: %s + 0x%lx", loglvl, fp, ip, name, offset);
if (((unsigned long) fp < low) || (high < (unsigned long) fp))
@@ -1710,7 +1710,7 @@ static void get_function_bounds(unsigned long pc, unsigned long *startp,
if (setjmp(bus_error_jmp) == 0) {
catch_memory_errors = 1;
sync();
- name = kallsyms_lookup(pc, &size, &offset, NULL, tmpstr);
+ name = kallsyms_lookup(pc, &size, &offset, NULL, tmpstr, KSYM_NAME_LEN);
if (name != NULL) {
*startp = pc - offset;
*endp = pc - offset + size;
@@ -3730,7 +3730,7 @@ static void xmon_print_symbol(unsigned long address, const char *mid,
catch_memory_errors = 1;
sync();
name = kallsyms_lookup(address, &size, &offset, &modname,
- tmpstr);
+ tmpstr, KSYM_NAME_LEN);
sync();
/* wait a little while to see if we get a machine check */
__delay(200);
@@ -392,7 +392,7 @@ static int proc_pid_wchan(struct seq_file *m, struct pid_namespace *ns,
goto print0;
wchan = get_wchan(task);
- if (wchan && !lookup_symbol_name(wchan, symname)) {
+ if (wchan && !lookup_symbol_name(wchan, symname, KSYM_NAME_LEN)) {
seq_puts(m, symname);
return 0;
}
@@ -81,7 +81,7 @@ extern int kallsyms_lookup_size_offset(unsigned long addr,
const char *kallsyms_lookup(unsigned long addr,
unsigned long *symbolsize,
unsigned long *offset,
- char **modname, char *namebuf);
+ char **modname, char *namebuf, size_t size);
/* Look up a kernel symbol and return it in a text buffer. */
extern int sprint_symbol(char *buffer, size_t size, unsigned long address);
@@ -90,7 +90,7 @@ extern int sprint_symbol_no_offset(char *buffer, size_t size, unsigned long addr
extern int sprint_backtrace(char *buffer, size_t size, unsigned long address);
extern int sprint_backtrace_build_id(char *buffer, size_t size, unsigned long address);
-int lookup_symbol_name(unsigned long addr, char *symname);
+int lookup_symbol_name(unsigned long addr, char *symname, size_t size);
int lookup_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name);
/* How and when do we show kallsyms values? */
@@ -113,7 +113,7 @@ static inline int kallsyms_lookup_size_offset(unsigned long addr,
static inline const char *kallsyms_lookup(unsigned long addr,
unsigned long *symbolsize,
unsigned long *offset,
- char **modname, char *namebuf)
+ char **modname, char *namebuf, size_t size)
{
return NULL;
}
@@ -148,7 +148,7 @@ static inline int sprint_backtrace_build_id(char *buffer, size_t size, unsigned
return 0;
}
-static inline int lookup_symbol_name(unsigned long addr, char *symname)
+static inline int lookup_symbol_name(unsigned long addr, char *symname, size_t size)
{
return -ERANGE;
}
@@ -656,8 +656,8 @@ const char *module_address_lookup(unsigned long addr,
unsigned long *symbolsize,
unsigned long *offset,
char **modname, const unsigned char **modbuildid,
- char *namebuf);
-int lookup_module_symbol_name(unsigned long addr, char *symname);
+ char *namebuf, size_t buf_size);
+int lookup_module_symbol_name(unsigned long addr, char *symname, size_t size);
int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name);
int register_module_notifier(struct notifier_block *nb);
@@ -756,12 +756,12 @@ static inline const char *module_address_lookup(unsigned long addr,
unsigned long *offset,
char **modname,
const unsigned char **modbuildid,
- char *namebuf)
+ char *namebuf, size_t buf_size)
{
return NULL;
}
-static inline int lookup_module_symbol_name(unsigned long addr, char *symname)
+static inline int lookup_module_symbol_name(unsigned long addr, char *symname, size_t size)
{
return -ERANGE;
}
@@ -92,7 +92,7 @@ int kdbnearsym(unsigned long addr, kdb_symtab_t *symtab)
goto out;
symtab->sym_name = kallsyms_lookup(addr, &symbolsize , &offset,
- (char **)(&symtab->mod_name), namebuf);
+ (char **)(&symtab->mod_name), namebuf, KSYM_NAME_LEN);
if (offset > 8*1024*1024) {
symtab->sym_name = NULL;
addr = offset = symbolsize = 0;
@@ -342,18 +342,18 @@ int kallsyms_lookup_size_offset(unsigned long addr, unsigned long *symbolsize,
get_symbol_pos(addr, symbolsize, offset);
return 1;
}
- return !!module_address_lookup(addr, symbolsize, offset, NULL, NULL, namebuf) ||
+ return !!module_address_lookup(addr, symbolsize, offset, NULL, NULL, namebuf, KSYM_NAME_LEN) ||
!!__bpf_address_lookup(addr, symbolsize, offset, namebuf);
}
static const char *kallsyms_lookup_buildid(unsigned long addr,
unsigned long *symbolsize,
unsigned long *offset, char **modname,
- const unsigned char **modbuildid, char *namebuf)
+ const unsigned char **modbuildid, char *namebuf, size_t size)
{
const char *ret;
- namebuf[KSYM_NAME_LEN - 1] = 0;
+ namebuf[size - 1] = 0;
namebuf[0] = 0;
if (is_ksym_addr(addr)) {
@@ -362,7 +362,7 @@ static const char *kallsyms_lookup_buildid(unsigned long addr,
pos = get_symbol_pos(addr, symbolsize, offset);
/* Grab name */
kallsyms_expand_symbol(get_symbol_offset(pos),
- namebuf, KSYM_NAME_LEN);
+ namebuf, size);
if (modname)
*modname = NULL;
if (modbuildid)
@@ -374,7 +374,7 @@ static const char *kallsyms_lookup_buildid(unsigned long addr,
/* See if it's in a module or a BPF JITed image. */
ret = module_address_lookup(addr, symbolsize, offset,
- modname, modbuildid, namebuf);
+ modname, modbuildid, namebuf, size);
if (!ret)
ret = bpf_address_lookup(addr, symbolsize,
offset, modname, namebuf);
@@ -398,18 +398,18 @@ static const char *kallsyms_lookup_buildid(unsigned long addr,
const char *kallsyms_lookup(unsigned long addr,
unsigned long *symbolsize,
unsigned long *offset,
- char **modname, char *namebuf)
+ char **modname, char *namebuf, size_t size)
{
return kallsyms_lookup_buildid(addr, symbolsize, offset, modname,
- NULL, namebuf);
+ NULL, namebuf, size);
}
-int lookup_symbol_name(unsigned long addr, char *symname)
+int lookup_symbol_name(unsigned long addr, char *symname, size_t size)
{
int res;
symname[0] = '\0';
- symname[KSYM_NAME_LEN - 1] = '\0';
+ symname[size - 1] = '\0';
if (is_ksym_addr(addr)) {
unsigned long pos;
@@ -417,11 +417,11 @@ int lookup_symbol_name(unsigned long addr, char *symname)
pos = get_symbol_pos(addr, NULL, NULL);
/* Grab name */
kallsyms_expand_symbol(get_symbol_offset(pos),
- symname, KSYM_NAME_LEN);
+ symname, size);
goto found;
}
/* See if it's in a module. */
- res = lookup_module_symbol_name(addr, symname);
+ res = lookup_module_symbol_name(addr, symname, size);
if (res)
return res;
@@ -470,7 +470,7 @@ static int __sprint_symbol(char *buffer, size_t buf_size, unsigned long address,
address += symbol_offset;
name = kallsyms_lookup_buildid(address, &size, &offset, &modname, &buildid,
- buffer);
+ buffer, buf_size);
if (!name)
return scnprintf(buffer, buf_size, "0x%lx", address - symbol_offset);
@@ -1478,7 +1478,7 @@ bool within_kprobe_blacklist(unsigned long addr)
return true;
/* Check if the address is on a suffixed-symbol */
- if (!lookup_symbol_name(addr, symname)) {
+ if (!lookup_symbol_name(addr, symname, KSYM_NAME_LEN)) {
p = strchr(symname, '.');
if (!p)
return false;
@@ -2806,7 +2806,7 @@ static int show_kprobe_addr(struct seq_file *pi, void *v)
preempt_disable();
hlist_for_each_entry_rcu(p, head, hlist) {
sym = kallsyms_lookup((unsigned long)p->addr, NULL,
- &offset, &modname, namebuf);
+ &offset, &modname, namebuf, KSYM_NAME_LEN);
if (kprobe_aggrprobe(p)) {
list_for_each_entry_rcu(kp, &p->list, list)
report_probe(pi, kp, sym, offset, modname, p);
@@ -659,9 +659,9 @@ static const char *usage_str[] =
};
#endif
-const char *__get_key_name(const struct lockdep_subclass_key *key, char *str)
+const char *__get_key_name(const struct lockdep_subclass_key *key, char *str, size_t size)
{
- return kallsyms_lookup((unsigned long)key, NULL, NULL, NULL, str);
+ return kallsyms_lookup((unsigned long)key, NULL, NULL, NULL, str, size);
}
static inline unsigned long lock_flag(enum lock_usage_bit bit)
@@ -715,7 +715,7 @@ static void __print_lock_name(struct lock_class *class)
name = class->name;
if (!name) {
- name = __get_key_name(class->key, str);
+ name = __get_key_name(class->key, str, KSYM_NAME_LEN);
printk(KERN_CONT "%s", name);
} else {
printk(KERN_CONT "%s", name);
@@ -746,7 +746,7 @@ static void print_lockdep_cache(struct lockdep_map *lock)
name = lock->name;
if (!name)
- name = __get_key_name(lock->key->subkeys, str);
+ name = __get_key_name(lock->key->subkeys, str, KSYM_NAME_LEN);
printk(KERN_CONT "%s", name);
}
@@ -129,7 +129,7 @@ extern void get_usage_chars(struct lock_class *class,
char usage[LOCK_USAGE_CHARS]);
extern const char *__get_key_name(const struct lockdep_subclass_key *key,
- char *str);
+ char *str, size_t size);
struct lock_class *lock_chain_get_class(struct lock_chain *chain, int i);
@@ -63,7 +63,7 @@ static void print_name(struct seq_file *m, struct lock_class *class)
const char *name = class->name;
if (!name) {
- name = __get_key_name(class->key, str);
+ name = __get_key_name(class->key, str, KSYM_NAME_LEN);
seq_printf(m, "%s", name);
} else{
seq_printf(m, "%s", name);
@@ -485,7 +485,7 @@ static void seq_stats(struct seq_file *m, struct lock_stat_data *data)
char str[KSYM_NAME_LEN];
const char *key_name;
- key_name = __get_key_name(ckey, str);
+ key_name = __get_key_name(ckey, str, KSYM_NAME_LEN);
snprintf(name, namelen, "%s", key_name);
} else {
snprintf(name, namelen, "%s", cname);
@@ -320,7 +320,7 @@ const char *module_address_lookup(unsigned long addr,
unsigned long *offset,
char **modname,
const unsigned char **modbuildid,
- char *namebuf)
+ char *namebuf, size_t buf_size)
{
const char *ret = NULL;
struct module *mod;
@@ -342,7 +342,7 @@ const char *module_address_lookup(unsigned long addr,
}
/* Make a copy in here where it's safe */
if (ret) {
- strncpy(namebuf, ret, KSYM_NAME_LEN - 1);
+ strncpy(namebuf, ret, buf_size - 1);
ret = namebuf;
}
preempt_enable();
@@ -350,7 +350,7 @@ const char *module_address_lookup(unsigned long addr,
return ret;
}
-int lookup_module_symbol_name(unsigned long addr, char *symname)
+int lookup_module_symbol_name(unsigned long addr, char *symname, size_t size)
{
struct module *mod;
@@ -365,7 +365,7 @@ int lookup_module_symbol_name(unsigned long addr, char *symname)
if (!sym)
goto out;
- strscpy(symname, sym, KSYM_NAME_LEN);
+ strscpy(symname, sym, size);
preempt_enable();
return 0;
}
@@ -520,7 +520,7 @@ static int function_stat_show(struct seq_file *m, void *v)
goto out;
#endif
- kallsyms_lookup(rec->ip, NULL, NULL, NULL, str);
+ kallsyms_lookup(rec->ip, NULL, NULL, NULL, str, KSYM_SYMBOL_LEN);
seq_printf(m, " %-30.30s %10lu", str, rec->counter);
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
@@ -3980,7 +3980,7 @@ ftrace_match_record(struct dyn_ftrace *rec, struct ftrace_glob *func_g,
char str[KSYM_SYMBOL_LEN];
char *modname;
- kallsyms_lookup(rec->ip, NULL, NULL, &modname, str);
+ kallsyms_lookup(rec->ip, NULL, NULL, &modname, str, KSYM_SYMBOL_LEN);
if (mod_g) {
int mod_matches = (modname) ? ftrace_match(modname, mod_g) : 0;
@@ -4738,7 +4738,7 @@ unregister_ftrace_function_probe_func(char *glob, struct trace_array *tr,
if (func_g.search) {
kallsyms_lookup(entry->ip, NULL, NULL,
- NULL, str);
+ NULL, str, KSYM_SYMBOL_LEN);
if (!ftrace_match(str, &func_g))
continue;
}
@@ -6846,7 +6846,8 @@ static void save_ftrace_mod_rec(struct ftrace_mod_map *mod_map,
char *modname;
const char *ret;
- ret = kallsyms_lookup(rec->ip, &symsize, &offset, &modname, str);
+ ret = kallsyms_lookup(rec->ip, &symsize, &offset, &modname,
+ str, KSYM_SYMBOL_LEN);
if (!ret)
return;
@@ -456,7 +456,7 @@ static bool within_notrace_func(struct trace_kprobe *tk)
return false;
/* Check if the address is on a suffixed-symbol */
- if (!lookup_symbol_name(addr, symname)) {
+ if (!lookup_symbol_name(addr, symname, KSYM_NAME_LEN)) {
p = strchr(symname, '.');
if (!p)
return true;
@@ -364,7 +364,7 @@ trace_seq_print_sym(struct trace_seq *s, unsigned long address, bool offset)
if (offset)
sprint_symbol(str, KSYM_SYMBOL_LEN, address);
else
- kallsyms_lookup(address, NULL, NULL, NULL, str);
+ kallsyms_lookup(address, NULL, NULL, NULL, str, KSYM_SYMBOL_LEN);
name = kretprobed(str, address);
if (name && strlen(name)) {
@@ -89,7 +89,7 @@ find_syscall_meta(unsigned long syscall)
start = __start_syscalls_metadata;
stop = __stop_syscalls_metadata;
- kallsyms_lookup(syscall, NULL, NULL, NULL, str);
+ kallsyms_lookup(syscall, NULL, NULL, NULL, str, KSYM_SYMBOL_LEN);
if (arch_syscall_match_sym_name(str, "sys_ni_syscall"))
return NULL;