Re: [PATCH 1/2] src/vfs: probe O_TMPFILE support on the base mount in the idmapped tests
Amir Goldstein <[email protected]> Mon, 15 Jun 2026 19:53:22 +0200
| Newsgroups | org.kernel.vger.linux-unionfs,org.kernel.vger.fstests,org.kernel.vger.linux-fsdevel |
|---|---|
| Message-ID | <CAOQ4uxiG22xqx_C+539hbH5v4NHdALWBn9khpomtVxvQ0fcfFg@mail.gmail.com> |
On Mon, Jun 15, 2026 at 5:33 PM Christian Brauner <[email protected]> wrote: > > openat_tmpfile_supported() in the idmapped mount tests probes O_TMPFILE > on the idmapped mount (open_tree_fd) as the test's fsuid -- but that > fsuid is not mapped by the idmapped mount under test, so it really asks > "can this unmapped caller create a tmpfile through this idmap?" instead > of "does the filesystem support O_TMPFILE?". > > On overlayfs this is a false negative: the backing tmpfile ends up owned > by an unmapped id, overlayfs opens it with O_NOATIME and may_open() > returns -EPERM, so the tmpfile sub-tests are wrongly skipped. > > O_TMPFILE support is a property of the filesystem, not of the idmapped > mount or the caller's mapping. Probe info->t_dir1_fd, the base mount > that the caller owns, exactly as the non-idmapped setgid tests already > do. The probe then succeeds on every filesystem and the tmpfile > sub-tests run as the mapped fsuid. > > Signed-off-by: Christian Brauner (Amutable) <[email protected]> Reviewed-by: Amir Goldstein <[email protected]> > --- > src/vfs/idmapped-mounts.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/src/vfs/idmapped-mounts.c b/src/vfs/idmapped-mounts.c > index ed9992f9..8f8441c9 100644 > --- a/src/vfs/idmapped-mounts.c > +++ b/src/vfs/idmapped-mounts.c > @@ -3838,7 +3838,7 @@ int tcore_setgid_create_idmapped(const struct vfstest_info *info) > goto out; > } > > - supported = openat_tmpfile_supported(open_tree_fd); > + supported = openat_tmpfile_supported(info->t_dir1_fd); > > pid = fork(); > if (pid < 0) { > @@ -4014,7 +4014,7 @@ int tcore_setgid_create_idmapped_in_userns(const struct vfstest_info *info) > goto out; > } > > - supported = openat_tmpfile_supported(open_tree_fd); > + supported = openat_tmpfile_supported(info->t_dir1_fd); > > pid = fork(); > if (pid < 0) { > @@ -7733,7 +7733,7 @@ static int setgid_create_umask_idmapped(const struct vfstest_info *info) > goto out; > } > > - supported = openat_tmpfile_supported(open_tree_fd); > + supported = openat_tmpfile_supported(info->t_dir1_fd); > > pid = fork(); > if (pid < 0) { > @@ -7947,7 +7947,7 @@ static int setgid_create_umask_idmapped_in_userns(const struct vfstest_info *inf > goto out; > } > > - supported = openat_tmpfile_supported(open_tree_fd); > + supported = openat_tmpfile_supported(info->t_dir1_fd); > > /* > * Below we verify that setgid inheritance for a newly created file or > @@ -8181,7 +8181,7 @@ static int setgid_create_acl_idmapped(const struct vfstest_info *info) > goto out; > } > > - supported = openat_tmpfile_supported(open_tree_fd); > + supported = openat_tmpfile_supported(info->t_dir1_fd); > > pid = fork(); > if (pid < 0) { > @@ -8536,7 +8536,7 @@ static int setgid_create_acl_idmapped_in_userns(const struct vfstest_info *info) > goto out; > } > > - supported = openat_tmpfile_supported(open_tree_fd); > + supported = openat_tmpfile_supported(info->t_dir1_fd); > > /* > * Below we verify that setgid inheritance for a newly created file or > > -- > 2.47.3 >