• Chen Yu's avatar
    x86/microcode/intel: Check patch signature before saving microcode for early loading · 1a371e67
    Chen Yu authored
    Currently, scan_microcode() leverages microcode_matches() to check
    if the microcode matches the CPU by comparing the family and model.
    However, the processor stepping and flags of the microcode signature
    should also be considered when saving a microcode patch for early
    update.
    
    Use find_matching_signature() in scan_microcode() and get rid of the
    now-unused microcode_matches() which is a good cleanup in itself.
    
    Complete the verification of the patch being saved for early loading in
    save_microcode_patch() directly. This needs to be done there too because
    save_mc_for_early() will call save_microcode_patch() too.
    
    The second reason why this needs to be done is because the loader still
    tries to support, at least hypothetically, mixed-steppings systems and
    thus adds all patches to the cache that belong to the same CPU model
    albeit with different steppings.
    
    For example:
    
      microcode: CPU: sig=0x906ec, pf=0x2, rev=0xd6
      microcode: mc_saved[0]: sig=0x906e9, pf=0x2a, rev=0xd6, total size=0x19400, date = 2020-04-23
      microcode: mc_saved[1]: sig=0x906ea, pf=0x22, rev=0xd6, total size=0x19000, date = 2020-04-27
      microcode: mc_saved[2]: sig=0x906eb, pf=0x2, rev=0xd6, total size=0x19400, date = 2020-04-23
      microcode: mc_saved[3]: sig=0x906ec, pf=0x22, rev=0xd6, total size=0x19000, date = 2020-04-27
      microcode: mc_saved[4]: sig=0x906ed, pf=0x22, rev=0xd6, total size=0x19400, date = 2020-04-23
    
    The patch which is being saved for early loading, however, can only be
    the one which fits the CPU this runs on so do the signature verification
    before saving.
    
     [ bp: Do signature verification in save_microcode_patch()
           and rewrite commit message. ]
    
    Fixes: ec400dde ("x86/microcode_intel_early.c: Early update ucode on Intel's CPU")
    Signed-off-by: default avatarChen Yu <yu.c.chen@intel.com>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Cc: stable@vger.kernel.org
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=208535
    Link: https://lkml.kernel.org/r/20201113015923.13960-1-yu.c.chen@intel.com
    1a371e67
intel.c 22.4 KB