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