• Kirill A. Shutemov's avatar
    x86/tdx: Handle load_unaligned_zeropad() page-cross to a shared page · 1e776965
    Kirill A. Shutemov authored
    load_unaligned_zeropad() can lead to unwanted loads across page boundaries.
    The unwanted loads are typically harmless. But, they might be made to
    totally unrelated or even unmapped memory. load_unaligned_zeropad()
    relies on exception fixup (#PF, #GP and now #VE) to recover from these
    unwanted loads.
    
    In TDX guests, the second page can be shared page and a VMM may configure
    it to trigger #VE.
    
    The kernel assumes that #VE on a shared page is an MMIO access and tries to
    decode instruction to handle it. In case of load_unaligned_zeropad() it
    may result in confusion as it is not MMIO access.
    
    Fix it by detecting split page MMIO accesses and failing them.
    load_unaligned_zeropad() will recover using exception fixups.
    
    The issue was discovered by analysis and reproduced artificially. It was
    not triggered during testing.
    
    [ dhansen: fix up changelogs and comments for grammar and clarity,
    	   plus incorporate Kirill's off-by-one fix]
    Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Link: https://lkml.kernel.org/r/20220614120135.14812-4-kirill.shutemov@linux.intel.com
    1e776965
tdx.c 19.7 KB