mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-11-22 19:51:04 +01:00
tools/uma/smrstress: fix kthread exit
By convention, kernel threads must call kthread_exit() instead of blindly returning from the thread function. We have some safety measure in fork_exit(), which checks for the P_KPROC p_flag and does kthread_exit() for kernel thread that forgot to do it itself. But this workaround only works for kernel threads belonging to the kernel process. If a kernel thread is attached to the normal process with live userspace, and does not call kthread_exit(), then the workaround is not activated, and for amd64 at least, the return from the thread function/fork_exit() results in the return to userspace with the copy of frame from the thread that did kthread_add(). Practically for smrstress, this destroys the user stack of the still active frame in the other thread, which was the caller of kthread_add(). Fix it by adding kthread_exit() to the thread function. Reported and tested by: pho Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D35999
This commit is contained in:
parent
4670f90846
commit
4690e20eed
@ -123,6 +123,7 @@ smrs_thread(void *arg)
|
|||||||
else
|
else
|
||||||
smrs_read();
|
smrs_read();
|
||||||
atomic_add_int(&smrs_completed, 1);
|
atomic_add_int(&smrs_completed, 1);
|
||||||
|
kthread_exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user