aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2023-07-24 22:47:42 +0000
committerMark Johnston <markj@FreeBSD.org>2023-07-24 22:49:36 +0000
commit789df254cc9e20c860ccc149b94dd1f92843ec9a (patch)
treeae300ba6bead1583a79315b5a73b5b79975ca912
parent5b353925ff61b9ddb97bb453ba75278b578ed7d9 (diff)
downloadsrc-789df254cc9e20c860ccc149b94dd1f92843ec9a.tar.gz
src-789df254cc9e20c860ccc149b94dd1f92843ec9a.zip
amd64: Use a larger boot stack
With sanitizers enabled, it becomes possible to overflow the stack when only a single page is used. Follow arm64's example and use the default kernel stack size instead. This is a bit wasteful, but without a guard page, overflow merely corrupts adjacent .bss entries and is thus difficult to debug. Note, with a GENERIC kernel we already consume over half of the available boot stack space, see the review for an example. Reviewed by: kib Reported by: Jenkins MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D41166
-rw-r--r--sys/amd64/amd64/genassym.c1
-rw-r--r--sys/amd64/amd64/locore.S4
2 files changed, 3 insertions, 2 deletions
diff --git a/sys/amd64/amd64/genassym.c b/sys/amd64/amd64/genassym.c
index feb3c7f503ce..4c17561b6e39 100644
--- a/sys/amd64/amd64/genassym.c
+++ b/sys/amd64/amd64/genassym.c
@@ -116,6 +116,7 @@ ASSYM(KERNBASE, KERNBASE);
ASSYM(KERNLOAD, KERNLOAD);
ASSYM(DMAP_MIN_ADDRESS, DMAP_MIN_ADDRESS);
ASSYM(DMAP_MAX_ADDRESS, DMAP_MAX_ADDRESS);
+ASSYM(KSTACK_PAGES, KSTACK_PAGES);
ASSYM(PCB_R15, offsetof(struct pcb, pcb_r15));
ASSYM(PCB_R14, offsetof(struct pcb, pcb_r14));
diff --git a/sys/amd64/amd64/locore.S b/sys/amd64/amd64/locore.S
index f034a25c9b1b..41386756021e 100644
--- a/sys/amd64/amd64/locore.S
+++ b/sys/amd64/amd64/locore.S
@@ -48,7 +48,7 @@
.set dmapbase,DMAP_MIN_ADDRESS
.set dmapend,DMAP_MAX_ADDRESS
-#define BOOTSTACK_SIZE 4096
+#define BOOTSTACK_SIZE (PAGE_SIZE * KSTACK_PAGES)
.text
/**********************************************************************
@@ -148,7 +148,7 @@ ENTRY(la57_trampoline_gdt)
ENTRY(la57_trampoline_end)
.bss
- ALIGN_DATA /* just to be sure */
+ .p2align PAGE_SHIFT
.globl bootstack
.space BOOTSTACK_SIZE /* space for bootstack - temporary stack */
bootstack: