diff options
author | Kyle Evans <kevans@FreeBSD.org> | 2021-10-01 16:59:31 +0000 |
---|---|---|
committer | Kyle Evans <kevans@FreeBSD.org> | 2021-10-01 18:17:30 +0000 |
commit | 2f4dbe279f6b5eb87ec493d96f6943ffdb603ba0 (patch) | |
tree | 8d28b049c7f34db9f9e6827d1ac76e0ec72527da /tests | |
parent | 4aed5c3c9d1d78986d3feba3f128187c59fb2dfe (diff) | |
download | src-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.c | 30 |
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(); |