diff options
Diffstat (limited to 'fs/proc')
| -rw-r--r-- | fs/proc/Makefile | 1 | ||||
| -rw-r--r-- | fs/proc/array.c | 45 | ||||
| -rw-r--r-- | fs/proc/base.c | 1 | ||||
| -rw-r--r-- | fs/proc/cmdline.c | 1 | ||||
| -rw-r--r-- | fs/proc/cpuinfo.c | 1 | ||||
| -rw-r--r-- | fs/proc/devices.c | 1 | ||||
| -rw-r--r-- | fs/proc/fd.c | 1 | ||||
| -rw-r--r-- | fs/proc/fd.h | 1 | ||||
| -rw-r--r-- | fs/proc/inode.c | 1 | ||||
| -rw-r--r-- | fs/proc/interrupts.c | 1 | ||||
| -rw-r--r-- | fs/proc/kcore.c | 1 | ||||
| -rw-r--r-- | fs/proc/kmsg.c | 1 | ||||
| -rw-r--r-- | fs/proc/loadavg.c | 1 | ||||
| -rw-r--r-- | fs/proc/meminfo.c | 1 | ||||
| -rw-r--r-- | fs/proc/namespaces.c | 1 | ||||
| -rw-r--r-- | fs/proc/page.c | 1 | ||||
| -rw-r--r-- | fs/proc/proc_sysctl.c | 1 | ||||
| -rw-r--r-- | fs/proc/proc_tty.c | 1 | ||||
| -rw-r--r-- | fs/proc/root.c | 1 | ||||
| -rw-r--r-- | fs/proc/self.c | 1 | ||||
| -rw-r--r-- | fs/proc/softirqs.c | 1 | ||||
| -rw-r--r-- | fs/proc/stat.c | 1 | ||||
| -rw-r--r-- | fs/proc/task_mmu.c | 7 | ||||
| -rw-r--r-- | fs/proc/task_nommu.c | 1 | ||||
| -rw-r--r-- | fs/proc/thread_self.c | 1 | ||||
| -rw-r--r-- | fs/proc/uptime.c | 1 | ||||
| -rw-r--r-- | fs/proc/version.c | 1 | 
27 files changed, 56 insertions, 21 deletions
| diff --git a/fs/proc/Makefile b/fs/proc/Makefile index 12c6922c913c..f7456c4e7d0f 100644 --- a/fs/proc/Makefile +++ b/fs/proc/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  #  # Makefile for the Linux proc filesystem routines.  # diff --git a/fs/proc/array.c b/fs/proc/array.c index 88c355574aa0..9390032a11e1 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   *  linux/fs/proc/array.c   * @@ -62,6 +63,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> @@ -118,30 +120,25 @@ static inline void task_name(struct seq_file *m, struct task_struct *p)   * simple bit tests.   */  static const char * const task_state_array[] = { -	"R (running)",		/*   0 */ -	"S (sleeping)",		/*   1 */ -	"D (disk sleep)",	/*   2 */ -	"T (stopped)",		/*   4 */ -	"t (tracing stop)",	/*   8 */ -	"X (dead)",		/*  16 */ -	"Z (zombie)",		/*  32 */ + +	/* states in TASK_REPORT: */ +	"R (running)",		/* 0x00 */ +	"S (sleeping)",		/* 0x01 */ +	"D (disk sleep)",	/* 0x02 */ +	"T (stopped)",		/* 0x04 */ +	"t (tracing stop)",	/* 0x08 */ +	"X (dead)",		/* 0x10 */ +	"Z (zombie)",		/* 0x20 */ +	"P (parked)",		/* 0x40 */ + +	/* states beyond TASK_REPORT: */ +	"I (idle)",		/* 0x80 */  };  static inline const char *get_task_state(struct task_struct *tsk)  { -	unsigned int state = (tsk->state | tsk->exit_state) & TASK_REPORT; - -	/* -	 * Parked tasks do not run; they sit in __kthread_parkme(). -	 * Without this check, we would report them as running, which is -	 * clearly wrong, so we report them as sleeping instead. -	 */ -	if (tsk->state == TASK_PARKED) -		state = TASK_INTERRUPTIBLE; - -	BUILD_BUG_ON(1 + ilog2(TASK_REPORT) != ARRAY_SIZE(task_state_array)-1); - -	return task_state_array[fls(state)]; +	BUILD_BUG_ON(1 + ilog2(TASK_REPORT_MAX) != ARRAY_SIZE(task_state_array)); +	return task_state_array[__get_task_state(tsk)];  }  static inline int get_task_umask(struct task_struct *tsk) @@ -421,7 +418,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); diff --git a/fs/proc/base.c b/fs/proc/base.c index ad3b0762cc3e..9d357b2ea6cb 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   *  linux/fs/proc/base.c   * diff --git a/fs/proc/cmdline.c b/fs/proc/cmdline.c index cbd82dff7e81..403cbb12a6e9 100644 --- a/fs/proc/cmdline.c +++ b/fs/proc/cmdline.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/fs.h>  #include <linux/init.h>  #include <linux/proc_fs.h> diff --git a/fs/proc/cpuinfo.c b/fs/proc/cpuinfo.c index 06f4d31e0396..e0f867cd8553 100644 --- a/fs/proc/cpuinfo.c +++ b/fs/proc/cpuinfo.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/fs.h>  #include <linux/init.h>  #include <linux/proc_fs.h> diff --git a/fs/proc/devices.c b/fs/proc/devices.c index e5709343feb7..2c7f22b14489 100644 --- a/fs/proc/devices.c +++ b/fs/proc/devices.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/fs.h>  #include <linux/init.h>  #include <linux/proc_fs.h> diff --git a/fs/proc/fd.c b/fs/proc/fd.c index c330495c3115..96fc70225e54 100644 --- a/fs/proc/fd.c +++ b/fs/proc/fd.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/sched/signal.h>  #include <linux/errno.h>  #include <linux/dcache.h> diff --git a/fs/proc/fd.h b/fs/proc/fd.h index 46dafadd0083..f371a602bf58 100644 --- a/fs/proc/fd.h +++ b/fs/proc/fd.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef __PROCFS_FD_H__  #define __PROCFS_FD_H__ diff --git a/fs/proc/inode.c b/fs/proc/inode.c index e250910cffc8..225f541f7078 100644 --- a/fs/proc/inode.c +++ b/fs/proc/inode.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   *  linux/fs/proc/inode.c   * diff --git a/fs/proc/interrupts.c b/fs/proc/interrupts.c index a352d5703b41..6a6bee9c603c 100644 --- a/fs/proc/interrupts.c +++ b/fs/proc/interrupts.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/fs.h>  #include <linux/init.h>  #include <linux/interrupt.h> diff --git a/fs/proc/kcore.c b/fs/proc/kcore.c index 45629f4b5402..4bc85cb8be6a 100644 --- a/fs/proc/kcore.c +++ b/fs/proc/kcore.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   *	fs/proc/kcore.c kernel ELF core dumper   * diff --git a/fs/proc/kmsg.c b/fs/proc/kmsg.c index f9387bb7631b..e0f8774acd65 100644 --- a/fs/proc/kmsg.c +++ b/fs/proc/kmsg.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   *  linux/fs/proc/kmsg.c   * diff --git a/fs/proc/loadavg.c b/fs/proc/loadavg.c index 983fce5c2418..9bc5c58c00ee 100644 --- a/fs/proc/loadavg.c +++ b/fs/proc/loadavg.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/fs.h>  #include <linux/init.h>  #include <linux/pid_namespace.h> diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c index cdd979724c74..6bb20f864259 100644 --- a/fs/proc/meminfo.c +++ b/fs/proc/meminfo.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/fs.h>  #include <linux/init.h>  #include <linux/kernel.h> diff --git a/fs/proc/namespaces.c b/fs/proc/namespaces.c index 3803b24ca220..59b17e509f46 100644 --- a/fs/proc/namespaces.c +++ b/fs/proc/namespaces.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/proc_fs.h>  #include <linux/nsproxy.h>  #include <linux/ptrace.h> diff --git a/fs/proc/page.c b/fs/proc/page.c index 2726536489b1..1491918a33c3 100644 --- a/fs/proc/page.c +++ b/fs/proc/page.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/bootmem.h>  #include <linux/compiler.h>  #include <linux/fs.h> diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c index 8f479229b349..c5cbbdff3c3d 100644 --- a/fs/proc/proc_sysctl.c +++ b/fs/proc/proc_sysctl.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   * /proc/sys support   */ diff --git a/fs/proc/proc_tty.c b/fs/proc/proc_tty.c index 901bd06f437d..2da657848cfc 100644 --- a/fs/proc/proc_tty.c +++ b/fs/proc/proc_tty.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   * proc_tty.c -- handles /proc/tty   * diff --git a/fs/proc/root.c b/fs/proc/root.c index 926fb27f4ca2..4e42aba97f2e 100644 --- a/fs/proc/root.c +++ b/fs/proc/root.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   *  linux/fs/proc/root.c   * diff --git a/fs/proc/self.c b/fs/proc/self.c index 39857f6db5cf..31326bb23b8b 100644 --- a/fs/proc/self.c +++ b/fs/proc/self.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/sched.h>  #include <linux/slab.h>  #include <linux/pid_namespace.h> diff --git a/fs/proc/softirqs.c b/fs/proc/softirqs.c index ad8a77f94beb..24072cc06e65 100644 --- a/fs/proc/softirqs.c +++ b/fs/proc/softirqs.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/init.h>  #include <linux/kernel_stat.h>  #include <linux/proc_fs.h> diff --git a/fs/proc/stat.c b/fs/proc/stat.c index bd4e55f4aa20..59749dfaef67 100644 --- a/fs/proc/stat.c +++ b/fs/proc/stat.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/cpumask.h>  #include <linux/fs.h>  #include <linux/init.h> diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 5589b4bd4b85..6744bd706ecf 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/mm.h>  #include <linux/vmacache.h>  #include <linux/hugetlb.h> @@ -1310,13 +1311,15 @@ static int pagemap_pmd_range(pmd_t *pmdp, unsigned long addr, unsigned long end,  		pmd_t pmd = *pmdp;  		struct page *page = NULL; -		if ((vma->vm_flags & VM_SOFTDIRTY) || pmd_soft_dirty(pmd)) +		if (vma->vm_flags & VM_SOFTDIRTY)  			flags |= PM_SOFT_DIRTY;  		if (pmd_present(pmd)) {  			page = pmd_page(pmd);  			flags |= PM_PRESENT; +			if (pmd_soft_dirty(pmd)) +				flags |= PM_SOFT_DIRTY;  			if (pm->show_pfn)  				frame = pmd_pfn(pmd) +  					((addr & ~PMD_MASK) >> PAGE_SHIFT); @@ -1328,6 +1331,8 @@ static int pagemap_pmd_range(pmd_t *pmdp, unsigned long addr, unsigned long end,  			frame = swp_type(entry) |  				(swp_offset(entry) << MAX_SWAPFILES_SHIFT);  			flags |= PM_SWAP; +			if (pmd_swp_soft_dirty(pmd)) +				flags |= PM_SOFT_DIRTY;  			VM_BUG_ON(!is_pmd_migration_entry(pmd));  			page = migration_entry_to_page(entry);  		} diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c index b00b766098fa..5b62f57bd9bc 100644 --- a/fs/proc/task_nommu.c +++ b/fs/proc/task_nommu.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/mm.h>  #include <linux/file.h> diff --git a/fs/proc/thread_self.c b/fs/proc/thread_self.c index 20614b62a9b7..b813e3b529f2 100644 --- a/fs/proc/thread_self.c +++ b/fs/proc/thread_self.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/sched.h>  #include <linux/slab.h>  #include <linux/pid_namespace.h> diff --git a/fs/proc/uptime.c b/fs/proc/uptime.c index 7981c4ffe787..95a708d83721 100644 --- a/fs/proc/uptime.c +++ b/fs/proc/uptime.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/fs.h>  #include <linux/init.h>  #include <linux/proc_fs.h> diff --git a/fs/proc/version.c b/fs/proc/version.c index d2154eb6d78f..94901e8e700d 100644 --- a/fs/proc/version.c +++ b/fs/proc/version.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/fs.h>  #include <linux/init.h>  #include <linux/kernel.h> |