From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756892AbcJMT73 (ORCPT ); Thu, 13 Oct 2016 15:59:29 -0400 Received: from smtp-fw-2101.amazon.com ([72.21.196.25]:36594 "EHLO smtp-fw-2101.amazon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751981AbcJMT7U (ORCPT ); Thu, 13 Oct 2016 15:59:20 -0400 X-IronPort-AV: E=Sophos;i="5.31,489,1473120000"; d="scan'208";a="617688875" From: Vineeth Remanan Pillai To: viro@zeniv.linux.org.uk, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Vineeth Remanan Pillai , kamatam@amazon.com, aliguori@amazon.com Subject: [PATCH] namei: revert old behaviour for filename_lookup with LOOKUP_PARENT flag Date: Thu, 13 Oct 2016 19:58:51 +0000 Message-Id: <1476388731-24053-1-git-send-email-vineethp@amazon.com> X-Mailer: git-send-email 2.1.2.AMZN Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org filename_lookup used to return success for non-existing file when called with LOOKUP_PARENT flag. This behaviour was changed with commit 8bcb77fabd7c ("namei: split off filename_lookupat() with LOOKUP_PARENT") The above patch split parent lookup functionality to a different function filename_parentat and changed all calls to filename_lookup(LOOKUP_PARENT) to the new function filename_parentat. But functions like kern_path which passed the flags directly to filename_lookup regressed due to this. This patch aims to fix the regressed behaviour by calling filename_parentat from filename_lookup if the flags contain LOOKUP_PARENT. Signed-off-by: Vineeth Remanan Pillai --- fs/namei.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/fs/namei.c b/fs/namei.c index adb0414..e16ab09 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -2292,6 +2292,21 @@ static int filename_lookup(int dfd, struct filename *name, unsigned flags, { int retval; struct nameidata nd; + + if (flags & LOOKUP_PARENT) { + struct qstr last; + struct filename *filename; + int type; + + filename = filename_parentat(dfd, name, flags ^ LOOKUP_PARENT, + path, &last, &type); + if (IS_ERR(filename)) + return PTR_ERR(filename); + + putname(filename); + return 0; + } + if (IS_ERR(name)) return PTR_ERR(name); if (unlikely(root)) { -- 2.1.2.AMZN