timeout: make to_kclock validation more rigorous
authorcheloha <cheloha@openbsd.org>
Fri, 23 Feb 2024 16:51:39 +0000 (16:51 +0000)
committercheloha <cheloha@openbsd.org>
Fri, 23 Feb 2024 16:51:39 +0000 (16:51 +0000)
commit0a34672fd384e2c7c09aeaf1c08e7ad09e7b90a5
treeef3a430624c0ee4469827b77d10b1a1e413cd318
parentbbad591d07d4c47fe5d7de10ec79290667ac9c62
timeout: make to_kclock validation more rigorous

In kern_timeout.c, the to_kclock checks are not strict enough to catch
all plausible programmer mistakes.  Tighten them up:

- timeout_set_flags: KASSERT that kclock is valid
- timeout_abs_ts: KASSERT that to_kclock is KCLOCK_UPTIME

We can also add to_kclock validation to softclock() and
db_show_timeout(), which may help to debug memory corruption:

- softclock: panic if to_kclock is not KCLOCK_NONE or KCLOCK_UPTIME
- db_show_timeout: print warning if to_kclock is invalid

Prompted by bluhm@ in response to a syzbot panic.  Hopefully these
changes help to narrow down the root cause.

Link: https://syzkaller.appspot.com/bug?extid=49d3f7118413963f651a
Reported-by: syzbot+49d3f7118413963f651a@syzkaller.appspotmail.com
ok bluhm@
sys/kern/kern_timeout.c