diff options
Diffstat (limited to 'fs/proc/array.c')
| -rw-r--r-- | fs/proc/array.c | 9 | 
1 files changed, 9 insertions, 0 deletions
diff --git a/fs/proc/array.c b/fs/proc/array.c index 88c355574aa0..525157ca25cb 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c @@ -62,6 +62,7 @@  #include <linux/mman.h>  #include <linux/sched/mm.h>  #include <linux/sched/numa_balancing.h> +#include <linux/sched/task_stack.h>  #include <linux/sched/task.h>  #include <linux/sched/cputime.h>  #include <linux/proc_fs.h> @@ -421,7 +422,15 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,  		 * esp and eip are intentionally zeroed out.  There is no  		 * non-racy way to read them without freezing the task.  		 * Programs that need reliable values can use ptrace(2). +		 * +		 * The only exception is if the task is core dumping because +		 * a program is not able to use ptrace(2) in that case. It is +		 * safe because the task has stopped executing permanently.  		 */ +		if (permitted && (task->flags & PF_DUMPCORE)) { +			eip = KSTK_EIP(task); +			esp = KSTK_ESP(task); +		}  	}  	get_task_comm(tcomm, task);  | 
