• Ashwin Dayanand Kamat's avatar
    x86/sev: Fix kernel crash due to late update to read-only ghcb_version · 27d25348
    Ashwin Dayanand Kamat authored
    A write-access violation page fault kernel crash was observed while running
    cpuhotplug LTP testcases on SEV-ES enabled systems. The crash was
    observed during hotplug, after the CPU was offlined and the process
    was migrated to different CPU. setup_ghcb() is called again which
    tries to update ghcb_version in sev_es_negotiate_protocol(). Ideally this
    is a read_only variable which is initialised during booting.
    
    Trying to write it results in a pagefault:
    
      BUG: unable to handle page fault for address: ffffffffba556e70
      #PF: supervisor write access in kernel mode
      #PF: error_code(0x0003) - permissions violation
      [ ...]
      Call Trace:
       <TASK>
       ? __die_body.cold+0x1a/0x1f
       ? __die+0x2a/0x35
       ? page_fault_oops+0x10c/0x270
       ? setup_ghcb+0x71/0x100
       ? __x86_return_thunk+0x5/0x6
       ? search_exception_tables+0x60/0x70
       ? __x86_return_thunk+0x5/0x6
       ? fixup_exception+0x27/0x320
       ? kernelmode_fixup_or_oops+0xa2/0x120
       ? __bad_area_nosemaphore+0x16a/0x1b0
       ? kernel_exc_vmm_communication+0x60/0xb0
       ? bad_area_nosemaphore+0x16/0x20
       ? do_kern_addr_fault+0x7a/0x90
       ? exc_page_fault+0xbd/0x160
       ? asm_exc_page_fault+0x27/0x30
       ? setup_ghcb+0x71/0x100
       ? setup_ghcb+0xe/0x100
       cpu_init_exception_handling+0x1b9/0x1f0
    
    The fix is to call sev_es_negotiate_protocol() only in the BSP boot phase,
    and it only needs to be done once in any case.
    
    [ mingo: Refined the changelog. ]
    
    Fixes: 95d33bfa ("x86/sev: Register GHCB memory when SEV-SNP is active")
    Suggested-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
    Co-developed-by: default avatarBo Gan <bo.gan@broadcom.com>
    Signed-off-by: default avatarBo Gan <bo.gan@broadcom.com>
    Signed-off-by: default avatarAshwin Dayanand Kamat <ashwin.kamat@broadcom.com>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Acked-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
    Link: https://lore.kernel.org/r/1701254429-18250-1-git-send-email-kashwindayan@vmware.com
    27d25348
sev.c 55.2 KB