Re: [PATCH v2 3/3] selftests/seccomp: Test SECCOMP_IOCTL_NOTIF_ADDFD
From: Kees Cook <hidden>
Date: 2020-05-29 20:09:20
Also in:
lkml
On Fri, May 29, 2020 at 06:46:07PM +0000, Sargun Dhillon wrote:
On Fri, May 29, 2020 at 12:41:51AM -0700, Kees Cook wrote:quoted
On Thu, May 28, 2020 at 04:08:58AM -0700, Sargun Dhillon wrote:quoted
+ EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_SEND, &resp), 0); + + nextid = req.id + 1; + + /* Wait for getppid to be called for the second time */ + sleep(1);I always rebel at finding "sleep" in tests. ;) Is this needed? IIUC, userspace will immediately see EINPROGRESS after the NOTIF_SEND finishes, yes? Otherwise, yes, this looks good. -- Kees CookI'm open to better suggestions, but there's a race where if getppid is not called before the second SECCOMP_IOCTL_NOTIF_ADDFD is called, you will just get an ENOENT, since the notification ID is not found. The other approach is to "poll" the child, and wait for it to enter the second syscall. Calling receive beforehand doesn't work because it moves the state of the notification in the kernel to received, and then the kernel doesn't error with EINPROGRESS.
For tests, I prefer polling. How about adding a busy-loop (with a iteration-bounded small usleep) that just calls SECCOMP_IOCTL_NOTIF_ID_VALID until it's valid? -- Kees Cook