mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-18 22:14:16 +00:00 
			
		
		
		
	Fix VM_MAYEXEC calculation
.. and clean up the file mapping code while at it. No point in having a "if (file)" repeated twice, and generally doing similar checks in two different sections of the same code Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
		
							parent
							
								
									a7a0d86f5a
								
							
						
					
					
						commit
						80c5606c3b
					
				
					 1 changed files with 10 additions and 11 deletions
				
			
		
							
								
								
									
										21
									
								
								mm/mmap.c
									
										
									
									
									
								
							
							
						
						
									
										21
									
								
								mm/mmap.c
									
										
									
									
									
								
							|  | @ -900,17 +900,6 @@ unsigned long do_mmap_pgoff(struct file * file, unsigned long addr, | |||
| 	int accountable = 1; | ||||
| 	unsigned long charged = 0, reqprot = prot; | ||||
| 
 | ||||
| 	if (file) { | ||||
| 		if (is_file_hugepages(file)) | ||||
| 			accountable = 0; | ||||
| 
 | ||||
| 		if (!file->f_op || !file->f_op->mmap) | ||||
| 			return -ENODEV; | ||||
| 
 | ||||
| 		if ((prot & PROT_EXEC) && | ||||
| 		    (file->f_vfsmnt->mnt_flags & MNT_NOEXEC)) | ||||
| 			return -EPERM; | ||||
| 	} | ||||
| 	/*
 | ||||
| 	 * Does the application expect PROT_READ to imply PROT_EXEC? | ||||
| 	 * | ||||
|  | @ -1000,6 +989,16 @@ unsigned long do_mmap_pgoff(struct file * file, unsigned long addr, | |||
| 		case MAP_PRIVATE: | ||||
| 			if (!(file->f_mode & FMODE_READ)) | ||||
| 				return -EACCES; | ||||
| 			if (file->f_vfsmnt->mnt_flags & MNT_NOEXEC) { | ||||
| 				if (vm_flags & VM_EXEC) | ||||
| 					return -EPERM; | ||||
| 				vm_flags &= ~VM_MAYEXEC; | ||||
| 			} | ||||
| 			if (is_file_hugepages(file)) | ||||
| 				accountable = 0; | ||||
| 
 | ||||
| 			if (!file->f_op || !file->f_op->mmap) | ||||
| 				return -ENODEV; | ||||
| 			break; | ||||
| 
 | ||||
| 		default: | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Linus Torvalds
						Linus Torvalds