Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 332a2e12 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

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: default avatarольга крыжановская <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: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent cd6407fe
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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;
}