diff --git a/test/zdtm.sh b/test/zdtm.sh index 4a57cd344..8b8faf57f 100755 --- a/test/zdtm.sh +++ b/test/zdtm.sh @@ -229,6 +229,7 @@ generate_test_list() ns/static/mntns_shared_bind ns/static/mntns_shared_bind02 ns/static/mntns_root_bind + ns/static/mntns_root_bind02 ns/static/mntns_deleted ns/static/inotify01 ns/static/mntns_rw_ro_rw @@ -368,6 +369,7 @@ mntns_link_ghost mntns_shared_bind mntns_shared_bind02 mntns_root_bind +mntns_root_bind02 mntns_rw_ro_rw mntns_deleted mount_paths diff --git a/test/zdtm/.gitignore b/test/zdtm/.gitignore index 3e6c7e299..7722ae711 100644 --- a/test/zdtm/.gitignore +++ b/test/zdtm/.gitignore @@ -206,6 +206,7 @@ /live/static/file_locks05 /live/static/mlock_setuid /live/static/mntns_root_bind +/live/static/mntns_root_bind02 /live/static/mntns-deleted-dst /live/static/socket-tcp-local /live/static/socket-tcp6-local diff --git a/test/zdtm/live/static/Makefile b/test/zdtm/live/static/Makefile index 6801b5f9f..06e59853f 100644 --- a/test/zdtm/live/static/Makefile +++ b/test/zdtm/live/static/Makefile @@ -222,6 +222,7 @@ TST_DIR = \ mntns_shared_bind \ mntns_shared_bind02 \ mntns_root_bind \ + mntns_root_bind02 \ mnt_ext_auto \ mnt_ext_master \ mntns_deleted \ @@ -366,6 +367,7 @@ sigpending: override LDLIBS += -lrt vdso01: override LDLIBS += -lrt mntns_link_remap: override CFLAGS += -DZDTM_LINK_REMAP mntns_shared_bind02: override CFLAGS += -DSHARED_BIND02 +mntns_root_bind02: override CFLAGS += -DROOT_BIND02 maps02: get_smaps_bits.o mlock_setuid: get_smaps_bits.o inotify01: override CFLAGS += -DINOTIFY01 diff --git a/test/zdtm/live/static/mntns_root_bind.c b/test/zdtm/live/static/mntns_root_bind.c index 72d880032..3bd0bece0 100644 --- a/test/zdtm/live/static/mntns_root_bind.c +++ b/test/zdtm/live/static/mntns_root_bind.c @@ -27,7 +27,8 @@ TEST_OPTION(dirname, string, "directory name", 1); int main(int argc, char **argv) { - char path[PATH_MAX], bpath[PATH_MAX], spath[PATH_MAX], bspath[PATH_MAX]; + char subdir1[PATH_MAX], path[PATH_MAX], bpath[PATH_MAX], spath[PATH_MAX], bspath[PATH_MAX]; + char subdir2[PATH_MAX], bsubdir2[PATH_MAX]; pid_t pid; int status; task_waiter_t t; @@ -38,12 +39,19 @@ int main(int argc, char **argv) mount(NULL, "/", NULL, MS_SHARED, NULL); - snprintf(path, sizeof(path), "%s/test", dirname); - snprintf(bpath, sizeof(bpath), "%s/test.bind", dirname); - snprintf(spath, sizeof(spath), "%s/test/sub", dirname); - snprintf(bspath, sizeof(bspath), "%s/test.bind/sub", dirname); + snprintf(subdir1, sizeof(subdir1), "%s/subdir1", dirname); + snprintf(path, sizeof(path), "%s/test", subdir1); + snprintf(bpath, sizeof(bpath), "%s/test.bind", subdir1); + snprintf(spath, sizeof(spath), "%s/test/sub", subdir1); + snprintf(bspath, sizeof(bspath), "%s/test.bind/sub", subdir1); + + snprintf(subdir2, sizeof(subdir2), "%s/subdir2", dirname); + snprintf(bsubdir2, sizeof(bsubdir2), "%s/bsubdir2", dirname); if (mkdir(dirname, 0700) || + mkdir(subdir1, 0777) || + mkdir(subdir2, 0777) || + mkdir(bsubdir2, 0777) || mkdir(path, 0700) || mkdir(spath, 0700) || mkdir(bpath, 0700)) { @@ -87,6 +95,13 @@ int main(int argc, char **argv) return 1; } +#ifdef ROOT_BIND02 + if (mount(subdir2, bsubdir2, NULL, MS_BIND, NULL)) { + pr_perror("Unable to mount %s to %s", subdir2, bsubdir2); + return 1; + } +#endif + test_daemon(); test_waitsig(); diff --git a/test/zdtm/live/static/mntns_root_bind02.c b/test/zdtm/live/static/mntns_root_bind02.c new file mode 120000 index 000000000..4957c1fa1 --- /dev/null +++ b/test/zdtm/live/static/mntns_root_bind02.c @@ -0,0 +1 @@ +mntns_root_bind.c \ No newline at end of file diff --git a/test/zdtm/live/static/mntns_root_bind02.desc b/test/zdtm/live/static/mntns_root_bind02.desc new file mode 120000 index 000000000..cd4ed51a4 --- /dev/null +++ b/test/zdtm/live/static/mntns_root_bind02.desc @@ -0,0 +1 @@ +mntns_root_bind.desc \ No newline at end of file