DF-5728 / panic.txt
DF-5728 — kernel stack guard double-fault frames (both reproductions, stock kernel)
=== RUN 1 (depth 60, sysctl/thread-context DDB entry, CPU1) ===
DOUBLE FAULT - KERNEL STACK GUARD HIT!
Fatal double fault
rip = 0xffffffff802ca73c db_unary+0xc (nm: ffffffff802ca730 t db_unary)
rsp = 0xfffff801184cf000 page-aligned -> 16 KB kstack guard page
rbp = 0xfffff801184cf008
cpuid = 1; lapic id = 1
panic: double fault
cpuid = 1
Trace beginning at frame 0xfffff8004f06cec8
dblfault_handler() at dblfault_handler+0x10c 0xffffffff80bd682c
dblfault_handler() at dblfault_handler+0x10c 0xffffffff80bd682c
boot() called on cpu#1
Uptime: 1m8s
Dumping 570 MB ... Dump complete
Preceding session (same run):
p (1+(2*3)) -> 7 (evaluator sane)
p ((( x30 ... 1 -> Syntax error, db> returns (30 levels = 8.2 KB: survives)
p ((( x60 ... 1 -> DOUBLE FAULT (above) (16.3 KB)
=== RUN 2 (depth 40, fresh boot, CPU3) ===
DOUBLE FAULT
Fatal double fault
rip = 0xffffffff802cba0c db_force_whitespace+0xc (nm: ffffffff802cba00 T)
rsp = 0xfffff80117e77000 page-aligned -> kstack guard page
rbp = 0xfffff80117e77008
cpuid = 3; lapic id = 3
panic: double fault
cpuid = 3
Trace beginning at frame 0xfffff80089631ec8
dblfault_handler() at dblfault_handler+0x10c 0xffffffff80bd682c
dblfault_handler() at dblfault_handler+0x10c 0xffffffff80bd682c
boot() called on cpu#3
Uptime: 21s
Dumping 677 MB ... Dump complete
(wedge followup: "Warning: thread switch from interrupt..." for thread (sysctl))
Frame budget (measured from /boot/kernel/kernel objdump):
per '(' level = db_term(32) + db_expression(16) + db_shift_expr(64)
+ db_add_expr(64) + db_mult_expr(64) + db_unary(32) = 272 B
30 levels = 8.2 KB 40 = 10.9 KB 60 = 16.3 KB 118 = 32.1 KB
kstack = UPAGES(4) * PAGE_SIZE = 16 KB + guard page