diff options
author | 2016-07-14 05:55:08 +0000 | |
---|---|---|
committer | 2016-07-14 05:55:08 +0000 | |
commit | b261876b05beae09af1ac260b35bb38a79ca10da (patch) | |
tree | 89afa44d16b2b4aef3f285fc1d691373f4618c07 /regress/sys/kern/kqueue/kqueue-process.c | |
parent | ufs_readdir() buffer was meant to be limited to 64kB; reversed test (diff) | |
download | wireguard-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.c | 11 |
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; |