Received: by 2002:a05:7412:b995:b0:f9:9502:5bb8 with SMTP id it21csp7947017rdb; Thu, 4 Jan 2024 12:55:51 -0800 (PST) X-Google-Smtp-Source: AGHT+IGqi3LsKbrJW+pVULNxB647MBKsUEd6rfwMNvMwVrPpCjyeMC/IMKeop7PpujxoyVY9J86R X-Received: by 2002:a17:902:bb10:b0:1d3:e8b1:c2cf with SMTP id im16-20020a170902bb1000b001d3e8b1c2cfmr1040270plb.116.1704401751542; Thu, 04 Jan 2024 12:55:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704401751; cv=none; d=google.com; s=arc-20160816; b=qQ4M3/spyjbxxHX3WGG3bNN3VddqBBxp2C8dexAmTzT+LSS6ebwPhKAnPrV19S+rr5 OhJPBPyOVgkWg2jNM+TVqYOY2fQYkDrxdyTPx7CYMkVW6Z/njbkz1yU0UAvZCRjvTQUu nPcBQS3Rk66Eqx9KcHJvmT/CXK6zRNaStjM2uQaCovSB4HXnIQWZk/UPgau0xIFi558y 7c/Rmibl6xFj7X1rSuTXPLOt1OeVqwrBRzG/6U0pf8iFBpd0F1ioMWjR9W/9ugnFpFUQ szOzJpsnvnyt4HyCkjEzlNukRmrMRSqL/gcWauyi8mWi02ZE8h9q/lBZVkFlUvHvtj1s Nt3Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:user-agent:references:in-reply-to :message-id:date:cc:to:from:subject:dkim-signature; bh=CPR0PBbyWGMbqpDgXUJcLUhDGEPDTKC5VnJ+KnN0FQM=; fh=BnHOaJ5Y/F0Gld3qwFSHSY+pG1ABTeDGkzW0J3bQbKc=; b=sYWA89C2gk9euyzLGHAy5kP/sEv2nfQJuSG6tz7uQk2gxjU+QnHrXSE0qi9CS2ifw/ G673m7BeFtqr0bD3WOM2wUVOrKaEHrjdWUuQVV02dmt1xZiN5cEQwvoilRZ6lxIcB2m6 xoJOZRjKnNHw92cuxTDK4rKs3AwyGhFQMfMbKjP0eluykRtRBtY2BtBrUCcApDwgPQy+ lbziHW+OKvJHBaX8ehbF+c55OxAejtypSzwJiC9HS+iBzHgrKL3rxgAwbHpsODqmRR9l LQ7roCEj4w3O8nAdDjXkTaHAhsk9hFfLyiEmH+N3fADgjQlDBXJv7w1uNiYp+ZXY11G0 PlQg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=ayZbPGPX; spf=pass (google.com: domain of linux-nfs+bounces-948-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-nfs+bounces-948-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id k2-20020a170902760200b001d3535e36d0si70781pll.263.2024.01.04.12.55.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jan 2024 12:55:51 -0800 (PST) Received-SPF: pass (google.com: domain of linux-nfs+bounces-948-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=ayZbPGPX; spf=pass (google.com: domain of linux-nfs+bounces-948-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-nfs+bounces-948-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 1D84CB24C3B for ; Thu, 4 Jan 2024 20:55:39 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 4319C28E0E; Thu, 4 Jan 2024 20:55:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ayZbPGPX" X-Original-To: linux-nfs@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2365C28E0D; Thu, 4 Jan 2024 20:55:28 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E415CC433C7; Thu, 4 Jan 2024 20:55:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1704401728; bh=IhnX4hHtRzrAnyp6d66bwgBG87Kr2elb7Rz8vNJe5Ow=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=ayZbPGPXvWqfwtKSX6X6zZI6EM26dV4fn+554cr4go09tYn7hraciFC2IEqAeHdnt PhOVm3pZa/454HgW27ta0+Cm80OymPFAvCKIU67zPJO4OeAgwNfx7b1xgKaQj/48v2 VA49/FxsiLlkvEOWcBKiy1MIX3+OkAim38jhMHb6oPw94H86P1VEEpIwk0weE1UwWS FLYTWtZwAxfPO6T5Dhg3FZ9vChnYvA02tSmpk26GUflJs0VUfLitI21hhC+zATw/20 3DWiL+Ik52X+Cwywso/wzSK2Yrmg3Tkaqu5AUSmKnFye9PTOw2S+WAOFz2NdgNuBFf laREqoye1Ld7A== Subject: [PATCH v4 1/2] exportfs: fix the fallback implementation of the get_name export operation From: Chuck Lever To: jlayton@redhat.com, amir73il@gmail.com Cc: Trond Myklebust , Jeff Layton , Chuck Lever , linux-fsdevel@vger.kernel.org, linux-nfs@vger.kernel.org, trondmy@hammerspace.com, viro@zeniv.linux.org.uk, brauner@kernel.org Date: Thu, 04 Jan 2024 15:55:26 -0500 Message-ID: <170440172682.204613.14380981758225537964.stgit@bazille.1015granger.net> In-Reply-To: <170440153940.204613.6839922871340228115.stgit@bazille.1015granger.net> References: <170440153940.204613.6839922871340228115.stgit@bazille.1015granger.net> User-Agent: StGit/1.5 Precedence: bulk X-Mailing-List: linux-nfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit From: Trond Myklebust The fallback implementation for the get_name export operation uses readdir() to try to match the inode number to a filename. That filename is then used together with lookup_one() to produce a dentry. A problem arises when we match the '.' or '..' entries, since that causes lookup_one() to fail. This has sometimes been seen to occur for filesystems that violate POSIX requirements around uniqueness of inode numbers, something that is common for snapshot directories. This patch just ensures that we skip '.' and '..' rather than allowing a match. Signed-off-by: Trond Myklebust Reviewed-by: Jeff Layton Acked-by: Amir Goldstein Link: https://lore.kernel.org/linux-nfs/CAOQ4uxiOZobN76OKB-VBNXWeFKVwLW_eK5QtthGyYzWU9mjb7Q@mail.gmail.com/ Signed-off-by: Chuck Lever --- fs/exportfs/expfs.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/exportfs/expfs.c b/fs/exportfs/expfs.c index 3ae0154c5680..84af58eaf2ca 100644 --- a/fs/exportfs/expfs.c +++ b/fs/exportfs/expfs.c @@ -255,7 +255,9 @@ static bool filldir_one(struct dir_context *ctx, const char *name, int len, container_of(ctx, struct getdents_callback, ctx); buf->sequence++; - if (buf->ino == ino && len <= NAME_MAX) { + /* Ignore the '.' and '..' entries */ + if ((len > 2 || name[0] != '.' || (len == 2 && name[1] != '.')) && + buf->ino == ino && len <= NAME_MAX) { memcpy(buf->name, name, len); buf->name[len] = '\0'; buf->found = 1;