aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorKyle Evans <kevans@FreeBSD.org>2021-10-01 16:59:31 +0000
committerKyle Evans <kevans@FreeBSD.org>2021-10-01 18:17:30 +0000
commit2f4dbe279f6b5eb87ec493d96f6943ffdb603ba0 (patch)
tree8d28b049c7f34db9f9e6827d1ac76e0ec72527da /tests
parent4aed5c3c9d1d78986d3feba3f128187c59fb2dfe (diff)
downloadsrc-2f4dbe279f6b5eb87ec493d96f6943ffdb603ba0.tar.gz
src-2f4dbe279f6b5eb87ec493d96f6943ffdb603ba0.zip
kqueue: fix recent assertion
NOTE_ABSTIME may also have a zero timeout, which indicates that we should still fire immediately as an absolute time in the past. A test has been added for this one as well. Fixes: 9c999a259f00 ("kqueue: don't arbitrarily restrict long-past...") Point hat: kevans Reported by: syzbot+1c8d1154f560b3930042@syzkaller.appspotmail.com
Diffstat (limited to 'tests')
-rw-r--r--tests/sys/kqueue/libkqueue/timer.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/sys/kqueue/libkqueue/timer.c b/tests/sys/kqueue/libkqueue/timer.c
index 76dfc99e11f0..330c22c62bc5 100644
--- a/tests/sys/kqueue/libkqueue/timer.c
+++ b/tests/sys/kqueue/libkqueue/timer.c
@@ -248,6 +248,35 @@ test_abstime(void)
}
static void
+test_abstime_epoch(void)
+{
+ const char *test_id = "kevent(EVFILT_TIMER (EPOCH), NOTE_ABSTIME)";
+ struct kevent kev;
+
+ test_begin(test_id);
+
+ test_no_kevents();
+
+ EV_SET(&kev, vnode_fd, EVFILT_TIMER, EV_ADD, NOTE_ABSTIME, 0,
+ NULL);
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+ err(1, "%s", test_id);
+
+ /* Retrieve the event */
+ kev.flags = EV_ADD;
+ kev.data = 1;
+ kev.fflags = 0;
+ kevent_cmp(&kev, kevent_get(kqfd));
+
+ /* Delete the event */
+ kev.flags = EV_DELETE;
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+ err(1, "%s", test_id);
+
+ success();
+}
+
+static void
test_abstime_preboot(void)
{
const char *test_id = "kevent(EVFILT_TIMER (PREBOOT), EV_ONESHOT, NOTE_ABSTIME)";
@@ -599,6 +628,7 @@ test_evfilt_timer(void)
test_oneshot();
test_periodic();
test_abstime();
+ test_abstime_epoch();
test_abstime_preboot();
test_abstime_postboot();
test_update();