45 lines · c
1#define _GNU_SOURCE2#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 */22TEST(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 44TEST_HARNESS_MAIN45