From 75263f7908a02f5673c25df9bcdaed9fe5f9de5c Mon Sep 17 00:00:00 2001 From: Andrew Cooper Date: Wed, 14 Feb 2018 12:38:07 +0100 Subject: [PATCH] x86/hvm: Use SAVE_ALL to construct the cpu_user_regs frame after VMExit No practical change. One side effect in debug builds is that %rbp is inverted in the manner expected by the stack unwinder to indicate a interrupt frame. This is part of XSA-254. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich Reviewed-by: Wei Liu master commit: 13682ca8c94bd5612a44f7f1edc1fd8ff675dacb master date: 2018-01-05 19:57:08 +0000 --- xen/arch/x86/hvm/svm/entry.S | 22 ++++------------------ xen/arch/x86/hvm/vmx/entry.S | 17 ++--------------- 2 files changed, 6 insertions(+), 33 deletions(-) diff --git a/xen/arch/x86/hvm/svm/entry.S b/xen/arch/x86/hvm/svm/entry.S index e816d661ab..442d2d62c6 100644 --- a/xen/arch/x86/hvm/svm/entry.S +++ b/xen/arch/x86/hvm/svm/entry.S @@ -97,24 +97,10 @@ UNLIKELY_END(svm_trace) VMRUN - GET_CURRENT(%rax) - push %rdi - push %rsi - push %rdx - push %rcx - mov VCPU_svm_vmcb(%rax),%rcx - push %rax - push %r8 - push %r9 - push %r10 - push %r11 - push %rbx - mov %rax,%rbx - push %rbp - push %r12 - push %r13 - push %r14 - push %r15 + SAVE_ALL + + GET_CURRENT(%rbx) + mov VCPU_svm_vmcb(%rbx),%rcx movb $0,VCPU_svm_vmcb_in_sync(%rbx) mov VMCB_rax(%rcx),%rax diff --git a/xen/arch/x86/hvm/vmx/entry.S b/xen/arch/x86/hvm/vmx/entry.S index a5438a47f3..1744615bc6 100644 --- a/xen/arch/x86/hvm/vmx/entry.S +++ b/xen/arch/x86/hvm/vmx/entry.S @@ -29,23 +29,10 @@ #define VMLAUNCH .byte 0x0f,0x01,0xc2 ENTRY(vmx_asm_vmexit_handler) - push %rdi - push %rsi - push %rdx - push %rcx - push %rax + SAVE_ALL + mov %cr2,%rax - push %r8 - push %r9 - push %r10 - push %r11 - push %rbx GET_CURRENT(%rbx) - push %rbp - push %r12 - push %r13 - push %r14 - push %r15 movb $1,VCPU_vmx_launched(%rbx) mov %rax,VCPU_hvm_guest_cr2(%rbx)