[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 07/16] x86/shstk: Re-layout the stack block for shadow stacks
On 02.05.2020 00:58, Andrew Cooper wrote: > --- a/xen/arch/x86/cpu/common.c > +++ b/xen/arch/x86/cpu/common.c > @@ -732,14 +732,14 @@ void load_system_tables(void) > .rsp2 = 0x8600111111111111ul, > > /* > - * MCE, NMI and Double Fault handlers get their own stacks. > + * #DB, NMI, DF and #MCE handlers get their own stacks. Then also #DF and #MC? > --- a/xen/arch/x86/mm.c > +++ b/xen/arch/x86/mm.c > @@ -6002,25 +6002,18 @@ void memguard_unguard_range(void *p, unsigned long l) > > void memguard_guard_stack(void *p) > { > - /* IST_MAX IST pages + at least 1 guard page + primary stack. */ > - BUILD_BUG_ON((IST_MAX + 1) * PAGE_SIZE + PRIMARY_STACK_SIZE > > STACK_SIZE); > + map_pages_to_xen((unsigned long)p, virt_to_mfn(p), 1, _PAGE_NONE); > > - memguard_guard_range(p + IST_MAX * PAGE_SIZE, > - STACK_SIZE - PRIMARY_STACK_SIZE - IST_MAX * > PAGE_SIZE); > + p += 5 * PAGE_SIZE; The literal 5 here and ... > + map_pages_to_xen((unsigned long)p, virt_to_mfn(p), 1, _PAGE_NONE); > } > > void memguard_unguard_stack(void *p) > { > - memguard_unguard_range(p + IST_MAX * PAGE_SIZE, > - STACK_SIZE - PRIMARY_STACK_SIZE - IST_MAX * > PAGE_SIZE); > -} > - > -bool memguard_is_stack_guard_page(unsigned long addr) > -{ > - addr &= STACK_SIZE - 1; > + map_pages_to_xen((unsigned long)p, virt_to_mfn(p), 1, > PAGE_HYPERVISOR_RW); > > - return addr >= IST_MAX * PAGE_SIZE && > - addr < STACK_SIZE - PRIMARY_STACK_SIZE; > + p += 5 * PAGE_SIZE; ... here could do with macro-izing: IST_MAX + 1 would already be a little better, I guess. Preferably with adjustments along these lines Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |