On 12/23/20 3:18 AM, Andrew Morton wrote: > On Thu, 17 Dec 2020 17:54:13 +0100 Helge Deller <del...@gmx.de> 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 <del...@gmx.de> >> > > Please don't forget the "^---$" to separate the changelog from the > diff.
Ok. > >> #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'); get_wchan() does return NULL sometimes, in which case with your change now "0x0" instead of "0" gets printed. If that's acceptable, then your patch is Ok. Helge