forked from mirrors/linux
		
	vfs: make O_PATH file descriptors usable for 'fchdir()'
We already use them for openat() and friends, but fchdir() also wants to be able to use O_PATH file descriptors. This should make it comparable to the O_SEARCH of Solaris. In particular, O_PATH allows you to access (not-quite-open) a directory you don't have read persmission to, only execute permission. Noticed during development of multithread support for ksh93. Reported-by: ольга крыжановская <olga.kryzhanovska@gmail.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: stable@kernel.org # O_PATH introduced in 3.0+ Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									cd6407fe22
								
							
						
					
					
						commit
						332a2e1244
					
				
					 1 changed files with 3 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -397,10 +397,10 @@ SYSCALL_DEFINE1(fchdir, unsigned int, fd)
 | 
			
		|||
{
 | 
			
		||||
	struct file *file;
 | 
			
		||||
	struct inode *inode;
 | 
			
		||||
	int error;
 | 
			
		||||
	int error, fput_needed;
 | 
			
		||||
 | 
			
		||||
	error = -EBADF;
 | 
			
		||||
	file = fget(fd);
 | 
			
		||||
	file = fget_raw_light(fd, &fput_needed);
 | 
			
		||||
	if (!file)
 | 
			
		||||
		goto out;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -414,7 +414,7 @@ SYSCALL_DEFINE1(fchdir, unsigned int, fd)
 | 
			
		|||
	if (!error)
 | 
			
		||||
		set_fs_pwd(current->fs, &file->f_path);
 | 
			
		||||
out_putf:
 | 
			
		||||
	fput(file);
 | 
			
		||||
	fput_light(file, fput_needed);
 | 
			
		||||
out:
 | 
			
		||||
	return error;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue