mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
path_openat: clean ELOOP handling a bit
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
f374ed5fa8
commit
40b39136f0
1 changed files with 6 additions and 8 deletions
14
fs/namei.c
14
fs/namei.c
|
@ -2320,11 +2320,12 @@ static struct file *path_openat(int dfd, const char *pathname,
|
|||
struct path link = path;
|
||||
struct inode *linki = link.dentry->d_inode;
|
||||
void *cookie;
|
||||
error = -ELOOP;
|
||||
if (!(nd.flags & LOOKUP_FOLLOW))
|
||||
goto exit_dput;
|
||||
if (count++ == 32)
|
||||
goto exit_dput;
|
||||
if (!(nd.flags & LOOKUP_FOLLOW) || count++ == 32) {
|
||||
path_put_conditional(&path, &nd);
|
||||
path_put(&nd.path);
|
||||
filp = ERR_PTR(-ELOOP);
|
||||
break;
|
||||
}
|
||||
/*
|
||||
* This is subtle. Instead of calling do_follow_link() we do
|
||||
* the thing by hands. The reason is that this way we have zero
|
||||
|
@ -2355,9 +2356,6 @@ static struct file *path_openat(int dfd, const char *pathname,
|
|||
release_open_intent(&nd);
|
||||
return filp;
|
||||
|
||||
exit_dput:
|
||||
path_put_conditional(&path, &nd);
|
||||
path_put(&nd.path);
|
||||
out_filp:
|
||||
filp = ERR_PTR(error);
|
||||
goto out;
|
||||
|
|
Loading…
Reference in a new issue