mbox series

[SRU,R,V2,0/5] Take Intel platform into account for old microcode checks

Message ID 20260826215825.2105594-1-michael.reed@canonical.com
Headers show
Series Take Intel platform into account for old microcode checks | expand

Message

Michael Reed Aug. 26, 2026, 9:58 p.m. UTC
From: Michael Reed <Michael.Reed@canonical.com>

BugLink: https://launchpad.net/bugs/2161748

SRU Justification

[ Impact ]

The issue is Intel added code to Linux to check for old microcode. They base it on some processor fields not realizing there are multiple processor SKUs with the same processor field information. The result is the Linux wrongly prints out "Running old microcode" and sets taint bit 2 for some processor SKUs.
It takes specific Intel processor SKUs to hit the issue. This has been seen with Sapphire Rapids and Granite Rapids processors

[ Fix ]

These patches fix the issue
cda64169 x86/microcode: Do not access MSR_IA32_PLATFORM_ID when running as a guest
238be4ba x86/microcode: Refactor platform ID enumeration into a helper
d8630b67 x86/cpu: Add platform ID to CPU info structure
fab0c75d x86/cpu: Add platform ID to CPU matching structure
7989c393 x86/microcode: Add platform mask to Intel microcode "old" list

The patches fix false-positive "old microcode"/taint-bit-2 reports on Sapphire Rapids and Granite Rapids SKUs.

[ Test Plan ]
After booting the system check the /proc/sys/kernel/tainted file for the incorrect microcode error

 Without the fix:

  root@gnh-204:~# cat /proc/sys/kernel/tainted
  4
  root@gnh-204:~# dmesg | grep microcode
  [ 0.000000] x86/CPU: Running old microcode
  [ 10.088285] microcode: Enabled staging feature.
  [ 10.092931] microcode: Current revision: 0x01000434

 With the fix:

  root@gnh-204:~# cat /proc/sys/kernel/tainted
  0
  root@gnh-204:~# dmesg | grep microcode
  [ 10.090836] microcode: Enabled staging feature.
  [ 10.095475] microcode: Current revision: 0x01000434

[ Where problems could occur ]

The regression risk is low. This code is only touching the x86 microcode/CPU-matching code path and no other subsystems are affected.

[ Other Info ]

https://code.launchpad.net/~mreed8855/ubuntu/+source/linux/+git/resolute/+ref/kernel_taint_lp_2161748_intel

Borislav Petkov (1):
  x86/microcode: Do not access MSR_IA32_PLATFORM_ID when running as a
    guest

Dave Hansen (4):
  x86/microcode: Refactor platform ID enumeration into a helper
  x86/cpu: Add platform ID to CPU info structure
  x86/cpu: Add platform ID to CPU matching structure
  x86/microcode: Add platform mask to Intel microcode "old" list

 arch/x86/include/asm/microcode.h              |   2 +
 arch/x86/include/asm/processor.h              |   6 +
 arch/x86/kernel/cpu/intel.c                   |   1 +
 arch/x86/kernel/cpu/match.c                   |   3 +
 arch/x86/kernel/cpu/microcode/amd.c           |   4 +-
 arch/x86/kernel/cpu/microcode/core.c          |  22 +-
 .../kernel/cpu/microcode/intel-ucode-defs.h   | 398 +++++++++++-------
 arch/x86/kernel/cpu/microcode/intel.c         |  57 ++-
 arch/x86/kernel/cpu/microcode/internal.h      |   1 -
 include/linux/mod_devicetable.h               |   2 +
 10 files changed, 310 insertions(+), 186 deletions(-)

Comments

