Received: by 2002:a05:7412:b995:b0:f9:9502:5bb8 with SMTP id it21csp7808953rdb; Thu, 4 Jan 2024 08:19:03 -0800 (PST) X-Google-Smtp-Source: AGHT+IG0mqle9d2M+HWEimaPRNG5JlisVq7zr0evaYhn7Ax6kc35WidaYgOGdLtRSJ5Ec4c7oBPT X-Received: by 2002:a17:90a:fb94:b0:28c:17b5:5228 with SMTP id cp20-20020a17090afb9400b0028c17b55228mr677631pjb.5.1704385142945; Thu, 04 Jan 2024 08:19:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704385142; cv=none; d=google.com; s=arc-20160816; b=HLn1TY8yclDEZk2m6msBjzzF6gr9Mm9DKiWH0p+AxuLZRz/NB9oF/rKO/VUnrXqS3d hMOosP86XseDgyMaJuBUgRU4PqKy5zSILedZABlNTdyOZccF5R9b7IYXVWmKw8esjW3r 90rNMT6l/b+dEqsLyyL3HVyAh/o0FXlD6lRMzVKd5eg8UxuiZR29/J5bEY60+t9z4vMX oX1pOYtDUnbYLeGYZgRXuRKTe3xbLlGbX76+A2E8R15ndszvTOviUBF6YEa3N9bqSAbt B3YDVzbbo9oiXPHPmIUwgC+vj3mUIls/eG/+R3jwwMsEKH4lr1+9TY2LZxnxVhyENFFk 4ENA== 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=ViNn5ei+4Zld82w4601M9mrOjCtIyqpflKJoQCGeeDSFEn0Eo33jxie+h1bqGfn18e urkv//psx0ZXnfoVpVb58PyKBAmypXMNdrvISxZVSy6JXcyNET86jrmDEGKCG/yfhX2U CA9GYxByTWeewCQu3mwCpwD+MFEvV2eddTyYEDMMoAZ8MK3S1ih5cAWLzCpZF3kXCDws 8HZekhLVJv3JKBIoHZyjfN8OkRYuBPH0BFm3lz4cYkiOmywyBtvsB/BehO0izZ9SpGPP 6Znj4sj3OmMKwDqC0J4MgDKcL9/eR43S7tLDZ1bRmrrOTJD/OHzSz4nXsZBXPSSWlhrz yaAA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=exyevQdT; spf=pass (google.com: domain of linux-nfs+bounces-940-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-nfs+bounces-940-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id h1-20020a17090ac38100b0028c99453374si3209193pjt.176.2024.01.04.08.19.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jan 2024 08:19:02 -0800 (PST) Received-SPF: pass (google.com: domain of linux-nfs+bounces-940-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=exyevQdT; spf=pass (google.com: domain of linux-nfs+bounces-940-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-nfs+bounces-940-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 sv.mirrors.kernel.org (Postfix) with ESMTPS id 4D836286E11 for ; Thu, 4 Jan 2024 16:19:01 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B1A6524B25; Thu, 4 Jan 2024 16:18:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="exyevQdT" 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 95AF824B21; Thu, 4 Jan 2024 16:18:57 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4F23AC433C8; Thu, 4 Jan 2024 16:18:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1704385137; bh=IhnX4hHtRzrAnyp6d66bwgBG87Kr2elb7Rz8vNJe5Ow=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=exyevQdTifpikJvVAx8GvRRe0QImDeEHYL0iqFdNph/rfjzvuW4+6JQK8h0r1FeYP Xcfx/ApTKUQhFg/5j8GeB/fywzPFql8kG96SXQMHUIh0R88ybRujkETmQLK225lM1v Cr6CRtGpEHG/ueJjpZ9hV7l0ojz+BiFrjhigfdcWmVXGByAsHK26BKcDI+nwO0n/of duKwpN60a2+OrfTHx+mebjo4tGdLKCX4tFt4ArNO7jRsz3F9WNz9RJ52+LRhE/LOAp 12mmDK9tyMCpKBflZWrh8Ke2UVOyWDw08BRdvxgOgi/P29xdGNegrzVvzY6PJI3bV6 IYY/EP8ITkekg== Subject: [PATCH v3 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 11:18:55 -0500 Message-ID: <170438513526.129184.11255332860133933464.stgit@bazille.1015granger.net> In-Reply-To: <170438430288.129184.6116374966267668617.stgit@bazille.1015granger.net> References: <170438430288.129184.6116374966267668617.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;