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 |
||
---|---|---|
.. | ||
boot | ||
bsdbox | ||
build | ||
bus_space | ||
coccinelle | ||
debugscripts | ||
diag | ||
ifnet | ||
kerneldoc | ||
LibraryReport | ||
lua | ||
pkgbase | ||
regression | ||
sched | ||
test | ||
tools | ||
uma/smrstress | ||
install.sh | ||
make_libdeps.sh | ||
README | ||
tinder.sh |
$FreeBSD$ This directory tree contains tools used for the maintenance and testing of FreeBSD. There is no toplevel Makefile structure since these tools are not meant to be built as part of the standard system, though there may be individual Makefiles in some of the subdirs. Please read the README files in the subdirs for further information.