Skip to content

Commit a2e0b1c

Browse files
amlutogregkh
authored andcommitted
selftests/capabilities: Fix the test_execve test
commit 796a3bae2fba6810427efdb314a1c126c9490fb3 upstream. test_execve does rather odd mount manipulations to safely create temporary setuid and setgid executables that aren't visible to the rest of the system. Those executables end up in the test's cwd, but that cwd is MNT_DETACHed. The core namespace code considers MNT_DETACHed trees to belong to no mount namespace at all and, in general, MNT_DETACHed trees are only barely function. This interacted with commit 380cf5ba6b0a ("fs: Treat foreign mounts as nosuid") to cause all MNT_DETACHed trees to act as though they're nosuid, breaking the test. Fix it by just not detaching the tree. It's still in a private mount namespace and is therefore still invisible to the rest of the system (except via /proc, and the same nosuid logic will protect all other programs on the system from believing in test_execve's setuid bits). While we're at it, fix some blatant whitespace problems. Reported-by: Naresh Kamboju <naresh.kamboju@linaro.org> Fixes: 380cf5ba6b0a ("fs: Treat foreign mounts as nosuid") Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Kees Cook <keescook@chromium.org> Cc: Shuah Khan <shuahkh@osg.samsung.com> Cc: Greg KH <greg@kroah.com> Cc: linux-kselftest@vger.kernel.org Signed-off-by: Andy Lutomirski <luto@kernel.org> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent f07288c commit a2e0b1c

1 file changed

Lines changed: 2 additions & 5 deletions

File tree

tools/testing/selftests/capabilities/test_execve.c

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,6 @@ static void chdir_to_tmpfs(void)
138138

139139
if (chdir(cwd) != 0)
140140
err(1, "chdir to private tmpfs");
141-
142-
if (umount2(".", MNT_DETACH) != 0)
143-
err(1, "detach private tmpfs");
144141
}
145142

146143
static void copy_fromat_to(int fromfd, const char *fromname, const char *toname)
@@ -248,7 +245,7 @@ static int do_tests(int uid, const char *our_path)
248245
err(1, "chown");
249246
if (chmod("validate_cap_sgidnonroot", S_ISGID | 0710) != 0)
250247
err(1, "chmod");
251-
}
248+
}
252249

253250
capng_get_caps_process();
254251

@@ -384,7 +381,7 @@ static int do_tests(int uid, const char *our_path)
384381
} else {
385382
printf("[RUN]\tNon-root +ia, sgidnonroot => i\n");
386383
exec_other_validate_cap("./validate_cap_sgidnonroot",
387-
false, false, true, false);
384+
false, false, true, false);
388385

389386
if (fork_wait()) {
390387
printf("[RUN]\tNon-root +ia, sgidroot => i\n");

0 commit comments

Comments
 (0)