diff options
| author | Mark Brown <broonie@kernel.org> | 2026-11-13 13:03:45 +0000 |
|---|---|---|
| committer | Mark Brown <broonie@kernel.org> | 2026-11-13 13:03:45 +0000 |
| commit | 48d7d1c219806ad354744647c33ce35a7cc15bf4 (patch) | |
| tree | 86d53cac4a54c2f9f0bc6c643f0e608826f5069c /tools | |
| parent | e896801285ee3cc166792c6e79a3af1ef5be522c (diff) | |
| parent | 748739f3171ed1c44a30a98b0e0341b1a8d62d31 (diff) | |
| download | linux-next-fs-current.tar.gz linux-next-fs-current.zip | |
Merge branch 'ovl-fixes' of https://git.kernel.org/pub/scm/linux/kernel/git/overlayfs/vfs.gitfs-current
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/testing/selftests/filesystems/overlayfs/idmapped_mounts.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/tools/testing/selftests/filesystems/overlayfs/idmapped_mounts.c b/tools/testing/selftests/filesystems/overlayfs/idmapped_mounts.c index 44a75839f4ed..5df42cf3e688 100644 --- a/tools/testing/selftests/filesystems/overlayfs/idmapped_mounts.c +++ b/tools/testing/selftests/filesystems/overlayfs/idmapped_mounts.c @@ -498,4 +498,49 @@ TEST_F(idmapped_overlay, nfs_export_handles) EXPECT_EQ(close(ovl), 0); } +/* With index=on, same-superblock lower layers must not use different idmaps. */ +TEST_F(idmapped_overlay, reject_same_sb_mixed_idmaps) +{ + char lower1[PATH_MAX], lower2[PATH_MAX]; + char upper[PATH_MAX], work[PATH_MAX]; + int fd_lower1, fd_lower2, fsfd; + + if (!ovl_supported()) + SKIP(return, "overlayfs not supported"); + + snprintf(lower1, sizeof(lower1), "%s/l", self->base); + snprintf(lower2, sizeof(lower2), "%s/l2", self->base); + snprintf(upper, sizeof(upper), "%s/u", self->base); + snprintf(work, sizeof(work), "%s/w", self->base); + ASSERT_EQ(mkdir(lower2, 0755), 0); + ASSERT_EQ(chown(lower2, ID_HOST, ID_HOST), 0); + + fd_lower1 = idmapped_layer_fd(lower1, ID_HOST, ID_NS, ID_RANGE); + ASSERT_GE(fd_lower1, 0); + fd_lower2 = sys_open_tree(AT_FDCWD, lower2, + OPEN_TREE_CLONE | OPEN_TREE_CLOEXEC); + ASSERT_GE(fd_lower2, 0); + fsfd = sys_fsopen("overlay", 0); + ASSERT_GE(fsfd, 0); + ASSERT_EQ(sys_fsconfig(fsfd, FSCONFIG_SET_STRING, + "source", "test", 0), 0); + ASSERT_EQ(sys_fsconfig(fsfd, FSCONFIG_SET_STRING, + "upperdir", upper, 0), 0); + ASSERT_EQ(sys_fsconfig(fsfd, FSCONFIG_SET_STRING, + "workdir", work, 0), 0); + ASSERT_EQ(sys_fsconfig(fsfd, FSCONFIG_SET_STRING, + "index", "on", 0), 0); + ASSERT_EQ(sys_fsconfig(fsfd, FSCONFIG_SET_FD, + "lowerdir+", NULL, fd_lower1), 0); + ASSERT_EQ(sys_fsconfig(fsfd, FSCONFIG_SET_FD, + "lowerdir+", NULL, fd_lower2), 0); + + errno = 0; + EXPECT_EQ(sys_fsconfig(fsfd, FSCONFIG_CMD_CREATE, NULL, NULL, 0), -1); + EXPECT_EQ(errno, EINVAL); + EXPECT_EQ(close(fd_lower1), 0); + EXPECT_EQ(close(fd_lower2), 0); + EXPECT_EQ(close(fsfd), 0); +} + TEST_HARNESS_MAIN |
