• Jane Malalane's avatar
    x86/cpu: Fix migration safety with X86_BUG_NULL_SEL · 415de440
    Jane Malalane authored
    Currently, Linux probes for X86_BUG_NULL_SEL unconditionally which
    makes it unsafe to migrate in a virtualised environment as the
    properties across the migration pool might differ.
    
    To be specific, the case which goes wrong is:
    
    1. Zen1 (or earlier) and Zen2 (or later) in a migration pool
    2. Linux boots on Zen2, probes and finds the absence of X86_BUG_NULL_SEL
    3. Linux is then migrated to Zen1
    
    Linux is now running on a X86_BUG_NULL_SEL-impacted CPU while believing
    that the bug is fixed.
    
    The only way to address the problem is to fully trust the "no longer
    affected" CPUID bit when virtualised, because in the above case it would
    be clear deliberately to indicate the fact "you might migrate to
    somewhere which has this behaviour".
    
    Zen3 adds the NullSelectorClearsBase CPUID bit to indicate that loading
    a NULL segment selector zeroes the base and limit fields, as well as
    just attributes. Zen2 also has this behaviour but doesn't have the NSCB
    bit.
    
     [ bp: Minor touchups. ]
    Signed-off-by: default avatarJane Malalane <jane.malalane@citrix.com>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    CC: <stable@vger.kernel.org>
    Link: https://lkml.kernel.org/r/20211021104744.24126-1-jane.malalane@citrix.com
    415de440
amd.c 30 KB