From patchwork Mon Apr 4 10:51:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Brauner X-Patchwork-Id: 556181 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 F2B7EC433EF for ; Mon, 4 Apr 2022 10:53:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1358511AbiDDKzF (ORCPT ); Mon, 4 Apr 2022 06:55:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57774 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1358561AbiDDKzE (ORCPT ); Mon, 4 Apr 2022 06:55:04 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 288BD3CFED; Mon, 4 Apr 2022 03:53:09 -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 dfw.source.kernel.org (Postfix) with ESMTPS id B846B60AE8; Mon, 4 Apr 2022 10:53:08 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id AEA4CC34110; Mon, 4 Apr 2022 10:53:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1649069588; bh=DxTthHQCW6asftQXjQGow73DCTtmUV2NMx0blS7OttM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KO4XTTGUiNiUJPuDvhahZ+xPDpp8AWdRuz9QFPnTkzN166mdCocCUhkJkXuJptv2p qlTiElBVuM9rZuGVpb9//WEcSjjJHR5MuxwGDgXJeo4shmqT+864SrAePB/vDcnuZQ 936yJiXFZktHtS1mQky66QazsPpMNvoSfA+38Ezc5C1TYvUDgaUyvPQco63Vb5gVFm JXzZsG+QFjFHrzQF2pck+r7Eqg7mt9HGIfK6ow0Ui4JSG+4jt9srQ1DT4ccSxhCF6r wh16gjrqsA8sXsHKhjDbKxGzsEwksY/rDHupe9oVW9PHWYGkC+KCsm68zKCC+3M2zZ TbtBBRmqCZ+KA== From: Christian Brauner To: Amir Goldstein , Christoph Hellwig , Miklos Szeredi , Al Viro Cc: Christian Brauner , linux-fsdevel@vger.kernel.org, linux-unionfs@vger.kernel.org, Aleksa Sarai , Giuseppe Scrivano , Rodrigo Campos Catelin , Seth Forshee , Luca Bocassi , Lennart Poettering , =?utf-8?q?St=C3=A9phane_Graber?= , stable@vger.kernel.org Subject: [PATCH v4 02/19] exportfs: support idmapped mounts Date: Mon, 4 Apr 2022 12:51:41 +0200 Message-Id: <20220404105159.1567595-3-brauner@kernel.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220404105159.1567595-1-brauner@kernel.org> References: <20220404105159.1567595-1-brauner@kernel.org> MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1950; h=from:subject; bh=DxTthHQCW6asftQXjQGow73DCTtmUV2NMx0blS7OttM=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMSR5nT30tu6CB7eLT3D0/wUcTAesIq2t5ZjmLwzP3Vof0elt 2cbYUcrCIMbFICumyOLQbhIut5ynYrNRpgbMHFYmkCEMXJwCMJEj6Qz/81t2rvw8d/+Kaa4Jm7a7Xw qwNV3SYbZrW0bXBt6kU1emX2NkOLlL7+XJlus3hRVTFB99nf+xu2ebbvfU3iqPZevOnTy2hRcA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org Make the two locations where exportfs helpers check permission to lookup a given inode idmapped mount aware by switching it to the lookup_one() helper. This is a bugfix for the open_by_handle_at() system call which doesn't take idmapped mounts into account currently. It's not tied to a specific commit so we'll just Cc stable. In addition this is required to support idmapped base layers in overlay. The overlay filesystem uses exportfs to encode and decode file handles for its index=on mount option and when nfs_export=on. Cc: Cc: Tested-by: Giuseppe Scrivano Reviewed-by: Amir Goldstein Reviewed-by: Christoph Hellwig Signed-off-by: Christian Brauner (Microsoft) --- /* v2 */ unchanged /* v3 */ unchanged /* v4 */ unchanged --- fs/exportfs/expfs.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fs/exportfs/expfs.c b/fs/exportfs/expfs.c index 0106eba46d5a..3ef80d000e13 100644 --- a/fs/exportfs/expfs.c +++ b/fs/exportfs/expfs.c @@ -145,7 +145,7 @@ static struct dentry *reconnect_one(struct vfsmount *mnt, if (err) goto out_err; dprintk("%s: found name: %s\n", __func__, nbuf); - tmp = lookup_one_len_unlocked(nbuf, parent, strlen(nbuf)); + tmp = lookup_one_unlocked(mnt_user_ns(mnt), nbuf, parent, strlen(nbuf)); if (IS_ERR(tmp)) { dprintk("%s: lookup failed: %d\n", __func__, PTR_ERR(tmp)); err = PTR_ERR(tmp); @@ -525,7 +525,8 @@ exportfs_decode_fh_raw(struct vfsmount *mnt, struct fid *fid, int fh_len, } inode_lock(target_dir->d_inode); - nresult = lookup_one_len(nbuf, target_dir, strlen(nbuf)); + nresult = lookup_one(mnt_user_ns(mnt), nbuf, + target_dir, strlen(nbuf)); if (!IS_ERR(nresult)) { if (unlikely(nresult->d_inode != result->d_inode)) { dput(nresult);