forked from mirrors/linux
		
	vfs: Suppress MS_* flag defs within the kernel unless explicitly enabled
Only the mount namespace code that implements mount(2) should be using the MS_* flags. Suppress them inside the kernel unless uapi/linux/mount.h is included. Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Reviewed-by: David Howells <dhowells@redhat.com>
This commit is contained in:
		
							parent
							
								
									26cb5a328c
								
							
						
					
					
						commit
						e262e32d6b
					
				
					 18 changed files with 79 additions and 51 deletions
				
			
		|  | @ -19,6 +19,7 @@ | ||||||
| #include <linux/of_fdt.h> | #include <linux/of_fdt.h> | ||||||
| #include <linux/of.h> | #include <linux/of.h> | ||||||
| #include <linux/cache.h> | #include <linux/cache.h> | ||||||
|  | #include <uapi/linux/mount.h> | ||||||
| #include <asm/sections.h> | #include <asm/sections.h> | ||||||
| #include <asm/arcregs.h> | #include <asm/arcregs.h> | ||||||
| #include <asm/tlb.h> | #include <asm/tlb.h> | ||||||
|  |  | ||||||
|  | @ -24,6 +24,7 @@ | ||||||
| #include <linux/root_dev.h> | #include <linux/root_dev.h> | ||||||
| #include <linux/screen_info.h> | #include <linux/screen_info.h> | ||||||
| #include <linux/memblock.h> | #include <linux/memblock.h> | ||||||
|  | #include <uapi/linux/mount.h> | ||||||
| 
 | 
 | ||||||
| #include <asm/setup.h> | #include <asm/setup.h> | ||||||
| #include <asm/system_info.h> | #include <asm/system_info.h> | ||||||
|  |  | ||||||
|  | @ -32,6 +32,7 @@ | ||||||
| #include <linux/of.h> | #include <linux/of.h> | ||||||
| #include <linux/of_fdt.h> | #include <linux/of_fdt.h> | ||||||
| #include <linux/uaccess.h> | #include <linux/uaccess.h> | ||||||
|  | #include <uapi/linux/mount.h> | ||||||
| #include <asm/io.h> | #include <asm/io.h> | ||||||
| #include <asm/page.h> | #include <asm/page.h> | ||||||
| #include <asm/elf.h> | #include <asm/elf.h> | ||||||
|  |  | ||||||
|  | @ -34,6 +34,7 @@ | ||||||
| #include <linux/kdebug.h> | #include <linux/kdebug.h> | ||||||
| #include <linux/export.h> | #include <linux/export.h> | ||||||
| #include <linux/start_kernel.h> | #include <linux/start_kernel.h> | ||||||
|  | #include <uapi/linux/mount.h> | ||||||
| 
 | 
 | ||||||
| #include <asm/io.h> | #include <asm/io.h> | ||||||
| #include <asm/processor.h> | #include <asm/processor.h> | ||||||
|  |  | ||||||
|  | @ -33,6 +33,7 @@ | ||||||
| #include <linux/module.h> | #include <linux/module.h> | ||||||
| #include <linux/start_kernel.h> | #include <linux/start_kernel.h> | ||||||
| #include <linux/memblock.h> | #include <linux/memblock.h> | ||||||
|  | #include <uapi/linux/mount.h> | ||||||
| 
 | 
 | ||||||
| #include <asm/io.h> | #include <asm/io.h> | ||||||
| #include <asm/processor.h> | #include <asm/processor.h> | ||||||
|  |  | ||||||
|  | @ -50,6 +50,7 @@ | ||||||
| #include <linux/kvm_para.h> | #include <linux/kvm_para.h> | ||||||
| #include <linux/dma-contiguous.h> | #include <linux/dma-contiguous.h> | ||||||
| #include <xen/xen.h> | #include <xen/xen.h> | ||||||
|  | #include <uapi/linux/mount.h> | ||||||
| 
 | 
 | ||||||
| #include <linux/errno.h> | #include <linux/errno.h> | ||||||
| #include <linux/kernel.h> | #include <linux/kernel.h> | ||||||
|  |  | ||||||
|  | @ -25,6 +25,7 @@ | ||||||
| #include <linux/sched.h> | #include <linux/sched.h> | ||||||
| #include <linux/slab.h> | #include <linux/slab.h> | ||||||
| #include <linux/kthread.h> | #include <linux/kthread.h> | ||||||
|  | #include <uapi/linux/mount.h> | ||||||
| #include "base.h" | #include "base.h" | ||||||
| 
 | 
 | ||||||
| static struct task_struct *thread; | static struct task_struct *thread; | ||||||
|  |  | ||||||
|  | @ -26,6 +26,7 @@ | ||||||
| #include <linux/memblock.h> | #include <linux/memblock.h> | ||||||
| #include <linux/task_work.h> | #include <linux/task_work.h> | ||||||
| #include <linux/sched/task.h> | #include <linux/sched/task.h> | ||||||
|  | #include <uapi/linux/mount.h> | ||||||
| 
 | 
 | ||||||
| #include "pnode.h" | #include "pnode.h" | ||||||
| #include "internal.h" | #include "internal.h" | ||||||
|  |  | ||||||
|  | @ -10,6 +10,7 @@ | ||||||
| #include <linux/mount.h> | #include <linux/mount.h> | ||||||
| #include <linux/fs.h> | #include <linux/fs.h> | ||||||
| #include <linux/nsproxy.h> | #include <linux/nsproxy.h> | ||||||
|  | #include <uapi/linux/mount.h> | ||||||
| #include "internal.h" | #include "internal.h" | ||||||
| #include "pnode.h" | #include "pnode.h" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -35,6 +35,7 @@ | ||||||
| #include <linux/fsnotify.h> | #include <linux/fsnotify.h> | ||||||
| #include <linux/lockdep.h> | #include <linux/lockdep.h> | ||||||
| #include <linux/user_namespace.h> | #include <linux/user_namespace.h> | ||||||
|  | #include <uapi/linux/mount.h> | ||||||
| #include "internal.h" | #include "internal.h" | ||||||
| 
 | 
 | ||||||
| static int thaw_super_locked(struct super_block *sb); | static int thaw_super_locked(struct super_block *sb); | ||||||
|  |  | ||||||
|  | @ -14,6 +14,11 @@ | ||||||
| #include <linux/ioctl.h> | #include <linux/ioctl.h> | ||||||
| #include <linux/types.h> | #include <linux/types.h> | ||||||
| 
 | 
 | ||||||
|  | /* Use of MS_* flags within the kernel is restricted to core mount(2) code. */ | ||||||
|  | #if !defined(__KERNEL__) | ||||||
|  | #include <linux/mount.h> | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| /*
 | /*
 | ||||||
|  * It's silly to have NR_OPEN bigger than NR_FILE, but you can change |  * It's silly to have NR_OPEN bigger than NR_FILE, but you can change | ||||||
|  * the file limit at runtime and only root can increase the per-process |  * the file limit at runtime and only root can increase the per-process | ||||||
|  | @ -101,57 +106,6 @@ struct inodes_stat_t { | ||||||
| 
 | 
 | ||||||
| #define NR_FILE  8192	/* this can well be larger on a larger system */ | #define NR_FILE  8192	/* this can well be larger on a larger system */ | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * These are the fs-independent mount-flags: up to 32 flags are supported |  | ||||||
|  */ |  | ||||||
| #define MS_RDONLY	 1	/* Mount read-only */ |  | ||||||
| #define MS_NOSUID	 2	/* Ignore suid and sgid bits */ |  | ||||||
| #define MS_NODEV	 4	/* Disallow access to device special files */ |  | ||||||
| #define MS_NOEXEC	 8	/* Disallow program execution */ |  | ||||||
| #define MS_SYNCHRONOUS	16	/* Writes are synced at once */ |  | ||||||
| #define MS_REMOUNT	32	/* Alter flags of a mounted FS */ |  | ||||||
| #define MS_MANDLOCK	64	/* Allow mandatory locks on an FS */ |  | ||||||
| #define MS_DIRSYNC	128	/* Directory modifications are synchronous */ |  | ||||||
| #define MS_NOATIME	1024	/* Do not update access times. */ |  | ||||||
| #define MS_NODIRATIME	2048	/* Do not update directory access times */ |  | ||||||
| #define MS_BIND		4096 |  | ||||||
| #define MS_MOVE		8192 |  | ||||||
| #define MS_REC		16384 |  | ||||||
| #define MS_VERBOSE	32768	/* War is peace. Verbosity is silence. |  | ||||||
| 				   MS_VERBOSE is deprecated. */ |  | ||||||
| #define MS_SILENT	32768 |  | ||||||
| #define MS_POSIXACL	(1<<16)	/* VFS does not apply the umask */ |  | ||||||
| #define MS_UNBINDABLE	(1<<17)	/* change to unbindable */ |  | ||||||
| #define MS_PRIVATE	(1<<18)	/* change to private */ |  | ||||||
| #define MS_SLAVE	(1<<19)	/* change to slave */ |  | ||||||
| #define MS_SHARED	(1<<20)	/* change to shared */ |  | ||||||
| #define MS_RELATIME	(1<<21)	/* Update atime relative to mtime/ctime. */ |  | ||||||
| #define MS_KERNMOUNT	(1<<22) /* this is a kern_mount call */ |  | ||||||
| #define MS_I_VERSION	(1<<23) /* Update inode I_version field */ |  | ||||||
| #define MS_STRICTATIME	(1<<24) /* Always perform atime updates */ |  | ||||||
| #define MS_LAZYTIME	(1<<25) /* Update the on-disk [acm]times lazily */ |  | ||||||
| 
 |  | ||||||
