Lines Matching refs:self
82 fd = open("/proc/self/ns/time_for_children", O_RDONLY | O_CLOEXEC);
98 self->nsfds[i] = -EBADF;
99 self->child_nsfds1[i] = -EBADF;
100 self->child_nsfds2[i] = -EBADF;
101 self->child_pidfd_derived_nsfds[i] = -EBADF;
102 self->child_pidfd_derived_nsfds1[i] = -EBADF;
103 self->child_pidfd_derived_nsfds2[i] = -EBADF;
106 proc_fd = open("/proc/self/ns", O_DIRECTORY | O_CLOEXEC);
108 TH_LOG("%m - Failed to open /proc/self/ns");
111 self->pid = getpid();
112 self->pidfd = sys_pidfd_open(self->pid, 0);
113 EXPECT_GT(self->pidfd, 0) {
114 TH_LOG("%m - Failed to open pidfd for process %d", self->pid);
119 self->nsfds[i] = openat(proc_fd, info->name, O_RDONLY | O_CLOEXEC);
120 if (self->nsfds[i] < 0) {
123 info->name, self->pid);
127 self->child_pidfd_derived_nsfds[i] = ioctl(self->pidfd, info->pidfd_ioctl, 0);
128 if (self->child_pidfd_derived_nsfds[i] < 0) {
131 info->name, self->pid);
137 self->child_pid_exited = create_child(&self->child_pidfd_exited, 0);
138 EXPECT_GE(self->child_pid_exited, 0);
140 if (self->child_pid_exited == 0) {
141 if (self->nsfds[PIDFD_NS_USER] >= 0 && unshare(CLONE_NEWUSER) < 0)
143 if (self->nsfds[PIDFD_NS_NET] >= 0 && unshare(CLONE_NEWNET) < 0)
148 ASSERT_EQ(sys_waitid(P_PID, self->child_pid_exited, NULL, WEXITED | WNOWAIT), 0);
150 self->pidfd = sys_pidfd_open(self->pid, 0);
151 EXPECT_GE(self->pidfd, 0) {
152 TH_LOG("%m - Failed to open pidfd for process %d", self->pid);
159 if (self->nsfds[PIDFD_NS_USER] >= 0 && self->nsfds[PIDFD_NS_PID] >= 0)
160 self->child_pid1 = create_child(&self->child_pidfd1, CLONE_NEWUSER | CLONE_NEWPID);
161 else if (self->nsfds[PIDFD_NS_PID] >= 0)
162 self->child_pid1 = create_child(&self->child_pidfd1, CLONE_NEWPID);
163 else if (self->nsfds[PIDFD_NS_USER] >= 0)
164 self->child_pid1 = create_child(&self->child_pidfd1, CLONE_NEWUSER);
166 self->child_pid1 = create_child(&self->child_pidfd1, 0);
167 EXPECT_GE(self->child_pid1, 0);
169 if (self->child_pid1 == 0) {
172 if (self->nsfds[PIDFD_NS_MNT] >= 0 && unshare(CLONE_NEWNS) < 0) {
173 TH_LOG("%m - Failed to unshare mount namespace for process %d", self->pid);
176 if (self->nsfds[PIDFD_NS_CGROUP] >= 0 && unshare(CLONE_NEWCGROUP) < 0) {
177 TH_LOG("%m - Failed to unshare cgroup namespace for process %d", self->pid);
180 if (self->nsfds[PIDFD_NS_IPC] >= 0 && unshare(CLONE_NEWIPC) < 0) {
181 TH_LOG("%m - Failed to unshare ipc namespace for process %d", self->pid);
184 if (self->nsfds[PIDFD_NS_UTS] >= 0 && unshare(CLONE_NEWUTS) < 0) {
185 TH_LOG("%m - Failed to unshare uts namespace for process %d", self->pid);
188 if (self->nsfds[PIDFD_NS_NET] >= 0 && unshare(CLONE_NEWNET) < 0) {
189 TH_LOG("%m - Failed to unshare net namespace for process %d", self->pid);
192 if (self->nsfds[PIDFD_NS_TIME] >= 0 && !switch_timens()) {
193 TH_LOG("%m - Failed to unshare time namespace for process %d", self->pid);
213 if (self->nsfds[PIDFD_NS_USER] >= 0 && self->nsfds[PIDFD_NS_PID] >= 0)
214 self->child_pid2 = create_child(&self->child_pidfd2, CLONE_NEWUSER | CLONE_NEWPID);
215 else if (self->nsfds[PIDFD_NS_PID] >= 0)
216 self->child_pid2 = create_child(&self->child_pidfd2, CLONE_NEWPID);
217 else if (self->nsfds[PIDFD_NS_USER] >= 0)
218 self->child_pid2 = create_child(&self->child_pidfd2, CLONE_NEWUSER);
220 self->child_pid2 = create_child(&self->child_pidfd2, 0);
221 EXPECT_GE(self->child_pid2, 0);
223 if (self->child_pid2 == 0) {
226 if (self->nsfds[PIDFD_NS_MNT] >= 0 && unshare(CLONE_NEWNS) < 0) {
227 TH_LOG("%m - Failed to unshare mount namespace for process %d", self->pid);
230 if (self->nsfds[PIDFD_NS_CGROUP] >= 0 && unshare(CLONE_NEWCGROUP) < 0) {
231 TH_LOG("%m - Failed to unshare cgroup namespace for process %d", self->pid);
234 if (self->nsfds[PIDFD_NS_IPC] >= 0 && unshare(CLONE_NEWIPC) < 0) {
235 TH_LOG("%m - Failed to unshare ipc namespace for process %d", self->pid);
238 if (self->nsfds[PIDFD_NS_UTS] >= 0 && unshare(CLONE_NEWUTS) < 0) {
239 TH_LOG("%m - Failed to unshare uts namespace for process %d", self->pid);
242 if (self->nsfds[PIDFD_NS_NET] >= 0 && unshare(CLONE_NEWNET) < 0) {
243 TH_LOG("%m - Failed to unshare net namespace for process %d", self->pid);
246 if (self->nsfds[PIDFD_NS_TIME] >= 0 && !switch_timens()) {
247 TH_LOG("%m - Failed to unshare time namespace for process %d", self->pid);
269 self->nsfds[i] = openat(proc_fd, info->name, O_RDONLY | O_CLOEXEC);
270 if (self->nsfds[i] < 0) {
273 info->name, self->pid);
278 self->child_pid1, info->name);
282 self->child_nsfds1[i] = open(p, O_RDONLY | O_CLOEXEC);
283 if (self->child_nsfds1[i] < 0) {
286 info->name, self->child_pid1);
291 self->child_pid2, info->name);
295 self->child_nsfds2[i] = open(p, O_RDONLY | O_CLOEXEC);
296 if (self->child_nsfds2[i] < 0) {
299 info->name, self->child_pid1);
303 self->child_pidfd_derived_nsfds1[i] = ioctl(self->child_pidfd1, info->pidfd_ioctl, 0);
304 if (self->child_pidfd_derived_nsfds1[i] < 0) {
307 info->name, self->child_pid1);
311 self->child_pidfd_derived_nsfds2[i] = ioctl(self->child_pidfd2, info->pidfd_ioctl, 0);
312 if (self->child_pidfd_derived_nsfds2[i] < 0) {
315 info->name, self->child_pid2);
327 ASSERT_EQ(sys_pidfd_send_signal(self->child_pidfd1,
329 ASSERT_EQ(sys_pidfd_send_signal(self->child_pidfd2,
333 if (self->nsfds[i] >= 0)
334 close(self->nsfds[i]);
335 if (self->child_nsfds1[i] >= 0)
336 close(self->child_nsfds1[i]);
337 if (self->child_nsfds2[i] >= 0)
338 close(self->child_nsfds2[i]);
339 if (self->child_pidfd_derived_nsfds[i] >= 0)
340 close(self->child_pidfd_derived_nsfds[i]);
341 if (self->child_pidfd_derived_nsfds1[i] >= 0)
342 close(self->child_pidfd_derived_nsfds1[i]);
343 if (self->child_pidfd_derived_nsfds2[i] >= 0)
344 close(self->child_pidfd_derived_nsfds2[i]);
347 if (self->child_pidfd1 >= 0)
348 EXPECT_EQ(0, close(self->child_pidfd1));
349 if (self->child_pidfd2 >= 0)
350 EXPECT_EQ(0, close(self->child_pidfd2));
351 ASSERT_EQ(sys_waitid(P_PID, self->child_pid_exited, NULL, WEXITED), 0);
352 ASSERT_EQ(sys_waitid(P_PID, self->child_pid1, NULL, WEXITED), 0);
353 ASSERT_EQ(sys_waitid(P_PID, self->child_pid2, NULL, WEXITED), 0);
399 ASSERT_NE(setns(self->pidfd, 0), 0);
402 ASSERT_NE(setns(self->pidfd, -1), 0);
405 ASSERT_NE(setns(self->pidfd, CLONE_VM), 0);
408 ASSERT_NE(setns(self->pidfd, CLONE_NEWUSER | CLONE_VM), 0);
418 ASSERT_NE(setns(self->child_pidfd_exited, CLONE_NEWUSER | CLONE_NEWNET),
426 if (self->nsfds[i] >= 0)
427 ASSERT_EQ(in_same_namespace(self->nsfds[i], pid, info->name), 1);
441 if (self->child_nsfds1[i] < 0)
445 ASSERT_EQ(setns(self->child_pidfd1, info->flag), 0) {
447 info->name, self->child_pid1,
448 self->child_pidfd1);
454 nsfd = self->nsfds[i];
456 nsfd = self->child_nsfds1[i];
459 info->name, self->child_pid1,
460 self->child_pidfd1);
463 info->name, self->child_pid1, self->child_pidfd1);
477 if (self->child_nsfds1[i] < 0)
481 ASSERT_EQ(setns(self->child_nsfds1[i], info->flag), 0) {
483 info->name, self->child_pid1,
484 self->child_nsfds1[i]);
490 nsfd = self->nsfds[i];
492 nsfd = self->child_nsfds1[i];
495 info->name, self->child_pid1,
496 self->child_nsfds1[i]);
499 info->name, self->child_pid1, self->child_nsfds1[i]);
513 if (self->child_pidfd_derived_nsfds1[i] < 0)
517 ASSERT_EQ(setns(self->child_pidfd_derived_nsfds1[i], info->flag), 0) {
519 info->name, self->child_pid1,
520 self->child_pidfd_derived_nsfds1[i]);
526 nsfd = self->child_pidfd_derived_nsfds[i];
528 nsfd = self->child_pidfd_derived_nsfds1[i];
531 info->name, self->child_pid1,
532 self->child_pidfd_derived_nsfds1[i]);
535 info->name, self->child_pid1, self->child_pidfd_derived_nsfds1[i]);
548 if (self->child_nsfds1[i] < 0)
553 info->name, self->child_pid1);
556 ASSERT_EQ(setns(self->child_pidfd1, flags), 0) {
558 self->child_pid1);
566 if (self->child_nsfds1[i] < 0)
571 nsfd = self->nsfds[i];
573 nsfd = self->child_nsfds1[i];
576 info->name, self->child_pid1);
579 info->name, self->child_pid1);
591 if (self->child_nsfds1[i] < 0)
597 info->name, self->child_pid1);
600 ASSERT_EQ(setns(self->child_pidfd1, flags), 0) {
602 self->child_pid1, self->child_pidfd1);
614 if (self->child_nsfds2[i] < 0 || !info->flag)
617 ASSERT_NE(setns(self->child_pidfd2, info->flag), 0) {
619 info->name, self->child_pid2,
620 self->child_pidfd2);
623 info->name, self->child_pid2,
624 self->child_pidfd2);
626 ASSERT_NE(setns(self->child_nsfds2[i], info->flag), 0) {
628 info->name, self->child_pid2,
629 self->child_nsfds2[i]);
632 info->name, self->child_pid2,
633 self->child_nsfds2[i]);
645 if (self->child_pidfd_derived_nsfds2[i] < 0 || !info->flag)
648 ASSERT_NE(setns(self->child_pidfd_derived_nsfds2[i], info->flag), 0) {
650 info->name, self->child_pid2,
651 self->child_pidfd_derived_nsfds2[i]);
654 info->name, self->child_pid2,
655 self->child_pidfd_derived_nsfds2[i]);