Page MenuHomeFreeBSD

D44882.diff
No OneTemporary

D44882.diff

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_thread_alloc(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 <sys/systm.h>
#include <sys/asan.h>
#include <sys/kernel.h>
+#include <sys/proc.h>
#include <sys/stack.h>
#include <sys/sysctl.h>
@@ -429,6 +430,15 @@
}
}
+void
+kasan_thread_alloc(struct thread *td)
+{
+ if (td->td_kstack != 0) {
+ 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
@@ -53,14 +53,18 @@
#define KASAN_KSTACK_FREED 0xFE
#define KASAN_EXEC_ARGS_FREED 0xFF
+struct thread;
+
void kasan_init(void);
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_thread_alloc(struct thread *);
#else /* KASAN */
#define kasan_init()
#define kasan_shadow_map(a, s)
#define kasan_mark(p, s, l, c)
+#define kasan_thread_alloc(t)
#endif /* !KASAN */
#endif /* !_SYS_ASAN_H_ */
diff --git a/sys/vm/vm_glue.c b/sys/vm/vm_glue.c
--- a/sys/vm/vm_glue.c
+++ b/sys/vm/vm_glue.c
@@ -543,7 +543,7 @@
td->td_kstack = ks;
td->td_kstack_pages = pages;
td->td_kstack_domain = ks_domain;
- kasan_mark((void *)ks, ptoa(pages), ptoa(pages), 0);
+ kasan_thread_alloc(td);
kmsan_mark((void *)ks, ptoa(pages), KMSAN_STATE_UNINIT);
return (1);
}

File Metadata

Mime Type
text/plain
Expires
Thu, Sep 26, 12:23 PM (22 h, 2 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
12833685
Default Alt Text
D44882.diff (1 KB)

Event Timeline