]> git.baikalelectronics.ru Git - kernel.git/commit
fs: fix acl translation
authorChristian Brauner <brauner@kernel.org>
Tue, 19 Apr 2022 13:14:23 +0000 (15:14 +0200)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 19 Apr 2022 17:19:02 +0000 (10:19 -0700)
commit2bfa85a1aecd2a90d584e39168951e9fafe92331
treec8016d1a47fbb3ccba5d8dfd20324ab021a8c576
parent0e63df2d0d54b39e7363398ea63d214be3dfe228
fs: fix acl translation

Last cycle we extended the idmapped mounts infrastructure to support
idmapped mounts of idmapped filesystems (No such filesystem yet exist.).
Since then, the meaning of an idmapped mount is a mount whose idmapping
is different from the filesystems idmapping.

While doing that work we missed to adapt the acl translation helpers.
They still assume that checking for the identity mapping is enough.  But
they need to use the no_idmapping() helper instead.

Note, POSIX ACLs are always translated right at the userspace-kernel
boundary using the caller's current idmapping and the initial idmapping.
The order depends on whether we're coming from or going to userspace.
The filesystem's idmapping doesn't matter at the border.

Consequently, if a non-idmapped mount is passed we need to make sure to
always pass the initial idmapping as the mount's idmapping and not the
filesystem idmapping.  Since it's irrelevant here it would yield invalid
ids and prevent setting acls for filesystems that are mountable in a
userns and support posix acls (tmpfs and fuse).

I verified the regression reported in [1] and verified that this patch
fixes it.  A regression test will be added to xfstests in parallel.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=215849
Fixes: 52ca4e47e618 ("fs: support mapped mounts of mapped filesystems")
Cc: Seth Forshee <sforshee@digitalocean.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: <stable@vger.kernel.org> # 5.17
Cc: <regressions@lists.linux.dev>
Signed-off-by: Christian Brauner (Microsoft) <brauner@kernel.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/posix_acl.c
fs/xattr.c
include/linux/posix_acl_xattr.h