CVSROOT:        /cvs
Module name:    src
Changes by:     v...@cvs.openbsd.org    2018/07/07 09:19:25

Modified files:
        sys/kern       : kern_sched.c 

Log message:
Release the kernel lock fully on thread exit. This prevents a locking
error that would happen otherwise when a traced and stopped
multithreaded process is forced to exit. The error shows up as a kernel
panic when WITNESS is enabled. Without WITNESS, the error causes
a system hang.

sched_exit() has expected that a single KERNEL_UNLOCK() would release
the lock completely. That assumption is wrong when an exit happens
through the signal tracing logic:

sched_exit
exit1
single_thread_check
single_thread_set
issignal  <-- KERNEL_LOCK()
userret  <-- KERNEL_LOCK()
syscall

The error is a regression of r1.216 of kern_sig.c.

Panic reported and fix tested by Laurence Tratt
OK mpi@

Reply via email to