| /* These sb flags are internal to the kernel */ |  | ||||||
| #define MS_SUBMOUNT     (1<<26) |  | ||||||
| #define MS_NOREMOTELOCK	(1<<27) |  | ||||||
| #define MS_NOSEC	(1<<28) |  | ||||||
| #define MS_BORN		(1<<29) |  | ||||||
| #define MS_ACTIVE	(1<<30) |  | ||||||
| #define MS_NOUSER	(1<<31) |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Superblock flags that can be altered by MS_REMOUNT |  | ||||||
|  */ |  | ||||||
| #define MS_RMT_MASK	(MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_I_VERSION|\ |  | ||||||
| 			 MS_LAZYTIME) |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Old magic mount flag and mask |  | ||||||
|  */ |  | ||||||
| #define MS_MGC_VAL 0xC0ED0000 |  | ||||||
| #define MS_MGC_MSK 0xffff0000 |  | ||||||
| 
 |  | ||||||
| /*
 | /*
 | ||||||
|  * Structure for FS_IOC_FSGETXATTR[A] and FS_IOC_FSSETXATTR. |  * Structure for FS_IOC_FSGETXATTR[A] and FS_IOC_FSSETXATTR. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
							
								
								
									
										58
									
								
								include/uapi/linux/mount.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								include/uapi/linux/mount.h
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,58 @@ | ||||||
|  | #ifndef _UAPI_LINUX_MOUNT_H | ||||||
|  | #define _UAPI_LINUX_MOUNT_H | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * These are the fs-independent mount-flags: up to 32 flags are supported | ||||||
|  |  * | ||||||
|  |  * Usage of these is restricted within the kernel to core mount(2) code and | ||||||
|  |  * callers of sys_mount() only.  Filesystems should be using the SB_* | ||||||
|  |  * equivalent instead. | ||||||
|  |  */ | ||||||
|  | #define MS_RDONLY	 1	/* Mount read-only */ | ||||||
|  | #define MS_NOSUID	 2	/* Ignore suid and sgid bits */ | ||||||
|  | #define MS_NODEV	 4	/* Disallow access to device special files */ | ||||||
|  | #define MS_NOEXEC	 8	/* Disallow program execution */ | ||||||
|  | #define MS_SYNCHRONOUS	16	/* Writes are synced at once */ | ||||||
|  | #define MS_REMOUNT	32	/* Alter flags of a mounted FS */ | ||||||
|  | #define MS_MANDLOCK	64	/* Allow mandatory locks on an FS */ | ||||||
|  | #define MS_DIRSYNC	128	/* Directory modifications are synchronous */ | ||||||
|  | #define MS_NOATIME	1024	/* Do not update access times. */ | ||||||
|  | #define MS_NODIRATIME	2048	/* Do not update directory access times */ | ||||||
|  | #define MS_BIND		4096 | ||||||
|  | #define MS_MOVE		8192 | ||||||
|  | #define MS_REC		16384 | ||||||
|  | #define MS_VERBOSE	32768	/* War is peace. Verbosity is silence. | ||||||
|  | 				   MS_VERBOSE is deprecated. */ | ||||||
|  | #define MS_SILENT	32768 | ||||||
|  | #define MS_POSIXACL	(1<<16)	/* VFS does not apply the umask */ | ||||||
|  | #define MS_UNBINDABLE	(1<<17)	/* change to unbindable */ | ||||||
|  | #define MS_PRIVATE	(1<<18)	/* change to private */ | ||||||
|  | #define MS_SLAVE	(1<<19)	/* change to slave */ | ||||||
|  | #define MS_SHARED	(1<<20)	/* change to shared */ | ||||||
|  | #define MS_RELATIME	(1<<21)	/* Update atime relative to mtime/ctime. */ | ||||||
|  | #define MS_KERNMOUNT	(1<<22) /* this is a kern_mount call */ | ||||||
|  | #define MS_I_VERSION	(1<<23) /* Update inode I_version field */ | ||||||
|  | #define MS_STRICTATIME	(1<<24) /* Always perform atime updates */ | ||||||
|  | #define MS_LAZYTIME	(1<<25) /* Update the on-disk [acm]times lazily */ | ||||||
|  | 
 | ||||||
|  | /* These sb flags are internal to the kernel */ | ||||||
|  | #define MS_SUBMOUNT     (1<<26) | ||||||
|  | #define MS_NOREMOTELOCK	(1<<27) | ||||||
|  | #define MS_NOSEC	(1<<28) | ||||||
|  | #define MS_BORN		(1<<29) | ||||||
|  | #define MS_ACTIVE	(1<<30) | ||||||
|  | #define MS_NOUSER	(1<<31) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Superblock flags that can be altered by MS_REMOUNT | ||||||
|  |  */ | ||||||
|  | #define MS_RMT_MASK	(MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_I_VERSION|\ | ||||||
|  | 			 MS_LAZYTIME) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Old magic mount flag and mask | ||||||
|  |  */ | ||||||
|  | #define MS_MGC_VAL 0xC0ED0000 | ||||||
|  | #define MS_MGC_MSK 0xffff0000 | ||||||
|  | 
 | ||||||
|  | #endif /* _UAPI_LINUX_MOUNT_H */ | ||||||
|  | @ -22,6 +22,7 @@ | ||||||
| #include <linux/nfs_fs.h> | #include <linux/nfs_fs.h> | ||||||
| #include <linux/nfs_fs_sb.h> | #include <linux/nfs_fs_sb.h> | ||||||
| #include <linux/nfs_mount.h> | #include <linux/nfs_mount.h> | ||||||
|  | #include <uapi/linux/mount.h> | ||||||
| 
 | 
 | ||||||
| #include "do_mounts.h" | #include "do_mounts.h" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -8,6 +8,7 @@ | ||||||
| #include <linux/sched.h> | #include <linux/sched.h> | ||||||
| #include <linux/freezer.h> | #include <linux/freezer.h> | ||||||
| #include <linux/kmod.h> | #include <linux/kmod.h> | ||||||
|  | #include <uapi/linux/mount.h> | ||||||
| 
 | 
 | ||||||
| #include "do_mounts.h" | #include "do_mounts.h" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -26,6 +26,7 @@ | ||||||
| #include <linux/netfilter_ipv4.h> | #include <linux/netfilter_ipv4.h> | ||||||
| #include <linux/netfilter_ipv6.h> | #include <linux/netfilter_ipv6.h> | ||||||
| #include <net/sock.h> | #include <net/sock.h> | ||||||
|  | #include <uapi/linux/mount.h> | ||||||
| 
 | 
 | ||||||
| #include "include/apparmor.h" | #include "include/apparmor.h" | ||||||
| #include "include/apparmorfs.h" | #include "include/apparmorfs.h" | ||||||
|  |  | ||||||
|  | @ -15,6 +15,7 @@ | ||||||
| #include <linux/fs.h> | #include <linux/fs.h> | ||||||
| #include <linux/mount.h> | #include <linux/mount.h> | ||||||
| #include <linux/namei.h> | #include <linux/namei.h> | ||||||
|  | #include <uapi/linux/mount.h> | ||||||
| 
 | 
 | ||||||
| #include "include/apparmor.h" | #include "include/apparmor.h" | ||||||
| #include "include/audit.h" | #include "include/audit.h" | ||||||
|  |  | ||||||
|  | @ -88,6 +88,7 @@ | ||||||
| #include <linux/msg.h> | #include <linux/msg.h> | ||||||
| #include <linux/shm.h> | #include <linux/shm.h> | ||||||
| #include <linux/bpf.h> | #include <linux/bpf.h> | ||||||
|  | #include <uapi/linux/mount.h> | ||||||
| 
 | 
 | ||||||
| #include "avc.h" | #include "avc.h" | ||||||
| #include "objsec.h" | #include "objsec.h" | ||||||
|  |  | ||||||
|  | @ -6,6 +6,7 @@ | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #include <linux/slab.h> | #include <linux/slab.h> | ||||||
|  | #include <uapi/linux/mount.h> | ||||||
| #include "common.h" | #include "common.h" | ||||||
| 
 | 
 | ||||||
| /* String table for special mount operations. */ | /* String table for special mount operations. */ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 David Howells
						David Howells