| From 7f6c7e62fcc123e6bd9206da99a2163fe3facc31 Mon Sep 17 00:00:00 2001 |
| From: Miklos Szeredi <mszeredi@suse.cz> |
| Date: Tue, 6 Mar 2012 13:56:34 +0100 |
| Subject: vfs: fix return value from do_last() |
| |
| From: Miklos Szeredi <mszeredi@suse.cz> |
| |
| 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 | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/fs/namei.c |
| +++ b/fs/namei.c |
| @@ -2139,7 +2139,7 @@ static struct file *do_last(struct namei |
| /* sayonara */ |
| error = complete_walk(nd); |
| if (error) |
| - return ERR_PTR(-ECHILD); |
| + return ERR_PTR(error); |
| |
| error = -ENOTDIR; |
| if (nd->flags & LOOKUP_DIRECTORY) { |