CVSROOT: /cvs Module name: src Changes by: m...@cvs.openbsd.org 2024/08/11 09:10:53
Modified files: sys/kern : kern_exit.c kern_fork.c kern_sysctl.c sys/sys : proc.h Log message: Make exit1() wait sysctl(2) `allprocess' loops. Regardless on wired userland memory, KERN_FILE_BYPID and KERN_FILE_BYUID `allprocess' loops have netlock provided sleep points, so concurrent process exit(1) could crash kernel. The main exit1() problem is that process teardown begins while process is still linked to `allprocess' list, and current code doesn't allow to unlink it first. Wait for concurrent sysctl(2) `allprocess' loops between PS_EXITING bit setting and list unlinking. Both KERN_FILE_BYPID and KERN_FILE_BYUID loops do PS_EXITING check and won't deal with dying process. Concurrent exit1() thread will wait loops keeping process linked to `allprocess' list. Tested with i386 dpb(1) run. Stress tests and ok bluhm.