Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

selftests/nolibc: Add coverage of vfork()

Generalise the existing fork() test to also cover the newly added vfork()
implementation.

Signed-off-by: Mark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/20250703-arm64-gcs-vfork-exit-v3-4-1e9a9d2ddbbe@kernel.org
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>

authored by

Mark Brown and committed by
Thomas Weißschuh
696bf157 fb476dfb

+19 -4
+19 -4
tools/testing/selftests/nolibc/nolibc-test.c
··· 877 877 return 0; 878 878 } 879 879 880 - int test_fork(void) 880 + enum fork_type { 881 + FORK_STANDARD, 882 + FORK_VFORK, 883 + }; 884 + 885 + int test_fork(enum fork_type type) 881 886 { 882 887 int status; 883 888 pid_t pid; ··· 891 886 fflush(stdout); 892 887 fflush(stderr); 893 888 894 - pid = fork(); 889 + switch (type) { 890 + case FORK_STANDARD: 891 + pid = fork(); 892 + break; 893 + case FORK_VFORK: 894 + pid = vfork(); 895 + break; 896 + default: 897 + return 1; 898 + } 895 899 896 900 switch (pid) { 897 901 case -1: 898 902 return 1; 899 903 900 904 case 0: 901 - exit(123); 905 + _exit(123); 902 906 903 907 default: 904 908 pid = waitpid(pid, &status, 0); ··· 1344 1330 CASE_TEST(dup3_m1); tmp = dup3(-1, 100, 0); EXPECT_SYSER(1, tmp, -1, EBADF); if (tmp != -1) close(tmp); break; 1345 1331 CASE_TEST(execve_root); EXPECT_SYSER(1, execve("/", (char*[]){ [0] = "/", [1] = NULL }, NULL), -1, EACCES); break; 1346 1332 CASE_TEST(file_stream); EXPECT_SYSZR(1, test_file_stream()); break; 1347 - CASE_TEST(fork); EXPECT_SYSZR(1, test_fork()); break; 1333 + CASE_TEST(fork); EXPECT_SYSZR(1, test_fork(FORK_STANDARD)); break; 1348 1334 CASE_TEST(getdents64_root); EXPECT_SYSNE(1, test_getdents64("/"), -1); break; 1349 1335 CASE_TEST(getdents64_null); EXPECT_SYSER(1, test_getdents64("/dev/null"), -1, ENOTDIR); break; 1350 1336 CASE_TEST(directories); EXPECT_SYSZR(proc, test_dirent()); break; ··· 1388 1374 CASE_TEST(uname_fault); EXPECT_SYSER(1, uname(NULL), -1, EFAULT); break; 1389 1375 CASE_TEST(unlink_root); EXPECT_SYSER(1, unlink("/"), -1, EISDIR); break; 1390 1376 CASE_TEST(unlink_blah); EXPECT_SYSER(1, unlink("/proc/self/blah"), -1, ENOENT); break; 1377 + CASE_TEST(vfork); EXPECT_SYSZR(1, test_fork(FORK_VFORK)); break; 1391 1378 CASE_TEST(wait_child); EXPECT_SYSER(1, wait(&tmp), -1, ECHILD); break; 1392 1379 CASE_TEST(waitpid_min); EXPECT_SYSER(1, waitpid(INT_MIN, &tmp, WNOHANG), -1, ESRCH); break; 1393 1380 CASE_TEST(waitpid_child); EXPECT_SYSER(1, waitpid(getpid(), &tmp, WNOHANG), -1, ECHILD); break;