Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp1767617pxb; Sat, 23 Jan 2021 05:11:34 -0800 (PST) X-Google-Smtp-Source: ABdhPJw0kF6gywZ/+u2H4We8Pnwl1dwsXfhWs9OlKk9XSbuqhAZal8I9OvOyyuaaNlEq0q3ChWeC X-Received: by 2002:a05:6402:50c6:: with SMTP id h6mr461296edb.117.1611407494280; Sat, 23 Jan 2021 05:11:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611407494; cv=none; d=google.com; s=arc-20160816; b=uaKQbwQX+UNTCVQNcvF3X56Dl0rAjkTT42FS20/f4pBjg+d++YOgt+gE+f6mT2/zbN HVcX3YTzik43eRaethEzIinGxvrI0/mrY9VOBmQeQTNsaw2ozByoQAK8kUr/K/36bsJ2 NT81NLZn39P+UqZFgEkLTodA5bZ8iyLRMhzipQxfKuxx+rVZNs9KprgXpR1LKcK+9C6H Z7Xin26wZH2U9NaU7WOL9DgHNY3P9cnRCZ5Adi0TbB/dLUzZUKAd0Xuoi3aOpEb1akt0 npEKJlXDjHAjKQa976dTa3l4L27Qz81QUx/3GOcscT7qGZpLpedCuevtFbwr1bJx6IjW kqRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date; bh=2x20E49KPAa3ehSbITF36V0LFUv1qKUtmqJv8ztyjXM=; b=KBC1EQw5+nqIb6E8NgfEv50g5AoabadmmHaioc7rTzWwHg1G4MXH0IXTVjymR7txAd eYCf7U2V6DeteapzjGwNGFxLsm5A6Xp+08tLXHd3z81KJ3kvxIf0rYbe9vIMhXb+Xde/ PwWxVUNC++OSzKub0wf1W5oIoh5EaheZs2zi1ltUG6q5MtNj0xTQoASklPsc8S6lAPGY smkzR2nE3cDvnWvRfcAdFZLEwd0oQVAd1U1Z/zWq4btHGLYfdK68eeEFn8q1NUSQs7G0 t+GXXq1XdwVTBb5pI+xQmallBY/okrGKSwBXI6ZXhCvaGWIUiMZprjmDmkvLj5T8Ft0e fNWg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-ext4-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id hh2si4092180ejb.627.2021.01.23.05.11.03; Sat, 23 Jan 2021 05:11:34 -0800 (PST) Received-SPF: pass (google.com: domain of linux-ext4-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-ext4-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725274AbhAWNLB (ORCPT + 99 others); Sat, 23 Jan 2021 08:11:01 -0500 Received: from youngberry.canonical.com ([91.189.89.112]:45691 "EHLO youngberry.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725268AbhAWNK7 (ORCPT ); Sat, 23 Jan 2021 08:10:59 -0500 Received: from ip5f5af0a0.dynamic.kabel-deutschland.de ([95.90.240.160] helo=wittgenstein) by youngberry.canonical.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1l3Ify-0007vJ-RG; Sat, 23 Jan 2021 13:10:03 +0000 Date: Sat, 23 Jan 2021 14:09:58 +0100 From: Christian Brauner To: "J. Bruce Fields" Cc: Alexander Viro , Christoph Hellwig , linux-fsdevel@vger.kernel.org, John Johansen , James Morris , Mimi Zohar , Dmitry Kasatkin , Stephen Smalley , Casey Schaufler , Arnd Bergmann , Andreas Dilger , OGAWA Hirofumi , Geoffrey Thomas , Mrunal Patel , Josh Triplett , Andy Lutomirski , Theodore Tso , Alban Crequy , Tycho Andersen , David Howells , James Bottomley , Seth Forshee , =?utf-8?B?U3TDqXBoYW5l?= Graber , Linus Torvalds , Aleksa Sarai , Lennart Poettering , "Eric W. Biederman" , smbarber@chromium.org, Phil Estes , Serge Hallyn , Kees Cook , Todd Kjos , Paul Moore , Jonathan Corbet , containers@lists.linux-foundation.org, linux-security-module@vger.kernel.org, linux-api@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, linux-integrity@vger.kernel.org, selinux@vger.kernel.org Subject: Re: [PATCH v6 05/39] namei: make permission helpers idmapped mount aware Message-ID: <20210123130958.3t6kvgkl634njpsm@wittgenstein> References: <20210121131959.646623-1-christian.brauner@ubuntu.com> <20210121131959.646623-6-christian.brauner@ubuntu.com> <20210122222632.GB25405@fieldses.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20210122222632.GB25405@fieldses.org> Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org On Fri, Jan 22, 2021 at 05:26:32PM -0500, J. Bruce Fields wrote: > If I NFS-exported an idmapped mount, I think I'd expect idmapped clients > to see the mapped IDs. > > Looks like that means taking the user namespace from the struct > svc_export everwhere, for example: > > On Thu, Jan 21, 2021 at 02:19:24PM +0100, Christian Brauner wrote: > > index 66f2ef67792a..8d90796e236a 100644 > > --- a/fs/nfsd/nfsfh.c > > +++ b/fs/nfsd/nfsfh.c > > @@ -40,7 +40,8 @@ static int nfsd_acceptable(void *expv, struct dentry *dentry) > > /* make sure parents give x permission to user */ > > int err; > > parent = dget_parent(tdentry); > > - err = inode_permission(d_inode(parent), MAY_EXEC); > > + err = inode_permission(&init_user_ns, > > + d_inode(parent), MAY_EXEC); > > err = inode_permission(exp->ex_path.mnt->mnt_userns, > d_inode(parent, MAY_EXEC); Hey Bruce, thanks! Imho, the clean approach for now is to not export idmapped mounts until we have ported that part of nfs similar to what we do for stacking filesystems for now. I've tested and taken this patch into my tree: --- From 7a6a53bca1ecd8db872de1ee81d1a57e1829e525 Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Sat, 23 Jan 2021 12:00:02 +0100 Subject: [PATCH] nfs: do not export idmapped mounts Prevent nfs from exporting idmapped mounts until we have ported it to support exporting idmapped mounts. Cc: Christoph Hellwig Cc: David Howells Cc: "J. Bruce Fields" Cc: Al Viro Cc: linux-fsdevel@vger.kernel.org Signed-off-by: Christian Brauner --- /* v2 */ /* v3 */ /* v4 */ /* v5 */ /* v5 */ patch introduced base-commit: 19c329f6808995b142b3966301f217c831e7cf31 --- fs/nfsd/export.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c index 81e7bb12aca6..e456421f68b4 100644 --- a/fs/nfsd/export.c +++ b/fs/nfsd/export.c @@ -369,8 +369,9 @@ static struct svc_export *svc_export_update(struct svc_export *new, struct svc_export *old); static struct svc_export *svc_export_lookup(struct svc_export *); -static int check_export(struct inode *inode, int *flags, unsigned char *uuid) +static int check_export(struct path *path, int *flags, unsigned char *uuid) { + struct inode *inode = d_inode(path->dentry); /* * We currently export only dirs, regular files, and (for v4 @@ -394,6 +395,7 @@ static int check_export(struct inode *inode, int *flags, unsigned char *uuid) * or an FSID number (so NFSEXP_FSID or ->uuid is needed). * 2: We must be able to find an inode from a filehandle. * This means that s_export_op must be set. + * 3: We must not currently be on an idmapped mount. */ if (!(inode->i_sb->s_type->fs_flags & FS_REQUIRES_DEV) && !(*flags & NFSEXP_FSID) && @@ -408,6 +410,11 @@ static int check_export(struct inode *inode, int *flags, unsigned char *uuid) return -EINVAL; } + if (mnt_user_ns(path->mnt) != &init_user_ns) { + dprintk("exp_export: export of idmapped mounts not yet supported.\n"); + return -EINVAL; + } + if (inode->i_sb->s_export_op->flags & EXPORT_OP_NOSUBTREECHK && !(*flags & NFSEXP_NOSUBTREECHECK)) { dprintk("%s: %s does not support subtree checking!\n", @@ -636,8 +643,7 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen) goto out4; } - err = check_export(d_inode(exp.ex_path.dentry), &exp.ex_flags, - exp.ex_uuid); + err = check_export(&exp.ex_path, &exp.ex_flags, exp.ex_uuid); if (err) goto out4; /* -- 2.30.0