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

Commit 159b0956 authored by Al Viro's avatar Al Viro
Browse files

make sure that fchdir() won't accept referral points, etc.



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 85128b2b
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -459,20 +459,17 @@ SYSCALL_DEFINE1(chdir, const char __user *, filename)
SYSCALL_DEFINE1(fchdir, unsigned int, fd)
{
	struct fd f = fdget_raw(fd);
	struct inode *inode;
	int error = -EBADF;
	int error;

	error = -EBADF;
	if (!f.file)
		goto out;

	inode = file_inode(f.file);

	error = -ENOTDIR;
	if (!S_ISDIR(inode->i_mode))
	if (!d_can_lookup(f.file->f_path.dentry))
		goto out_putf;

	error = inode_permission(inode, MAY_EXEC | MAY_CHDIR);
	error = inode_permission(file_inode(f.file), MAY_EXEC | MAY_CHDIR);
	if (!error)
		set_fs_pwd(current->fs, &f.file->f_path);
out_putf: