summaryrefslogtreecommitdiffstats
path: root/ObsoleteFiles.inc
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2016-02-16 21:36:48 +0000
committerjhb <jhb@FreeBSD.org>2016-02-16 21:36:48 +0000
commit221a97fa10ec668d02e3ab059f5d6136f88f6fac (patch)
treec8ca3472216271e508da37305407bbec7ac6ec6a /ObsoleteFiles.inc
parentfaf4c803e377bc419cf025be083fd5d8ddd6f3ef (diff)
downloadFreeBSD-src-221a97fa10ec668d02e3ab059f5d6136f88f6fac.zip
FreeBSD-src-221a97fa10ec668d02e3ab059f5d6136f88f6fac.tar.gz
MFC 295418,295419:
Fix hangs or panics when misbehaved kernel threads return from their main function. 295418: Mark proc0 as a kernel process via the P_KTHREAD flag. All other kernel processes have this flag set and all threads in proc0 (including thread0) have the similar TDP_KTHREAD flag set. 295419: Call kthread_exit() rather than kproc_exit() for a premature kthread exit. Kernel threads (and processes) are supposed to call kthread_exit() (or kproc_exit()) to terminate. However, the kernel includes a fallback in fork_exit() to force a kthread exit if a kernel thread's "main" routine returns. This fallback was added back when the kernel only had processes and was not updated to call kthread_exit() instead of kproc_exit() when threads were added to the kernel. This mistake was particularly exciting when the errant thread belonged to proc0. Due to the missing P_KTHREAD flag the fallback did not kick in and instead tried to return to userland via whatever garbage was in the trapframe. With P_KTHREAD set it tried to terminate proc0 resulting in other amusements. PR: 204999 Approved by: re (glebius)
Diffstat (limited to 'ObsoleteFiles.inc')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud