diff options
Diffstat (limited to 'fs/proc/base.c')
| -rw-r--r-- | fs/proc/base.c | 19 | 
1 files changed, 11 insertions, 8 deletions
| diff --git a/fs/proc/base.c b/fs/proc/base.c index 533d5836eb9a..1f394095eb88 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -67,6 +67,7 @@  #include <linux/mm.h>  #include <linux/swap.h>  #include <linux/rcupdate.h> +#include <linux/kallsyms.h>  #include <linux/stacktrace.h>  #include <linux/resource.h>  #include <linux/module.h> @@ -386,17 +387,19 @@ 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)) -		wchan = get_wchan(task); -	else -		wchan = 0; +	if (!ptrace_may_access(task, PTRACE_MODE_READ_FSCREDS)) +		goto print0; -	if (wchan) -		seq_printf(m, "%ps", (void *) wchan); -	else -		seq_putc(m, '0'); +	wchan = get_wchan(task); +	if (wchan && !lookup_symbol_name(wchan, symname)) { +		seq_puts(m, symname); +		return 0; +	} +print0: +	seq_putc(m, '0');  	return 0;  }  #endif /* CONFIG_KALLSYMS */ |