• Lai Jiangshan's avatar
    x86/sev: Annotate stack change in the #VC handler · c42b1451
    Lai Jiangshan authored
    In idtentry_vc(), vc_switch_off_ist() determines a safe stack to
    switch to, off of the IST stack. Annotate the new stack switch with
    ENCODE_FRAME_POINTER in case UNWINDER_FRAME_POINTER is used.
    
    A stack walk before looks like this:
    
      CPU: 0 PID: 0 Comm: swapper Not tainted 5.18.0-rc7+ #2
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
      Call Trace:
       <TASK>
       dump_stack_lvl
       dump_stack
       kernel_exc_vmm_communication
       asm_exc_vmm_communication
       ? native_read_msr
       ? __x2apic_disable.part.0
       ? x2apic_setup
       ? cpu_init
       ? trap_init
       ? start_kernel
       ? x86_64_start_reservations
       ? x86_64_start_kernel
       ? secondary_startup_64_no_verify
       </TASK>
    
    and with the fix, the stack dump is exact:
    
      CPU: 0 PID: 0 Comm: swapper Not tainted 5.18.0-rc7+ #3
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
      Call Trace:
       <TASK>
       dump_stack_lvl
       dump_stack
       kernel_exc_vmm_communication
       asm_exc_vmm_communication
      RIP: 0010:native_read_msr
      Code: ...
      < snipped regs >
       ? __x2apic_disable.part.0
       x2apic_setup
       cpu_init
       trap_init
       start_kernel
       x86_64_start_reservations
       x86_64_start_kernel
       secondary_startup_64_no_verify
       </TASK>
    
      [ bp: Test in a SEV-ES guest and rewrite the commit message to
        explain what exactly this does. ]
    
    Fixes: a13644f3 ("x86/entry/64: Add entry code for #VC handler")
    Signed-off-by: default avatarLai Jiangshan <jiangshan.ljs@antgroup.com>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Acked-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
    Link: https://lore.kernel.org/r/20220316041612.71357-1-jiangshanlai@gmail.com
    c42b1451
entry_64.S 41.2 KB