From patchwork Mon Mar 28 14:16:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 12793652 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 27806C433F5 for ; Mon, 28 Mar 2022 14:16:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242715AbiC1OSV (ORCPT ); Mon, 28 Mar 2022 10:18:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53574 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241390AbiC1OSU (ORCPT ); Mon, 28 Mar 2022 10:18:20 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6C851329B7 for ; Mon, 28 Mar 2022 07:16:39 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 0336BB81120 for ; Mon, 28 Mar 2022 14:16:38 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9BEEBC340EC for ; Mon, 28 Mar 2022 14:16:36 +0000 (UTC) From: Chuck Lever To: linux-nfs@vger.kernel.org Subject: [PATCH 1/2] NFSD: Prevent lock/unlock imbalance in do_nfsd_create() Date: Mon, 28 Mar 2022 10:16:35 -0400 Message-Id: <164847698961.23692.1790666748697443088.stgit@klimt.1015granger.net> X-Mailer: git-send-email 2.35.0 User-Agent: StGit/1.5.dev1+g8516920 MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1282; h=from:subject:message-id; bh=T18xumqUqcDTHTPi4BHNTmgztGMQot9JjnzoeNb6rtE=; b=owEBbQKS/ZANAwAIATNqszNvZn+XAcsmYgBiQcM936FdIeggNg+cbwIULrdxwSyKorRFXDLAchHu OBE7NoGJAjMEAAEIAB0WIQQosuWwEobfJDzyPv4zarMzb2Z/lwUCYkHDPQAKCRAzarMzb2Z/l5+0EA C02FNuN4Z5lBmdakO2MlsQcx8quHwNCLhRtHE6wgwcpi6RkcVPFQGIU3wHm/9CQQPhkfLhYOPTPw3+ 0qwV39dy0MxPp44MSyJ3HpaX0fE+lIzqWq/QER0nf7+f7E2ck0Pu+/pRn62bumf+J+7Eq2051B2bTI pzRZtXycsDG6/Zr6v8oeN6mSgnLsGjXcxp4cQS0OZ4PzVwgHoRrOM77zPp9mHY69WU39ILGwyHHvzB Gw+yOLndfWOdd/k5EncbZaJ2kHn02w+DKi8cLkk2Cq24o/uxUmugYocv5FBMGb0lMhsIddHjH4zcCd OmvgtI0k2+NYAD4+JHDvlIq8a/kS/HwvEZFVE9E/bYy0o9K83eheVqv0qn9S/5DwJWDnaN/+AVEtoS JrTnxGqBYGuPARth63Gp6fiycLoVFr6zyvJegfET7KrJKwINUNKQFqd6V8hgprJt32o/XO6iw0myWV W/7jhdsjc3uztQo8C2vsdfgmkbZzdoM3TfPxDDNQSTDbSHq/xDnKfaXhuMuHvG6Wy7M6H1TMhuQuBn z6Qu6yiLcHqgXNkXgqPkpynMPrFsu/UwYDzj9PUPsqaLJf3le3JUAhvFEsuj7ZDXdBjeCtQwEP7Jtu x4iDv9Xtg3hWcOJb6Kuzh4jbuhu5kN4d2X09zMJ0ypVf9KkD6/+sxAuViXKA== X-Developer-Key: i=chuck.lever@oracle.com; a=openpgp; fpr=28B2E5B01286DF243CF23EFE336AB3336F667F97 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org The "out" label invokes fh_unlock() and fh_drop_write(). However, at the top of do_nfsd_create(), we haven't yet invoked fh_want_write() or fh_lock_nested(). The "!flen" check is unnecessary because lookup_one_common() already does that check. See commit 12391d07230e ("nfsd: remove redundant zero-length check from create") Cc: Signed-off-by: Chuck Lever --- fs/nfsd/vfs.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index 166eb0ba3e71..f54da591a5bf 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -1389,24 +1389,20 @@ do_nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp, int host_err; __u32 v_mtime=0, v_atime=0; - err = nfserr_perm; - if (!flen) - goto out; - err = nfserr_exist; if (isdotent(fname, flen)) - goto out; + return nfserr_exist; if (!(iap->ia_valid & ATTR_MODE)) iap->ia_mode = 0; err = fh_verify(rqstp, fhp, S_IFDIR, NFSD_MAY_EXEC); if (err) - goto out; + return err; dentry = fhp->fh_dentry; dirp = d_inode(dentry); host_err = fh_want_write(fhp); if (host_err) - goto out_nfserr; + return nfserrno(host_err); fh_lock_nested(fhp, I_MUTEX_PARENT); From patchwork Mon Mar 28 14:16:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 12793653 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 115E1C433EF for ; Mon, 28 Mar 2022 14:16:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243730AbiC1OSa (ORCPT ); Mon, 28 Mar 2022 10:18:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54136 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241390AbiC1OS0 (ORCPT ); Mon, 28 Mar 2022 10:18:26 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0818B2C642 for ; Mon, 28 Mar 2022 07:16:45 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 95417B81120 for ; Mon, 28 Mar 2022 14:16:44 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4442CC34100 for ; Mon, 28 Mar 2022 14:16:43 +0000 (UTC) From: Chuck Lever To: linux-nfs@vger.kernel.org Subject: [PATCH 2/2] NFSD: Fix EXCLUSIVE paths in do_nfsd_create() Date: Mon, 28 Mar 2022 10:16:42 -0400 Message-Id: <164847700195.23692.9618617591917178500.stgit@klimt.1015granger.net> X-Mailer: git-send-email 2.35.0 In-Reply-To: <164847698961.23692.1790666748697443088.stgit@klimt.1015granger.net> References: <164847698961.23692.1790666748697443088.stgit@klimt.1015granger.net> User-Agent: StGit/1.5.dev1+g8516920 MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=911; h=from:subject:message-id; bh=zeAfJl8tHEzXr78jToMWRW7kgIaVIf3C1I9b48KawFA=; b=owEBbQKS/ZANAwAIATNqszNvZn+XAcsmYgBiQcNKdrQLSUvALd2nmPZmUJBjv0O2GNc3R5DGTYhM 7/KvBbWJAjMEAAEIAB0WIQQosuWwEobfJDzyPv4zarMzb2Z/lwUCYkHDSgAKCRAzarMzb2Z/l1tmEA CeMFIXlZGdYhrH33QXfWXgPCKJSNC+wM5ZwTN6E3dBh8IRmNOK9YbDVREZt5DenurOJAgbQSZDfgIo 3I5F78z1AcTyW1Zrkx+cjHxjmAPFZ8BNAVWm5jKm/WY+3aW01KCexo4basMQDiwb4p3RCChHQztacD EWacUPDglklFcP5RfDnQ94+idYOOt8zkkBDdePPNYezaLmqtAsFV5HTZm84Gkr34MhtUntRZ1VvDuG Hr575DNt3PglzoUqdOgMRkOOtStV3+fcfy/GuUwG2KIroKsy3RzCHkI/WSut1kXEFVsgY9J5f24qT3 oqgsnRczI1KceNYv5jJobf1ia+A4l/FVowPNtvIlpDGhFC3BkFgCSJFuaBXdWGorLKFtOgXxP4IgMG v1AiXCfCVUINzlvVtF4gDRWPsIgIUlZQFRtpRT3GKYKO14cez4CMKmsLyIhI/uAD32x/CdbhE/ggZ7 6HxeeevwYQz0YXYBreA516vVeA2888XIMl1gPoQXF1tw7BWGd3YCmsboklkruoBHN8Ue98l8WF9HXD Iksj3yFlw9I3Au/zhlSP8ThkhQjscR8ev3wYu/vv69wQbp0JqtWwvKXF8NFLo8JjU9Vfx17pW5YGRB sE0FyGiy9jVW5I+EeWQQHlPCvQqoGA1SpuXorOjZibCVoSeHPrld1Mo3HM0g== X-Developer-Key: i=chuck.lever@oracle.com; a=openpgp; fpr=28B2E5B01286DF243CF23EFE336AB3336F667F97 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org The "out" label already invokes fh_drop_write(). Fixes: 4a55c1017b8d ("nfsd: Push mnt_want_write() outside of i_mutex") Signed-off-by: Chuck Lever --- fs/nfsd/vfs.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index f54da591a5bf..9dee15431175 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -1480,7 +1480,6 @@ do_nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp, case NFS3_CREATE_GUARDED: err = nfserr_exist; } - fh_drop_write(fhp); goto out; } @@ -1488,10 +1487,8 @@ do_nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp, iap->ia_mode &= ~current_umask(); host_err = vfs_create(&init_user_ns, dirp, dchild, iap->ia_mode, true); - if (host_err < 0) { - fh_drop_write(fhp); + if (host_err < 0) goto out_nfserr; - } if (created) *created = true;