|
[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 |