selftests/clone3: skip if clone3() is ENOSYS
If the clone3() syscall is not implemented we should skip the tests. Fixes: 41585bbeeef9 ("selftests: add tests for clone3() with *set_tid") Fixes: 17a810699c18 ("selftests: add tests for clone3()") Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
This commit is contained in:
parent
a019ff3b8b
commit
11fde161ab
@ -131,6 +131,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
uid_t uid = getuid();
|
uid_t uid = getuid();
|
||||||
|
|
||||||
|
test_clone3_supported();
|
||||||
ksft_print_header();
|
ksft_print_header();
|
||||||
ksft_set_plan(17);
|
ksft_set_plan(17);
|
||||||
|
|
||||||
|
@ -20,32 +20,6 @@
|
|||||||
#define CLONE_CLEAR_SIGHAND 0x100000000ULL
|
#define CLONE_CLEAR_SIGHAND 0x100000000ULL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void test_clone3_supported(void)
|
|
||||||
{
|
|
||||||
pid_t pid;
|
|
||||||
struct clone_args args = {};
|
|
||||||
|
|
||||||
if (__NR_clone3 < 0)
|
|
||||||
ksft_exit_skip("clone3() syscall is not supported\n");
|
|
||||||
|
|
||||||
/* Set to something that will always cause EINVAL. */
|
|
||||||
args.exit_signal = -1;
|
|
||||||
pid = sys_clone3(&args, sizeof(args));
|
|
||||||
if (!pid)
|
|
||||||
exit(EXIT_SUCCESS);
|
|
||||||
|
|
||||||
if (pid > 0) {
|
|
||||||
wait(NULL);
|
|
||||||
ksft_exit_fail_msg(
|
|
||||||
"Managed to create child process with invalid exit_signal\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (errno == ENOSYS)
|
|
||||||
ksft_exit_skip("clone3() syscall is not supported\n");
|
|
||||||
|
|
||||||
ksft_print_msg("clone3() syscall supported\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void nop_handler(int signo)
|
static void nop_handler(int signo)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -145,9 +119,10 @@ static void test_clone3_clear_sighand(void)
|
|||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
ksft_print_header();
|
ksft_print_header();
|
||||||
|
test_clone3_supported();
|
||||||
|
|
||||||
ksft_set_plan(1);
|
ksft_set_plan(1);
|
||||||
|
|
||||||
test_clone3_supported();
|
|
||||||
test_clone3_clear_sighand();
|
test_clone3_clear_sighand();
|
||||||
|
|
||||||
return ksft_exit_pass();
|
return ksft_exit_pass();
|
||||||
|
@ -34,4 +34,30 @@ static pid_t sys_clone3(struct clone_args *args, size_t size)
|
|||||||
return syscall(__NR_clone3, args, size);
|
return syscall(__NR_clone3, args, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void test_clone3_supported(void)
|
||||||
|
{
|
||||||
|
pid_t pid;
|
||||||
|
struct clone_args args = {};
|
||||||
|
|
||||||
|
if (__NR_clone3 < 0)
|
||||||
|
ksft_exit_skip("clone3() syscall is not supported\n");
|
||||||
|
|
||||||
|
/* Set to something that will always cause EINVAL. */
|
||||||
|
args.exit_signal = -1;
|
||||||
|
pid = sys_clone3(&args, sizeof(args));
|
||||||
|
if (!pid)
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
|
||||||
|
if (pid > 0) {
|
||||||
|
wait(NULL);
|
||||||
|
ksft_exit_fail_msg(
|
||||||
|
"Managed to create child process with invalid exit_signal\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (errno == ENOSYS)
|
||||||
|
ksft_exit_skip("clone3() syscall is not supported\n");
|
||||||
|
|
||||||
|
ksft_print_msg("clone3() syscall supported\n");
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _CLONE3_SELFTESTS_H */
|
#endif /* _CLONE3_SELFTESTS_H */
|
||||||
|
@ -156,12 +156,13 @@ int main(int argc, char *argv[])
|
|||||||
pid_t pid, ns1, ns2, ns3, ns_pid;
|
pid_t pid, ns1, ns2, ns3, ns_pid;
|
||||||
pid_t set_tid[MAX_PID_NS_LEVEL * 2];
|
pid_t set_tid[MAX_PID_NS_LEVEL * 2];
|
||||||
|
|
||||||
|
ksft_print_header();
|
||||||
|
test_clone3_supported();
|
||||||
|
ksft_set_plan(29);
|
||||||
|
|
||||||
if (pipe(pipe_1) < 0 || pipe(pipe_2) < 0)
|
if (pipe(pipe_1) < 0 || pipe(pipe_2) < 0)
|
||||||
ksft_exit_fail_msg("pipe() failed\n");
|
ksft_exit_fail_msg("pipe() failed\n");
|
||||||
|
|
||||||
ksft_print_header();
|
|
||||||
ksft_set_plan(29);
|
|
||||||
|
|
||||||
f = fopen("/proc/sys/kernel/pid_max", "r");
|
f = fopen("/proc/sys/kernel/pid_max", "r");
|
||||||
if (f == NULL)
|
if (f == NULL)
|
||||||
ksft_exit_fail_msg(
|
ksft_exit_fail_msg(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user