diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -1028,9 +1028,7 @@ goto fail2; } } else { - kasan_mark((void *)td2->td_kstack, - ptoa(td2->td_kstack_pages), - ptoa(td2->td_kstack_pages), 0); + kasan_kstack_unpoison(td2); } } diff --git a/sys/kern/subr_asan.c b/sys/kern/subr_asan.c --- a/sys/kern/subr_asan.c +++ b/sys/kern/subr_asan.c @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -429,6 +430,13 @@ } } +void +kasan_kstack_unpoison(struct thread *td) +{ + kasan_mark((void *)td->td_kstack, ptoa(td->td_kstack_pages), + ptoa(td->td_kstack_pages), 0); +} + /* -------------------------------------------------------------------------- */ void * diff --git a/sys/sys/asan.h b/sys/sys/asan.h --- a/sys/sys/asan.h +++ b/sys/sys/asan.h @@ -57,10 +57,12 @@ void kasan_init_early(vm_offset_t, size_t); void kasan_shadow_map(vm_offset_t, size_t); void kasan_mark(const void *, size_t, size_t, uint8_t); +void kasan_kstack_unpoison(struct thread *); #else /* KASAN */ #define kasan_init() #define kasan_shadow_map(a, s) #define kasan_mark(p, s, l, c) +#define kasan_kstack_unpoison(t) #endif /* !KASAN */ #endif /* !_SYS_ASAN_H_ */