diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2015-04-22 18:27:43 +0300 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2015-05-11 05:18:30 +0300 |
commit | f488443d1dc50454acd549ddd856421e8f961f98 (patch) | |
tree | 18947387d8ff7d64985ddcd09adcfb2a2a61b24f /fs | |
parent | 34b128f31c028a28887c6659e90620727a319b16 (diff) | |
download | linux-f488443d1dc50454acd549ddd856421e8f961f98.tar.xz |
namei: take O_NOFOLLOW treatment into do_last()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/namei.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/fs/namei.c b/fs/namei.c index a77f9ca2c3e7..4c1a8bf917e4 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -3059,6 +3059,11 @@ finish_lookup: } } BUG_ON(inode != path->dentry->d_inode); + if (!(nd->flags & LOOKUP_FOLLOW)) { + path_put_conditional(path, nd); + path_put(&nd->path); + return -ELOOP; + } return 1; } @@ -3243,12 +3248,6 @@ static struct file *path_openat(int dfd, struct filename *pathname, while (unlikely(error > 0)) { /* trailing symlink */ struct path link = path; void *cookie; - if (!(nd->flags & LOOKUP_FOLLOW)) { - path_put_conditional(&path, nd); - path_put(&nd->path); - error = -ELOOP; - break; - } error = may_follow_link(&link, nd); if (unlikely(error)) break; |