]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
vfs: fix return value from do_last()
authorMiklos Szeredi <mszeredi@suse.cz>
Tue, 6 Mar 2012 12:56:34 +0000 (13:56 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 19 Mar 2012 16:02:20 +0000 (09:02 -0700)
commit 7f6c7e62fcc123e6bd9206da99a2163fe3facc31 upstream.

complete_walk() returns either ECHILD or ESTALE.  do_last() turns this into
ECHILD unconditionally.  If not in RCU mode, this error will reach userspace
which is complete nonsense.

Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/namei.c

index 744e942fbf45f7affe63affeaaba6d2ede52008d..b8344d0166ccfca4a2c4548a64e4afa086f33025 100644 (file)
@@ -2139,7 +2139,7 @@ static struct file *do_last(struct nameidata *nd, struct path *path,
                /* sayonara */
                error = complete_walk(nd);
                if (error)
-                       return ERR_PTR(-ECHILD);
+                       return ERR_PTR(error);
 
                error = -ENOTDIR;
                if (nd->flags & LOOKUP_DIRECTORY) {