Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:Update
xen.7317
5a9eb7f1-x86-xpti-dont-map-stack-guard-pages.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 5a9eb7f1-x86-xpti-dont-map-stack-guard-pages.patch of Package xen.7317
# Commit d303784b68237ff3050daa184f560179dda21b8c # Date 2018-03-06 16:46:57 +0100 # Author Jan Beulich <jbeulich@suse.com> # Committer Jan Beulich <jbeulich@suse.com> x86/xpti: don't map stack guard pages Other than for the main mappings, don't even do this in release builds, as there are no huge page shattering concerns here. Note that since we don't run on the restructed page tables while HVM guests execute, the non-present mappings won't trigger the triple fault issue AMD SVM is susceptible to with our current placement of STGI vs TR loading. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Andrew Cooper <andrew.cooper3@citrix.com> --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -6501,6 +6501,14 @@ void memguard_unguard_stack(void *p) memguard_unguard_range(p, PAGE_SIZE); } +bool_t memguard_is_stack_guard_page(unsigned long addr) +{ + addr &= STACK_SIZE - 1; + + return addr >= STACK_SIZE - PRIMARY_STACK_SIZE - PAGE_SIZE && + addr < STACK_SIZE - PRIMARY_STACK_SIZE; +} + void arch_dump_shared_mem_info(void) { printk("Shared frames %u -- Saved frames %u\n", --- a/xen/arch/x86/smpboot.c +++ b/xen/arch/x86/smpboot.c @@ -767,7 +767,8 @@ static int setup_cpu_root_pgt(unsigned i /* Install direct map page table entries for stack, IDT, and TSS. */ for ( off = rc = 0; !rc && off < STACK_SIZE; off += PAGE_SIZE ) - rc = clone_mapping(__va(__pa(stack_base[cpu])) + off, rpt); + if ( !memguard_is_stack_guard_page(off) ) + rc = clone_mapping(__va(__pa(stack_base[cpu])) + off, rpt); if ( !rc ) rc = clone_mapping(idt_tables[cpu], rpt); --- a/xen/include/asm-x86/mm.h +++ b/xen/include/asm-x86/mm.h @@ -534,6 +534,7 @@ void memguard_unguard_range(void *p, uns void memguard_guard_stack(void *p); void memguard_unguard_stack(void *p); +bool_t __attribute_const__ memguard_is_stack_guard_page(unsigned long addr); int ptwr_do_page_fault(struct vcpu *, unsigned long, struct cpu_user_regs *);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor