1 #define _GNU_SOURCE 2 #include <assert.h> 3 #include <errno.h> 4 #include <fcntl.h> 5 #include <linux/types.h> 6 #include <sched.h> 7 #include <signal.h> 8 #include <stdio.h> 9 #include <stdlib.h> 10 #include <string.h> 11 #include <syscall.h> 12 #include <sys/wait.h> 13 14 #include "../kselftest_harness.h" 15 #include "../pidfd/pidfd.h" 16 17 /* 18 * Regression test for: 19 * 35f71bc0a09a ("fork: report pid reservation failure properly") 20 * b26ebfe12f34 ("pid: Fix error return value in some cases") 21 */ 22 TEST(regression_enomem) 23 { 24 pid_t pid; 25 26 if (geteuid()) 27 EXPECT_EQ(0, unshare(CLONE_NEWUSER)); 28 29 EXPECT_EQ(0, unshare(CLONE_NEWPID)); 30 31 pid = fork(); 32 ASSERT_GE(pid, 0); 33 34 if (pid == 0) 35 exit(EXIT_SUCCESS); 36 37 EXPECT_EQ(0, wait_for_pid(pid)); 38 39 pid = fork(); 40 ASSERT_LT(pid, 0); 41 ASSERT_EQ(errno, ENOMEM); 42 } 43 44 TEST_HARNESS_MAIN 45