diff --git a/fs/namei.c b/fs/namei.c index 5a9a6c3094daf1fe7cd6fbc4e95110dd2bd028e0..a4dfac650c3c4af5f38cfe6478c64c779a41b72a 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -1644,13 +1644,16 @@ static int path_lookupat(int dfd, const char *name, err = -ECHILD; } - if (!err) + if (!err) { err = handle_reval_path(nd); + if (err) + path_put(&nd->path); + } if (!err && nd->flags & LOOKUP_DIRECTORY) { if (!nd->inode->i_op->lookup) { path_put(&nd->path); - return -ENOTDIR; + err = -ENOTDIR; } }