1--TEST--
2pcntl_unshare() with CLONE_NEWPID
3--SKIPIF--
4<?php
5if (!extension_loaded("pcntl")) die("skip");
6if (!extension_loaded("posix")) die("skip posix extension not available");
7if (!function_exists("pcntl_unshare")) die("skip pcntl_unshare is not available");
8if (!defined("CLONE_NEWPID")) die("skip flag unavailable");
9if (getenv("SKIP_ASAN")) die("skip asan chokes on this");
10if (posix_getuid() !== 0 &&
11    (!defined("CLONE_NEWUSER") ||
12    (@pcntl_unshare(CLONE_NEWUSER) == false && pcntl_get_last_error() == PCNTL_EPERM))) {
13    die("skip Insufficient privileges for CLONE_NEWUSER");
14}
15if (@pcntl_unshare(CLONE_NEWPID) == false && pcntl_get_last_error() == PCNTL_EPERM) {
16    die("skip Insufficient privileges for CLONE_NEWPID");
17}
18
19--FILE--
20<?php
21
22if(posix_getuid() !== 0) {
23    pcntl_unshare(CLONE_NEWUSER);
24}
25
26var_dump(getmypid());
27pcntl_unshare(CLONE_NEWPID);
28if(!pcntl_fork()) {
29    var_dump(getmypid());
30    exit();
31}
32--EXPECTF--
33int(%d)
34int(1)
35