Received: by 2002:a05:7412:d8a:b0:e2:908c:2ebd with SMTP id b10csp2089516rdg; Sun, 15 Oct 2023 10:29:57 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFn7BnlT3Ye14e2GGRrtgmB6X9LVhq5bOkNcvIBxq1H7feXyEY21e1iZPaGeFVANaOx0L8N X-Received: by 2002:a05:6808:210b:b0:3a7:2456:6af6 with SMTP id r11-20020a056808210b00b003a724566af6mr40183084oiw.31.1697390996702; Sun, 15 Oct 2023 10:29:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697390996; cv=none; d=google.com; s=arc-20160816; b=sJ/JEB99CQWb3svI4TD25CxC8NLUgPGeE6SOehOSQMaItq9WuOzjZRKC9dC/lFqsrY ewMfml8DVmJeidtZtmTShWVPYquRzTk3dCu6XjrCQksqveNo92dfEhdpdo1KiYg+BMfi sFSmXV/rS1fitTQRTy5Vi/0pB7gILHNnCg6B1Cnd+RzmU+64D1LRsPGjXTWqlUmw3avs nKpTz9u3INiD5Msdf/JnnxXT57gVcrXTBCApSQtKjUKBmhRSeMQdRqHndgP7dxqf3xoK Oqtrq4CQKn/wplrrptOW2Gp3hYvT+Yq5lVpsaSIweFWL0COB82PII2uLOGHViwp1jE8X o9lw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-disposition:mime-version :message-id:subject:to:from:date:dkim-signature; bh=vk33ABiurXn21cNplHE1J6yGulBfdZZA6vrX/5WfZAs=; fh=Mys3y4MwsHRytUQMpdfGBn3oGRYLcLloxNwkFYMYMmg=; b=ChyMktPKhBsufSBq51jyFxv/PObj9N/lA2ttYfRRyENAftcV95XQCmKEXWl7t4DGN+ jznh440N1CXeIEf1Ze6Mc+KyRbYLkuIJxUDJYLVDgKB3SjCKKvzQJmEBfrYwZvSfVwrv u55kulZQ+Sk2/Wv9udUSmhh32j1I1Vsy2a+diQaRSXdDUjgqyTNIPDKhYYHPeOsj19TG AF7JUisXWqZHv/UeEyd4e5ay92IHMzNbsUyYTdyEC8QZcvEQ05dYgDL6JChWneKGb5vT c9XXK/dGdAsyQY47CcuYhgyUDGQi3dJm1o/8tZQUYFYuTVVoi3PtGNm0McKmtfI0og6L 2ssA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.org.uk header.s=zeniv-20220401 header.b=b+f5J+eV; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zeniv.linux.org.uk Return-Path: Received: from howler.vger.email (howler.vger.email. [23.128.96.34]) by mx.google.com with ESMTPS id oa8-20020a17090b1bc800b0027d535cebb9si4726055pjb.128.2023.10.15.10.29.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 15 Oct 2023 10:29:56 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) client-ip=23.128.96.34; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.org.uk header.s=zeniv-20220401 header.b=b+f5J+eV; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zeniv.linux.org.uk Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id D0F3C8061145; Sun, 15 Oct 2023 10:29:52 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230010AbjJOR3c (ORCPT + 99 others); Sun, 15 Oct 2023 13:29:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34448 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229522AbjJOR3c (ORCPT ); Sun, 15 Oct 2023 13:29:32 -0400 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [IPv6:2a03:a000:7:0:5054:ff:fe1c:15ff]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0754EB7 for ; Sun, 15 Oct 2023 10:29:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Type:MIME-Version: Message-ID:Subject:To:From:Date:Reply-To:Cc:Content-Transfer-Encoding: Content-ID:Content-Description:In-Reply-To:References; bh=vk33ABiurXn21cNplHE1J6yGulBfdZZA6vrX/5WfZAs=; b=b+f5J+eVc52B1dVMY5QBD0S4th CD5EyFkKTu+pnkBp1VtsZYes/keFOvjV9WahtBOXAkdUgsqp7ON3t16uc2Ic8KVg7J1G83bOuEvlV TdOVln3LtcdfMr/XUihKw8VCfIXy7rbd92xXExGF2DvcbjSjSMAc6HQvXdOVcgJpbFN3nC5sDIPGO l+tAA2tLCTVXl1stH2AtciVtN8flwYFGSJll6PifpYdsipZP+UGw7OmX/245TYEa6zbK0QGVVTWZH to17AoaJ23aT28kihJ3Ya99CTkO38zpSO1AUK5noeorQyu0lFOFfszP2+AUkG0BYRDGg2vJ9Qon+D tsVysixw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.96 #2 (Red Hat Linux)) id 1qs4vf-001Vkc-1m for linux-nfs@vger.kernel.org; Sun, 15 Oct 2023 17:29:27 +0000 Date: Sun, 15 Oct 2023 18:29:27 +0100 From: Al Viro To: linux-nfs@vger.kernel.org Subject: [PATCH] nfsd: lock_rename() needs both directories to live on the same fs Message-ID: <20231015172927.GE800259@ZenIV> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Sender: Al Viro X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Sun, 15 Oct 2023 10:29:53 -0700 (PDT) ... checking that after lock_rename() is too late. Incidentally, NFSv2 had no nfserr_xdev... Fixes: aa387d6ce153 "nfsd: fix EXDEV checking in rename" Cc: stable@vger.kernel.org # v3.9+ Reviewed-by: Jeff Layton Signed-off-by: Al Viro --- [in git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git #nfsd-fix; it's an immutable branch, please either pull from it or put that thing into an immutable branch in your tree - there's a lock_rename-related series in the making and I'd rather avoid mixing unrelated nfsd stuff into it ;-/] diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index 48260cf68fde..02f5fcaad03f 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -1788,6 +1788,12 @@ nfsd_rename(struct svc_rqst *rqstp, struct svc_fh *ffhp, char *fname, int flen, if (!flen || isdotent(fname, flen) || !tlen || isdotent(tname, tlen)) goto out; + err = (rqstp->rq_vers == 2) ? nfserr_acces : nfserr_xdev; + if (ffhp->fh_export->ex_path.mnt != tfhp->fh_export->ex_path.mnt) + goto out; + if (ffhp->fh_export->ex_path.dentry != tfhp->fh_export->ex_path.dentry) + goto out; + retry: host_err = fh_want_write(ffhp); if (host_err) { @@ -1823,12 +1829,6 @@ nfsd_rename(struct svc_rqst *rqstp, struct svc_fh *ffhp, char *fname, int flen, if (ndentry == trap) goto out_dput_new; - host_err = -EXDEV; - if (ffhp->fh_export->ex_path.mnt != tfhp->fh_export->ex_path.mnt) - goto out_dput_new; - if (ffhp->fh_export->ex_path.dentry != tfhp->fh_export->ex_path.dentry) - goto out_dput_new; - if ((ndentry->d_sb->s_export_op->flags & EXPORT_OP_CLOSE_BEFORE_UNLINK) && nfsd_has_cached_files(ndentry)) { close_cached = true;