summaryrefslogtreecommitdiffstats
path: root/regress/sys/kern/kqueue/kqueue-process.c
diff options
context:
space:
mode:
authorguenther <guenther@openbsd.org>2016-07-14 05:55:08 +0000
committerguenther <guenther@openbsd.org>2016-07-14 05:55:08 +0000
commitb261876b05beae09af1ac260b35bb38a79ca10da (patch)
tree89afa44d16b2b4aef3f285fc1d691373f4618c07 /regress/sys/kern/kqueue/kqueue-process.c
parentufs_readdir() buffer was meant to be limited to 64kB; reversed test (diff)
downloadwireguard-openbsd-b261876b05beae09af1ac260b35bb38a79ca10da.tar.xz
wireguard-openbsd-b261876b05beae09af1ac260b35bb38a79ca10da.zip
Prevent silly states via knotes on pids > 2^32 and on nonexistent signals.
ok tedu@
Diffstat (limited to 'regress/sys/kern/kqueue/kqueue-process.c')
-rw-r--r--regress/sys/kern/kqueue/kqueue-process.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/regress/sys/kern/kqueue/kqueue-process.c b/regress/sys/kern/kqueue/kqueue-process.c
index d62b2699d18..a579445cdd5 100644
--- a/regress/sys/kern/kqueue/kqueue-process.c
+++ b/regress/sys/kern/kqueue/kqueue-process.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kqueue-process.c,v 1.9 2016/03/17 19:40:43 krw Exp $ */
+/* $OpenBSD: kqueue-process.c,v 1.10 2016/07/14 05:55:08 guenther Exp $ */
/*
* Written by Artur Grabowski <art@openbsd.org> 2002 Public Domain
*/
@@ -10,6 +10,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <err.h>
+#include <errno.h>
#include <unistd.h>
#include <signal.h>
@@ -65,6 +66,14 @@ do_process(void)
ASS(kevent(kq, &ke, 1, NULL, 0, NULL) == 0,
warn("can't register events on kqueue"));
+ /* negative case */
+ EV_SET(&ke, pid + (1ULL << 32), EVFILT_PROC, EV_ADD|EV_ENABLE|EV_CLEAR,
+ NOTE_EXIT|NOTE_FORK|NOTE_EXEC|NOTE_TRACK, 0, NULL);
+ ASS(kevent(kq, &ke, 1, NULL, 0, NULL) != 0,
+ warnx("can register bogus pid on kqueue"));
+ ASS(errno == ESRCH,
+ warn("register bogus pid on kqueue returned wrong error"));
+
kill(pid, SIGUSR1); /* sync 1 */
didfork = didchild = 0;