[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 2/7] Clear AC bit in RFLAGS to protect Xen itself by SMAP
Clear AC bit in RFLAGS at the beginning of exception, interrupt, hypercall, so Xen itself can be protected by SMAP mechanism. Signed-off-by: Feng Wu <feng.wu@xxxxxxxxx> --- xen/arch/x86/x86_64/compat/entry.S | 1 + xen/arch/x86/x86_64/entry.S | 26 ++++++++++++++++++++++++++ xen/include/asm-x86/x86_64/asm_defns.h | 1 + 3 files changed, 28 insertions(+) diff --git a/xen/arch/x86/x86_64/compat/entry.S b/xen/arch/x86/x86_64/compat/entry.S index 32b3bcc..ac594c9 100644 --- a/xen/arch/x86/x86_64/compat/entry.S +++ b/xen/arch/x86/x86_64/compat/entry.S @@ -13,6 +13,7 @@ #include <irq_vectors.h> ENTRY(compat_hypercall) + ASM_CLAC pushq $0 SAVE_VOLATILE type=TRAP_syscall compat=1 diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S index 3ea4683..d294064 100644 --- a/xen/arch/x86/x86_64/entry.S +++ b/xen/arch/x86/x86_64/entry.S @@ -120,6 +120,7 @@ restore_all_xen: * the space left by the trampoline. */ ENTRY(syscall_enter) + ASM_CLAC sti movl $FLAT_KERNEL_SS,24(%rsp) pushq %rcx @@ -268,6 +269,7 @@ bad_hypercall: jmp test_all_events ENTRY(sysenter_entry) + ASM_CLAC sti pushq $FLAT_USER_SS pushq $0 @@ -309,6 +311,7 @@ UNLIKELY_END(sysenter_gpf) jmp .Lbounce_exception ENTRY(int80_direct_trap) + ASM_CLAC pushq $0 SAVE_VOLATILE 0x80 @@ -476,6 +479,7 @@ ENTRY(ret_from_intr) jmp compat_test_all_events ENTRY(page_fault) + ASM_CLAC movl $TRAP_page_fault,4(%rsp) /* No special register assumptions. */ GLOBAL(handle_exception) @@ -532,81 +536,98 @@ FATAL_exception_with_ints_disabled: ud2 ENTRY(divide_error) + ASM_CLAC pushq $0 movl $TRAP_divide_error,4(%rsp) jmp handle_exception ENTRY(coprocessor_error) + ASM_CLAC pushq $0 movl $TRAP_copro_error,4(%rsp) jmp handle_exception ENTRY(simd_coprocessor_error) + ASM_CLAC pushq $0 movl $TRAP_simd_error,4(%rsp) jmp handle_exception ENTRY(device_not_available) + ASM_CLAC pushq $0 movl $TRAP_no_device,4(%rsp) jmp handle_exception ENTRY(debug) + ASM_CLAC pushq $0 movl $TRAP_debug,4(%rsp) jmp handle_exception ENTRY(int3) + ASM_CLAC pushq $0 movl $TRAP_int3,4(%rsp) jmp handle_exception ENTRY(overflow) + ASM_CLAC pushq $0 movl $TRAP_overflow,4(%rsp) jmp handle_exception ENTRY(bounds) + ASM_CLAC pushq $0 movl $TRAP_bounds,4(%rsp) jmp handle_exception ENTRY(invalid_op) + ASM_CLAC pushq $0 movl $TRAP_invalid_op,4(%rsp) jmp handle_exception ENTRY(coprocessor_segment_overrun) + ASM_CLAC pushq $0 movl $TRAP_copro_seg,4(%rsp) jmp handle_exception ENTRY(invalid_TSS) + ASM_CLAC movl $TRAP_invalid_tss,4(%rsp) jmp handle_exception ENTRY(segment_not_present) + ASM_CLAC movl $TRAP_no_segment,4(%rsp) jmp handle_exception ENTRY(stack_segment) + ASM_CLAC movl $TRAP_stack_error,4(%rsp) jmp handle_exception ENTRY(general_protection) + ASM_CLAC movl $TRAP_gp_fault,4(%rsp) jmp handle_exception ENTRY(alignment_check) + ASM_CLAC movl $TRAP_alignment_check,4(%rsp) jmp handle_exception ENTRY(spurious_interrupt_bug) + ASM_CLAC pushq $0 movl $TRAP_spurious_int,4(%rsp) jmp handle_exception ENTRY(double_fault) + ASM_CLAC movl $TRAP_double_fault,4(%rsp) SAVE_ALL movq %rsp,%rdi @@ -615,6 +636,7 @@ ENTRY(double_fault) .pushsection .init.text, "ax", @progbits ENTRY(early_page_fault) + ASM_CLAC SAVE_ALL movq %rsp,%rdi call do_early_page_fault @@ -622,6 +644,7 @@ ENTRY(early_page_fault) .popsection ENTRY(nmi) + ASM_CLAC pushq $0 movl $TRAP_nmi,4(%rsp) handle_ist_exception: @@ -659,6 +682,7 @@ handle_ist_exception: jmp compat_restore_all_guest ENTRY(nmi_crash) + ASM_CLAC pushq $0 movl $TRAP_nmi,4(%rsp) SAVE_ALL @@ -667,6 +691,7 @@ ENTRY(nmi_crash) ud2 ENTRY(machine_check) + ASM_CLAC pushq $0 movl $TRAP_machine_check,4(%rsp) jmp handle_ist_exception @@ -689,6 +714,7 @@ ENTRY(enable_nmis) /* No op trap handler. Required for kexec crash path. */ GLOBAL(trap_nop) + ASM_CLAC iretq diff --git a/xen/include/asm-x86/x86_64/asm_defns.h b/xen/include/asm-x86/x86_64/asm_defns.h index bf63ac1..69f76b2 100644 --- a/xen/include/asm-x86/x86_64/asm_defns.h +++ b/xen/include/asm-x86/x86_64/asm_defns.h @@ -212,6 +212,7 @@ __asm__( \ "\n" __ALIGN_STR"\n" \ "common_interrupt:\n\t" \ + ASM_CLAC(%)"\n\t" \ STR(SAVE_ALL) "\n\t" \ "movq %rsp,%rdi\n\t" \ "callq " STR(do_IRQ) "\n\t" \ -- 1.8.3.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |