diff options
| -rw-r--r-- | fs/proc/root.c | 10 | ||||
| -rw-r--r-- | include/linux/proc_ns.h | 1 | ||||
| -rw-r--r-- | include/uapi/linux/fs.h | 11 | 
3 files changed, 16 insertions, 6 deletions
diff --git a/fs/proc/root.c b/fs/proc/root.c index 06a297a27ba3..ed86ac710384 100644 --- a/fs/proc/root.c +++ b/fs/proc/root.c @@ -363,12 +363,12 @@ static const struct inode_operations proc_root_inode_operations = {   * This is the root "inode" in the /proc tree..   */  struct proc_dir_entry proc_root = { -	.low_ino	= PROC_ROOT_INO,  -	.namelen	= 5,  -	.mode		= S_IFDIR | S_IRUGO | S_IXUGO,  -	.nlink		= 2,  +	.low_ino	= PROCFS_ROOT_INO, +	.namelen	= 5, +	.mode		= S_IFDIR | S_IRUGO | S_IXUGO, +	.nlink		= 2,  	.refcnt		= REFCOUNT_INIT(1), -	.proc_iops	= &proc_root_inode_operations,  +	.proc_iops	= &proc_root_inode_operations,  	.proc_dir_ops	= &proc_root_operations,  	.parent		= &proc_root,  	.subdir		= RB_ROOT, diff --git a/include/linux/proc_ns.h b/include/linux/proc_ns.h index 6258455e49a4..4b20375f3783 100644 --- a/include/linux/proc_ns.h +++ b/include/linux/proc_ns.h @@ -40,7 +40,6 @@ extern const struct proc_ns_operations timens_for_children_operations;   * We always define these enumerators   */  enum { -	PROC_ROOT_INO		= 1,  	PROC_IPC_INIT_INO	= IPC_NS_INIT_INO,  	PROC_UTS_INIT_INO	= UTS_NS_INIT_INO,  	PROC_USER_INIT_INO	= USER_NS_INIT_INO, diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h index 0098b0ce8ccb..28238a3edbc1 100644 --- a/include/uapi/linux/fs.h +++ b/include/uapi/linux/fs.h @@ -60,6 +60,17 @@  #define RENAME_EXCHANGE		(1 << 1)	/* Exchange source and dest */  #define RENAME_WHITEOUT		(1 << 2)	/* Whiteout source */ +/* + * The root inode of procfs is guaranteed to always have the same inode number. + * For programs that make heavy use of procfs, verifying that the root is a + * real procfs root and using openat2(RESOLVE_{NO_{XDEV,MAGICLINKS},BENEATH}) + * will allow you to make sure you are never tricked into operating on the + * wrong procfs file. + */ +enum procfs_ino { +	PROCFS_ROOT_INO = 1, +}; +  struct file_clone_range {  	__s64 src_fd;  	__u64 src_offset;  | 
