Message ID | 20220607100840.1686673-2-brauner@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | FAILED: patch "[PATCH] exportfs: support idmapped mounts" failed to apply to 5.15-stable tree | expand |
On Tue, Jun 07, 2022 at 12:08:39PM +0200, Christian Brauner wrote: > 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: <stable@vger.kernel.org> > Cc: <linux-fsdevel@vger.kernel.org> > Tested-by: Giuseppe Scrivano <gscrivan@redhat.com> > Reviewed-by: Amir Goldstein <amir73il@gmail.com> > Reviewed-by: Christoph Hellwig <hch@lst.de> > Signed-off-by: Christian Brauner (Microsoft) <brauner@kernel.org> > Signed-off-by: Miklos Szeredi <mszeredi@redhat.com> > Signed-off-by: Christian Brauner (Microsoft) <brauner@kernel.org> > --- > Hey Greg, > > This was missing a preliminary commit. > My build machines are currently down so I couldn't do a test build but > this should build cleanly. Looks like it applies cleanly, let me apply it and run it through my build systems... thanks, greg k-h
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);