Re: [Bugme-new] [Bug 15909] New: open("a/", O_NOFOLLOW) fails with ELOOP if "a" is a symbolic link to a directory.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 11 May 2010, Jan Kara wrote:
> >From 2d4a9e9cca7c4f147aa29256ee25de593bb41540 Mon Sep 17 00:00:00 2001
> From: Jan Kara <jack@xxxxxxx>
> Date: Tue, 11 May 2010 16:34:25 +0200
> Subject: [PATCH] vfs: Fix O_NOFOLLOW behavior for paths with trailing slashes
> 
> According to specification
> mkdir d; ln -s d a; open("a/", O_NOFOLLOW | O_RDONLY)
> should return success but currently it did return ELOOP. Fix the code to ignore
> O_NOFOLLOW in case the provided path has trailing slashes. This is a regression
> caused by path lookup cleanup patch series.
> 
> CC: stable@xxxxxxxxxx
> Signed-off-by: Jan Kara <jack@xxxxxxx>

Acked-by: Miklos Szeredi <mszeredi@xxxxxxx>

> ---
>  fs/namei.c |    6 ++++--
>  1 files changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/namei.c b/fs/namei.c
> index a7dce91..16df727 100644
> --- a/fs/namei.c
> +++ b/fs/namei.c
> @@ -1641,7 +1641,7 @@ static struct file *do_last(struct nameidata *nd, struct path *path,
>  	if (nd->last.name[nd->last.len]) {
>  		if (open_flag & O_CREAT)
>  			goto exit;
> -		nd->flags |= LOOKUP_DIRECTORY;
> +		nd->flags |= LOOKUP_DIRECTORY | LOOKUP_FOLLOW;
>  	}
>  
>  	/* just plain open? */
> @@ -1830,6 +1830,8 @@ reval:
>  	}
>  	if (open_flag & O_DIRECTORY)
>  		nd.flags |= LOOKUP_DIRECTORY;
> +	if (!(open_flag & O_NOFOLLOW))
> +		nd.flags |= LOOKUP_FOLLOW;
>  	filp = do_last(&nd, &path, open_flag, acc_mode, mode, pathname);
>  	while (unlikely(!filp)) { /* trailing symlink */
>  		struct path holder;
> @@ -1837,7 +1839,7 @@ reval:
>  		void *cookie;
>  		error = -ELOOP;
>  		/* S_ISDIR part is a temporary automount kludge */
> -		if ((open_flag & O_NOFOLLOW) && !S_ISDIR(inode->i_mode))
> +		if (!(nd.flags & LOOKUP_FOLLOW) && !S_ISDIR(inode->i_mode))
>  			goto exit_dput;
>  		if (count++ == 32)
>  			goto exit_dput;
> -- 
> 1.6.4.2
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux