vfs: renumber FMODE_NONOTIFY and add to uniqueness check
Fix clashing values for O_PATH and FMODE_NONOTIFY on sparc. The clashing O_PATH value was added in commit5229645bdc("vfs: add nonconflicting values for O_PATH") but this can't be changed as it is user-visible. FMODE_NONOTIFY is only used internally in the kernel, but it is in the same numbering space as the other O_* flags, as indicated by the comment at the top of include/uapi/asm-generic/fcntl.h (and its use in fs/notify/fanotify/fanotify_user.c). So renumber it to avoid the clash. All of this has happened before (commit12ed2e36c9: "fanotify: FMODE_NONOTIFY and __O_SYNC in sparc conflict"), and all of this will happen again -- so update the uniqueness check in fcntl_init() to include __FMODE_NONOTIFY. Signed-off-by: David Drysdale <drysdale@google.com> Acked-by: David S. Miller <davem@davemloft.net> Acked-by: Jan Kara <jack@suse.cz> Cc: Heinrich Schuchardt <xypron.glpk@gmx.de> Cc: Alexander Viro <viro@zeniv.linux.org.uk> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Stephen Rothwell <sfr@canb.auug.org.au> Cc: Eric Paris <eparis@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
					parent
					
						
							
								9de93e7873
							
						
					
				
			
			
				commit
				
					
						75069f2b5b
					
				
			
		
					 3 changed files with 5 additions and 4 deletions
				
			
		|  | @ -740,14 +740,15 @@ static int __init fcntl_init(void) | ||||||
| 	 * Exceptions: O_NONBLOCK is a two bit define on parisc; O_NDELAY | 	 * Exceptions: O_NONBLOCK is a two bit define on parisc; O_NDELAY | ||||||
| 	 * is defined as O_NONBLOCK on some platforms and not on others. | 	 * is defined as O_NONBLOCK on some platforms and not on others. | ||||||
| 	 */ | 	 */ | ||||||
| 	BUILD_BUG_ON(20 - 1 /* for O_RDONLY being 0 */ != HWEIGHT32( | 	BUILD_BUG_ON(21 - 1 /* for O_RDONLY being 0 */ != HWEIGHT32( | ||||||
| 		O_RDONLY	| O_WRONLY	| O_RDWR	| | 		O_RDONLY	| O_WRONLY	| O_RDWR	| | ||||||
| 		O_CREAT		| O_EXCL	| O_NOCTTY	| | 		O_CREAT		| O_EXCL	| O_NOCTTY	| | ||||||
| 		O_TRUNC		| O_APPEND	| /* O_NONBLOCK	| */ | 		O_TRUNC		| O_APPEND	| /* O_NONBLOCK	| */ | ||||||
| 		__O_SYNC	| O_DSYNC	| FASYNC	| | 		__O_SYNC	| O_DSYNC	| FASYNC	| | ||||||
| 		O_DIRECT	| O_LARGEFILE	| O_DIRECTORY	| | 		O_DIRECT	| O_LARGEFILE	| O_DIRECTORY	| | ||||||
| 		O_NOFOLLOW	| O_NOATIME	| O_CLOEXEC	| | 		O_NOFOLLOW	| O_NOATIME	| O_CLOEXEC	| | ||||||
| 		__FMODE_EXEC	| O_PATH	| __O_TMPFILE | 		__FMODE_EXEC	| O_PATH	| __O_TMPFILE	| | ||||||
|  | 		__FMODE_NONOTIFY | ||||||
| 		)); | 		)); | ||||||
| 
 | 
 | ||||||
| 	fasync_cache = kmem_cache_create("fasync_cache", | 	fasync_cache = kmem_cache_create("fasync_cache", | ||||||
|  |  | ||||||
|  | @ -135,7 +135,7 @@ typedef void (dio_iodone_t)(struct kiocb *iocb, loff_t offset, | ||||||
| #define FMODE_CAN_WRITE         ((__force fmode_t)0x40000) | #define FMODE_CAN_WRITE         ((__force fmode_t)0x40000) | ||||||
| 
 | 
 | ||||||
| /* File was opened by fanotify and shouldn't generate fanotify events */ | /* File was opened by fanotify and shouldn't generate fanotify events */ | ||||||
| #define FMODE_NONOTIFY		((__force fmode_t)0x1000000) | #define FMODE_NONOTIFY		((__force fmode_t)0x4000000) | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Flag for rw_copy_check_uvector and compat_rw_copy_check_uvector |  * Flag for rw_copy_check_uvector and compat_rw_copy_check_uvector | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * FMODE_EXEC is 0x20 |  * FMODE_EXEC is 0x20 | ||||||
|  * FMODE_NONOTIFY is 0x1000000 |  * FMODE_NONOTIFY is 0x4000000 | ||||||
|  * These cannot be used by userspace O_* until internal and external open |  * These cannot be used by userspace O_* until internal and external open | ||||||
|  * flags are split. |  * flags are split. | ||||||
|  * -Eric Paris |  * -Eric Paris | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 David Drysdale
				David Drysdale