Back to home page

OSCL-LXR

 
 

    


0001 #define _GNU_SOURCE
0002 #include <assert.h>
0003 #include <errno.h>
0004 #include <fcntl.h>
0005 #include <linux/types.h>
0006 #include <sched.h>
0007 #include <signal.h>
0008 #include <stdio.h>
0009 #include <stdlib.h>
0010 #include <string.h>
0011 #include <syscall.h>
0012 #include <sys/wait.h>
0013 
0014 #include "../kselftest_harness.h"
0015 #include "../pidfd/pidfd.h"
0016 
0017 /*
0018  * Regression test for:
0019  * 35f71bc0a09a ("fork: report pid reservation failure properly")
0020  * b26ebfe12f34 ("pid: Fix error return value in some cases")
0021  */
0022 TEST(regression_enomem)
0023 {
0024     pid_t pid;
0025 
0026     if (geteuid())
0027         EXPECT_EQ(0, unshare(CLONE_NEWUSER));
0028 
0029     EXPECT_EQ(0, unshare(CLONE_NEWPID));
0030 
0031     pid = fork();
0032     ASSERT_GE(pid, 0);
0033 
0034     if (pid == 0)
0035         exit(EXIT_SUCCESS);
0036 
0037     EXPECT_EQ(0, wait_for_pid(pid));
0038 
0039     pid = fork();
0040     ASSERT_LT(pid, 0);
0041     ASSERT_EQ(errno, ENOMEM);
0042 }
0043 
0044 TEST_HARNESS_MAIN