From 6cf1229e1900eb7aa0f16b9e0861e8d1fcb64b52 Mon Sep 17 00:00:00 2001 From: Vasily Averin Date: Mon, 13 Jul 2015 09:47:27 +0300 Subject: [PATCH rh6] fix name_to_handle_at() for empty pathname To: khorenko@virtuozzo.com, vzlin-dev@sw.ru According to the man 2 name_to_handle_at ENOENT means: "pathname is an empty string, but AT_EMPTY_PATH was not specified in flags." name_to_handle_at() was added into 042stab051 OpenVZ kernel and worked corerctly until rebase to RHEL6 kernel 2.6.32-431.20.3.el6 (042stab092), where do_getname() was changed and was stop to return -ENOENT in case of empty pathname. Unfortunately OpenVZ missed this change, was still expect to get ENOENT from do_getname. As result name_to_handle_at() worked incorrectly since 042stab092 kenrels and had return ENOENT if an empty pathname and AT_EMPTY_PATH flags was specified. This patch removes old non-working ENOENT check in getname_flags() and adds missing LOOKUP_EMPTY check for an empty pathname case. https://bugzilla.openvz.org/show_bug.cgi?id=3280 Signed-off-by: Vasily Averin --- fs/namei.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index 637b303..5df00b5 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -169,10 +169,8 @@ getname_flags(const char __user * filename, int flags) recopy: len = do_getname(filename, kname, max); if (len < 0) { - if (len != -ENOENT || !(flags & LOOKUP_EMPTY)) { - err = ERR_PTR(len); - goto error; - } + err = ERR_PTR(len); + goto error; } /* @@ -197,8 +195,10 @@ recopy: } err = ERR_PTR(-ENOENT); - if (unlikely(!len)) - goto error; + if (unlikely(!len)) { + if (!(flags & LOOKUP_EMPTY)) + goto error; + } err = ERR_PTR(-ENAMETOOLONG); if (unlikely(len >= PATH_MAX)) -- 1.9.1