CLONE_NEWUSER
if (ns->ns_type != CLONE_NEWUSER)
if (ns->ns_type != CLONE_NEWUSER)
case CLONE_NEWUSER:
case CLONE_NEWUSER:
struct user_namespace *: CLONE_NEWUSER, \
if (set->flags & CLONE_NEWUSER)
if (unshare_flags & CLONE_NEWUSER)
if (clone_flags & CLONE_NEWUSER) {
if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS))
if ((clone_flags & (CLONE_NEWUSER | CLONE_NEWPID)) ||
CLONE_NEWUSER|CLONE_NEWPID|CLONE_NEWCGROUP|
if (unshare_flags & CLONE_NEWUSER)
case CLONE_NEWUSER:
CLONE_NEWNET | CLONE_NEWTIME | CLONE_NEWUSER |
if (flags & CLONE_NEWUSER)
if (flags & CLONE_NEWUSER)
if (flags & CLONE_NEWUSER)
if (flags & CLONE_NEWUSER)
if (flags & CLONE_NEWUSER) {
if (flags & CLONE_NEWUSER) {
VFS_WARN_ON_ONCE(owner->ns_type != CLONE_NEWUSER);
case CLONE_NEWUSER:
VFS_WARN_ON_ONCE(owner->ns_type != CLONE_NEWUSER);
ns = lookup_ns_id(kls->user_ns_id, CLONE_NEWUSER);
if (!(unshare_flags & CLONE_NEWUSER))
if (unshare(CLONE_NEWUSER))
if (unshare(CLONE_NEWUSER))
} else if (unshare(CLONE_NEWUSER | CLONE_NEWNS) == 0) {
ret = unshare(CLONE_NEWUSER);
ASSERT_EQ(unshare(CLONE_NEWNS|CLONE_NEWUSER), 0);
if (unshare(CLONE_NEWUTS | CLONE_NEWUSER))
if (unshare(CLONE_NEWUSER))
pid = clone(child, ca.stack_ptr, CLONE_NEWUSER | CLONE_NEWPID | SIGCHLD, NULL);
ret = unshare(CLONE_NEWNS|CLONE_NEWUSER|CLONE_NEWPID);
pid = do_clone(get_userns_fd_cb, NULL, CLONE_NEWUSER | CLONE_NEWNS);
pid = do_clone(userns_fd_cb, h, CLONE_NEWUSER | CLONE_FILES | CLONE_VM);
ret = unshare(CLONE_NEWNS|CLONE_NEWUSER);
ret = unshare(CLONE_NEWUSER);
if (setns(fd, CLONE_NEWUSER))
if (unshare(CLONE_NEWUSER) != 0)
if (unshare(CLONE_NEWUSER) !=0) {
#ifndef CLONE_NEWUSER
pid = do_clone(get_userns_fd_cb, NULL, CLONE_NEWUSER);
if (unshare(CLONE_NEWUSER))
#ifndef CLONE_NEWUSER
#ifndef CLONE_NEWUSER
if (unshare(CLONE_NEWUSER))
.ns_type = CLONE_NEWUSER,
if (setns(userns_fd, CLONE_NEWUSER) < 0) {
.ns_type = CLONE_NEWUSER,
if (setns(userns_fd, CLONE_NEWUSER) < 0) {
.ns_type = CLONE_NEWUSER,
.ns_type = CLONE_NEWUSER,
if (setns(userns_fd, CLONE_NEWUSER) < 0) {
if (setns(userns_fd, CLONE_NEWUSER) < 0) {
.ns_type = CLONE_NEWUSER,
if (setns(userns_fd, CLONE_NEWUSER) < 0) {
if (setns(userns_fd, CLONE_NEWUSER) < 0) {
.ns_type = CLONE_NEWUSER,
if (setns(userns_fd, CLONE_NEWUSER) < 0) {
ret = unshare(CLONE_NEWUSER);
ret = unshare(CLONE_NEWUSER);
ret = unshare(CLONE_NEWUSER);
ret = unshare(CLONE_NEWUSER);
ret = unshare(CLONE_NEWUSER);
ret = unshare(CLONE_NEWUSER);
ret = unshare(CLONE_NEWUSER);
.ns_type = CLONE_NEWUSER, /* Filter by user namespace */
req.ns_type = CLONE_NEWUSER;
.ns_type = CLONE_NEWUSER,
.ns_type = CLONE_NEWUSER,
req.ns_type = CLONE_NEWUSER;
ret = unshare(CLONE_NEWUSER);
ret = unshare(CLONE_NEWUSER);
if (unshare(CLONE_NEWUTS | CLONE_NEWIPC | CLONE_NEWNET | CLONE_NEWUSER) < 0) {
child_pid = create_child(&pidfd, CLONE_NEWUSER | CLONE_NEWUTS | CLONE_NEWIPC | CLONE_NEWNET);
.ns_type = CLONE_NEWNET | CLONE_NEWUSER,
.ns_type = CLONE_NEWNET | CLONE_NEWUSER,
.ns_type = CLONE_NEWUSER,
if (setns(userns_fd, CLONE_NEWUSER) < 0) {
.ns_type = CLONE_NEWUSER,
.ns_type = CLONE_NEWUSER,
.ns_type = CLONE_NEWUSER | CLONE_NEWNET | CLONE_NEWUTS,
.ns_type = CLONE_NEWUSER,
.unshare = CLONE_NEWUSER,
EXPECT_EQ(0, unshare(CLONE_NEWUSER));
flags |= CLONE_NEWUSER;
if (!(flags & CLONE_NEWUSER) && geteuid() != 0)
ASSERT_EQ(setns(self->child_pidfd2, CLONE_NEWUSER | CLONE_NEWPID), 0);
self->child_pid1 = create_child(&self->child_pidfd1, CLONE_NEWUSER);
self->child_pid2 = create_child(&self->child_pidfd2, CLONE_NEWUSER | CLONE_NEWPID);
self->child_pid3 = create_child(&self->child_pidfd3, CLONE_NEWUSER | CLONE_NEWPID);
self->child_pid4 = create_child(&self->child_pidfd4, CLONE_NEWUSER | CLONE_NEWPID);
self->child_pid3 = create_child(&self->child_pidfd3, CLONE_NEWUSER | CLONE_NEWPID);
self->child_pid = create_child(&self->child_pidfd, CLONE_NEWUSER | CLONE_NEWPID);
if (self->nsfds[PIDFD_NS_USER] >= 0 && unshare(CLONE_NEWUSER) < 0)
self->child_pid1 = create_child(&self->child_pidfd1, CLONE_NEWUSER | CLONE_NEWPID);
self->child_pid1 = create_child(&self->child_pidfd1, CLONE_NEWUSER);
self->child_pid2 = create_child(&self->child_pidfd2, CLONE_NEWUSER | CLONE_NEWPID);
self->child_pid2 = create_child(&self->child_pidfd2, CLONE_NEWUSER);
ASSERT_NE(setns(self->pidfd, CLONE_NEWUSER | CLONE_VM), 0);
ASSERT_NE(setns(self->child_pidfd_exited, CLONE_NEWUSER | CLONE_NEWNET),
[PIDFD_NS_USER] = { "user", CLONE_NEWUSER, PIDFD_GET_USER_NAMESPACE, },
self->child_pid = create_child(&self->child_pidfd, CLONE_NEWUSER | CLONE_NEWPID);
if (unshare(CLONE_NEWUSER) < 0)
int clone_flags = CLONE_NEWUSER;
#ifndef CLONE_NEWUSER
ASSERT_EQ(unshare(CLONE_NEWUSER | CLONE_NEWPID), 0) {
ASSERT_EQ(unshare(CLONE_NEWUSER), 0) {
if (post_flags & CLONE_NEWUSER) {
ret = unshare(CLONE_NEWUSER);
if (pre_flags & CLONE_NEWUSER) {
ret = unshare(CLONE_NEWUSER);
ret = do_test(CLONE_NEWUSER, 0, true, sync_fd);
ret = do_test(CLONE_NEWUSER | CLONE_NEWNET, 0, false, sync_fd);
ret = do_test(0, CLONE_NEWUSER, true, sync_fd);
ret = do_test(0, CLONE_NEWUSER | CLONE_NEWNET, true, sync_fd);
unshare(CLONE_NEWUSER);