]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
thread: Simplify sanitizer integration with thread creation
authorMark Johnston <markj@FreeBSD.org>
Mon, 22 Apr 2024 15:43:17 +0000 (11:43 -0400)
committerMark Johnston <markj@FreeBSD.org>
Mon, 22 Apr 2024 15:46:59 +0000 (11:46 -0400)
commit800da341bc4a35f4b4d82d104b130825d9a42ffa
tree882a8212c5521ba5e908be6106a407c0e8265d48
parentdd03eafacba962c9dcec929c3ed9d63e7c43da3a
thread: Simplify sanitizer integration with thread creation

fork() may allocate a new thread in one of two ways: from UMA, or cached
in a freed proc that was just allocated from UMA.  In either case, KASAN
and KMSAN need to initialize some state; in particular they need to
initialize the shadow mapping of the new thread's stack.

This is done differently between KASAN and KMSAN, which is confusing.
This patch improves things a bit:
- Add a new thread_recycle() function, which moves all kernel stack
  handling out of kern_fork.c, since it doesn't really belong there.
- Then, thread_alloc_stack() has only one local caller, so just inline
  it.
- Avoid redundant shadow stack initialization: thread_alloc()
  initializes the KMSAN shadow stack (via kmsan_thread_alloc()) even
  through vm_thread_new() already did that.
- Add kasan_thread_alloc(), for consistency with kmsan_thread_alloc().

No functional change intended.

Reviewed by: khng
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D44891
sys/kern/kern_fork.c
sys/kern/kern_thread.c
sys/kern/subr_asan.c
sys/sys/asan.h
sys/sys/proc.h
sys/vm/vm_glue.c