Rickey Castillo Valenzuela Aug. 26, 2026, 11:11 p.m. UTC | #1
On 8/26/26 15:58, Michael Reed via kernel-team wrote:
> From: Michael Reed <Michael.Reed@canonical.com>
>
> BugLink: https://launchpad.net/bugs/2161748
>
> SRU Justification
>
> [ Impact ]
>
> The issue is Intel added code to Linux to check for old microcode. They base it on some processor fields not realizing there are multiple processor SKUs with the same processor field information. The result is the Linux wrongly prints out "Running old microcode" and sets taint bit 2 for some processor SKUs.
> It takes specific Intel processor SKUs to hit the issue. This has been seen with Sapphire Rapids and Granite Rapids processors
>
> [ Fix ]
>
> These patches fix the issue
> cda64169 x86/microcode: Do not access MSR_IA32_PLATFORM_ID when running as a guest
> 238be4ba x86/microcode: Refactor platform ID enumeration into a helper
> d8630b67 x86/cpu: Add platform ID to CPU info structure
> fab0c75d x86/cpu: Add platform ID to CPU matching structure
> 7989c393 x86/microcode: Add platform mask to Intel microcode "old" list
>
> The patches fix false-positive "old microcode"/taint-bit-2 reports on Sapphire Rapids and Granite Rapids SKUs.
>
> [ Test Plan ]
> After booting the system check the /proc/sys/kernel/tainted file for the incorrect microcode error
>
>   Without the fix:
>
>    root@gnh-204:~# cat /proc/sys/kernel/tainted
>    4
>    root@gnh-204:~# dmesg | grep microcode
>    [ 0.000000] x86/CPU: Running old microcode
>    [ 10.088285] microcode: Enabled staging feature.
>    [ 10.092931] microcode: Current revision: 0x01000434
>
>   With the fix:
>
>    root@gnh-204:~# cat /proc/sys/kernel/tainted
>    0
>    root@gnh-204:~# dmesg | grep microcode
>    [ 10.090836] microcode: Enabled staging feature.
>    [ 10.095475] microcode: Current revision: 0x01000434
>
> [ Where problems could occur ]
>
> The regression risk is low. This code is only touching the x86 microcode/CPU-matching code path and no other subsystems are affected.
>
> [ Other Info ]
>
> https://code.launchpad.net/~mreed8855/ubuntu/+source/linux/+git/resolute/+ref/kernel_taint_lp_2161748_intel
>
> Borislav Petkov (1):
>    x86/microcode: Do not access MSR_IA32_PLATFORM_ID when running as a
>      guest
>
> Dave Hansen (4):
>    x86/microcode: Refactor platform ID enumeration into a helper
>    x86/cpu: Add platform ID to CPU info structure
>    x86/cpu: Add platform ID to CPU matching structure
>    x86/microcode: Add platform mask to Intel microcode "old" list
>
>   arch/x86/include/asm/microcode.h              |   2 +
>   arch/x86/include/asm/processor.h              |   6 +
>   arch/x86/kernel/cpu/intel.c                   |   1 +
>   arch/x86/kernel/cpu/match.c                   |   3 +
>   arch/x86/kernel/cpu/microcode/amd.c           |   4 +-
>   arch/x86/kernel/cpu/microcode/core.c          |  22 +-
>   .../kernel/cpu/microcode/intel-ucode-defs.h   | 398 +++++++++++-------
>   arch/x86/kernel/cpu/microcode/intel.c         |  57 ++-
>   arch/x86/kernel/cpu/microcode/internal.h      |   1 -
>   include/linux/mod_devicetable.h               |   2 +
>   10 files changed, 310 insertions(+), 186 deletions(-)
>
Acked-by: Rickey Castillo <rickey.castillo.valenzuela@canonical.com>
Edoardo Canepa Aug. 28, 2026, 3:11 p.m. UTC | #2
Acked-by: Edoardo Canepa <edoardo.canepa@canonical.com>

On 8/27/26 00:58, Michael Reed via kernel-team wrote:
> From: Michael Reed <Michael.Reed@canonical.com>
>
> BugLink: https://launchpad.net/bugs/2161748
>
> SRU Justification
>
> [ Impact ]
>
> The issue is Intel added code to Linux to check for old microcode. They base it on some processor fields not realizing there are multiple processor SKUs with the same processor field information. The result is the Linux wrongly prints out "Running old microcode" and sets taint bit 2 for some processor SKUs.
> It takes specific Intel processor SKUs to hit the issue. This has been seen with Sapphire Rapids and Granite Rapids processors
>
> [ Fix ]
>
> These patches fix the issue
> cda64169 x86/microcode: Do not access MSR_IA32_PLATFORM_ID when running as a guest
> 238be4ba x86/microcode: Refactor platform ID enumeration into a helper
> d8630b67 x86/cpu: Add platform ID to CPU info structure
> fab0c75d x86/cpu: Add platform ID to CPU matching structure
> 7989c393 x86/microcode: Add platform mask to Intel microcode "old" list
>
> The patches fix false-positive "old microcode"/taint-bit-2 reports on Sapphire Rapids and Granite Rapids SKUs.
>
> [ Test Plan ]
> After booting the system check the /proc/sys/kernel/tainted file for the incorrect microcode error
>
>   Without the fix:
>
>    root@gnh-204:~# cat /proc/sys/kernel/tainted
>    4
>    root@gnh-204:~# dmesg | grep microcode
>    [ 0.000000] x86/CPU: Running old microcode
>    [ 10.088285] microcode: Enabled staging feature.
>    [ 10.092931] microcode: Current revision: 0x01000434
>
>   With the fix:
>
>    root@gnh-204:~# cat /proc/sys/kernel/tainted
>    0
>    root@gnh-204:~# dmesg | grep microcode
>    [ 10.090836] microcode: Enabled staging feature.
>    [ 10.095475] microcode: Current revision: 0x01000434
>
> [ Where problems could occur ]
>
> The regression risk is low. This code is only touching the x86 microcode/CPU-matching code path and no other subsystems are affected.
>
> [ Other Info ]
>
> https://code.launchpad.net/~mreed8855/ubuntu/+source/linux/+git/resolute/+ref/kernel_taint_lp_2161748_intel
>
> Borislav Petkov (1):
>    x86/microcode: Do not access MSR_IA32_PLATFORM_ID when running as a
>      guest
>
> Dave Hansen (4):
>    x86/microcode: Refactor platform ID enumeration into a helper
>    x86/cpu: Add platform ID to CPU info structure
>    x86/cpu: Add platform ID to CPU matching structure
>    x86/microcode: Add platform mask to Intel microcode "old" list
>
>   arch/x86/include/asm/microcode.h              |   2 +
>   arch/x86/include/asm/processor.h              |   6 +
>   arch/x86/kernel/cpu/intel.c                   |   1 +
>   arch/x86/kernel/cpu/match.c                   |   3 +
>   arch/x86/kernel/cpu/microcode/amd.c           |   4 +-
>   arch/x86/kernel/cpu/microcode/core.c          |  22 +-
>   .../kernel/cpu/microcode/intel-ucode-defs.h   | 398 +++++++++++-------
>   arch/x86/kernel/cpu/microcode/intel.c         |  57 ++-
>   arch/x86/kernel/cpu/microcode/internal.h      |   1 -
>   include/linux/mod_devicetable.h               |   2 +
>   10 files changed, 310 insertions(+), 186 deletions(-)
>
Edoardo Canepa Aug. 28, 2026, 7 p.m. UTC | #3
Applied to R:linux/master-next. Thanks.

