On Thu, 17 Dec 2020 17:54:13 +0100 Helge Deller <deller@xxxxxx> wrote: > To resolve the symbol fuction name for wchan, use the printk format > specifier %ps instead of manually looking up the symbol function name > via lookup_symbol_name(). > > Signed-off-by: Helge Deller <deller@xxxxxx> > Please don't forget the "^---$" to separate the changelog from the diff. > #include <linux/module.h> > @@ -386,19 +385,17 @@ static int proc_pid_wchan(struct seq_file *m, struct pid_namespace *ns, > struct pid *pid, struct task_struct *task) > { > unsigned long wchan; > - char symname[KSYM_NAME_LEN]; > > - if (!ptrace_may_access(task, PTRACE_MODE_READ_FSCREDS)) > - goto print0; > + if (ptrace_may_access(task, PTRACE_MODE_READ_FSCREDS)) > + wchan = get_wchan(task); > + else > + wchan = 0; > > - wchan = get_wchan(task); > - if (wchan && !lookup_symbol_name(wchan, symname)) { > - seq_puts(m, symname); > - return 0; > - } > + if (wchan) > + seq_printf(m, "%ps", (void *) wchan); > + else > + seq_putc(m, '0'); > > -print0: > - seq_putc(m, '0'); > return 0; > } We can simplify this further? static int proc_pid_wchan(struct seq_file *m, struct pid_namespace *ns, struct pid *pid, struct task_struct *task) { if (ptrace_may_access(task, PTRACE_MODE_READ_FSCREDS)) seq_printf(m, "%ps", (void *)get_wchan(task)); else seq_putc(m, '0'); return 0; } --- a/fs/proc/base.c~proc-wchan-use-printk-format-instead-of-lookup_symbol_name-fix +++ a/fs/proc/base.c @@ -384,15 +384,8 @@ static const struct file_operations proc static int proc_pid_wchan(struct seq_file *m, struct pid_namespace *ns, struct pid *pid, struct task_struct *task) { - unsigned long wchan; - if (ptrace_may_access(task, PTRACE_MODE_READ_FSCREDS)) - wchan = get_wchan(task); - else - wchan = 0; - - if (wchan) - seq_printf(m, "%ps", (void *) wchan); + seq_printf(m, "%ps", (void *)get_wchan(task)); else seq_putc(m, '0'); _