Changeset View
Changeset View
Standalone View
Standalone View
sys/x86/x86/stack_machdep.c
Show First 20 Lines • Show All 64 Lines • ▼ Show 20 Lines | |||||
#ifdef SMP | #ifdef SMP | ||||
static struct stack *stack_intr_stack; | static struct stack *stack_intr_stack; | ||||
static struct thread *stack_intr_td; | static struct thread *stack_intr_td; | ||||
static struct mtx intr_lock; | static struct mtx intr_lock; | ||||
MTX_SYSINIT(intr_lock, &intr_lock, "stack intr", MTX_DEF); | MTX_SYSINIT(intr_lock, &intr_lock, "stack intr", MTX_DEF); | ||||
#endif | #endif | ||||
static void | static void __nosanitizeaddress | ||||
kib: I have no idea what is going on there, but don't all called functions require the same handling… | |||||
markjAuthorUnsubmitted Done Inline Actionsstack_zero() is fine, it's the inline dereference of the frame pointer that potentially causes problems. markj: stack_zero() is fine, it's the inline dereference of the frame pointer that potentially causes… | |||||
stack_capture(struct thread *td, struct stack *st, register_t fp) | stack_capture(struct thread *td, struct stack *st, register_t fp) | ||||
{ | { | ||||
x86_frame_t frame; | x86_frame_t frame; | ||||
vm_offset_t callpc; | vm_offset_t callpc; | ||||
stack_zero(st); | stack_zero(st); | ||||
frame = (x86_frame_t)fp; | frame = (x86_frame_t)fp; | ||||
while (1) { | while (1) { | ||||
▲ Show 20 Lines • Show All 95 Lines • Show Last 20 Lines |
I have no idea what is going on there, but don't all called functions require the same handling, e.g. stack_zero? Is it happen to work because struct stack itself is 'not poisoned'?