• Borislav Petkov's avatar
    x86/microcode/AMD: Handle multiple glued containers properly · ba73e369
    Borislav Petkov authored
    It can happen that - especially during testing - the microcode
    blobs of all families are all glued together in the initrd. The
    current code doesn't check whether the current container matched
    a microcode patch and continues to the next one, which leads to
    save_microcode_in_initrd_amd() to look at the next and thus wrong one:
    
      microcode: parse_container: ucode: 0xffff88807e9d9082
      microcode: verify_patch: buf: 0xffff88807e9d90ce, buf_size: 26428
      microcode: verify_patch: proc_id: 0x8082, patch_fam: 0x17, this family: 0x17
      microcode: verify_patch: buf: 0xffff88807e9d9d56, buf_size: 23220
      microcode: verify_patch: proc_id: 0x8012, patch_fam: 0x17, this family: 0x17
      microcode: parse_container: MATCH: eq_id: 0x8012, patch proc_rev_id: 0x8012
    
    <-- matching patch found
    
      microcode: verify_patch: buf: 0xffff88807e9da9de, buf_size: 20012
      microcode: verify_patch: proc_id: 0x8310, patch_fam: 0x17, this family: 0x17
      microcode: verify_patch: buf: 0xffff88807e9db666, buf_size: 16804
      microcode: Invalid type field (0x414d44) in container file section header.
      microcode: Patch section fail
    
    <-- checking chokes on the microcode magic value of the next container.
    
      microcode: parse_container: saving container 0xffff88807e9d9082
      microcode: save_microcode_in_initrd_amd: scanned containers, data: 0xffff88807e9d9082, size: 9700a
    
    and now if there's a next (and last container) it'll use that in
    save_microcode_in_initrd_amd() and not find a proper patch, ofc.
    
    Fix that by moving the out: label up, before the desc->mc check which
    jots down the pointer of the matching patch and is used to signal to the
    caller that it has found a matching patch in the current container.
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Signed-off-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
    Link: https://lore.kernel.org/r/20221219210656.5140-2-bp@alien8.de
    ba73e369
amd.c 22.1 KB