On 8/27/26 00:58, Michael Reed via kernel-team wrote:
> From: Michael Reed <Michael.Reed@canonical.com>
>
> BugLink: https://launchpad.net/bugs/2161748
>
> SRU Justification
>
> [ Impact ]
>
> The issue is Intel added code to Linux to check for old microcode. They base it on some processor fields not realizing there are multiple processor SKUs with the same processor field information. The result is the Linux wrongly prints out "Running old microcode" and sets taint bit 2 for some processor SKUs.
> It takes specific Intel processor SKUs to hit the issue. This has been seen with Sapphire Rapids and Granite Rapids processors
>
> [ Fix ]
>
> These patches fix the issue
> cda64169 x86/microcode: Do not access MSR_IA32_PLATFORM_ID when running as a guest
> 238be4ba x86/microcode: Refactor platform ID enumeration into a helper
> d8630b67 x86/cpu: Add platform ID to CPU info structure
> fab0c75d x86/cpu: Add platform ID to CPU matching structure
> 7989c393 x86/microcode: Add platform mask to Intel microcode "old" list
>
> The patches fix false-positive "old microcode"/taint-bit-2 reports on Sapphire Rapids and Granite Rapids SKUs.
>
> [ Test Plan ]
> After booting the system check the /proc/sys/kernel/tainted file for the incorrect microcode error
>
>   Without the fix:
>
>    root@gnh-204:~# cat /proc/sys/kernel/tainted
>    4
>    root@gnh-204:~# dmesg | grep microcode
>    [ 0.000000] x86/CPU: Running old microcode
>    [ 10.088285] microcode: Enabled staging feature.
>    [ 10.092931] microcode: Current revision: 0x01000434
>
>   With the fix:
>
>    root@gnh-204:~# cat /proc/sys/kernel/tainted
>    0
>    root@gnh-204:~# dmesg | grep microcode
>    [ 10.090836] microcode: Enabled staging feature.
>    [ 10.095475] microcode: Current revision: 0x01000434
>
> [ Where problems could occur ]
>
> The regression risk is low. This code is only touching the x86 microcode/CPU-matching code path and no other subsystems are affected.
>
> [ Other Info ]
>
> https://code.launchpad.net/~mreed8855/ubuntu/+source/linux/+git/resolute/+ref/kernel_taint_lp_2161748_intel
>
> Borislav Petkov (1):
>    x86/microcode: Do not access MSR_IA32_PLATFORM_ID when running as a
>      guest
>
> Dave Hansen (4):
>    x86/microcode: Refactor platform ID enumeration into a helper
>    x86/cpu: Add platform ID to CPU info structure
>    x86/cpu: Add platform ID to CPU matching structure
>    x86/microcode: Add platform mask to Intel microcode "old" list
>
>   arch/x86/include/asm/microcode.h              |   2 +
>   arch/x86/include/asm/processor.h              |   6 +
>   arch/x86/kernel/cpu/intel.c                   |   1 +
>   arch/x86/kernel/cpu/match.c                   |   3 +
>   arch/x86/kernel/cpu/microcode/amd.c           |   4 +-
>   arch/x86/kernel/cpu/microcode/core.c          |  22 +-
>   .../kernel/cpu/microcode/intel-ucode-defs.h   | 398 +++++++++++-------
>   arch/x86/kernel/cpu/microcode/intel.c         |  57 ++-
>   arch/x86/kernel/cpu/microcode/internal.h      |   1 -
>   include/linux/mod_devicetable.h               |   2 +
>   10 files changed, 310 insertions(+), 186 deletions(-)
>