Re: [PATCH v2] x86/cpu: Skip reading MSR_IA32_PLATFORM_ID in virtualized environment

From: Kiryl Shutsemau

Date: Mon May 11 2026 - 05:39:10 EST


On Thu, Apr 30, 2026 at 10:09:53AM +0800, Binbin Wu wrote:
> The kernel now reads MSR_IA32_PLATFORM_ID during CPU init. When
> running as a guest, if the underlying hypervisor does not emulate the
> MSR, the RDMSR from MSR_IA32_PLATFORM_ID can trigger an unchecked MSR
> access during early boot. This MSR is not emulated in the case for KVM
> TDX, where the following is observed in the TD guest:
>
> unchecked MSR access error: RDMSR from 0x17 at rIP: 0xffffffffba38d6fc (intel_get_platform_id+0x7c/0xb0)
> Call Trace:
> <TASK>
> ? early_init_intel+0x28/0x2c0
> ? early_cpu_init+0x9b/0x930
> ? setup_arch+0xbf/0xbb0
> ? _printk+0x6b/0x90
> ? start_kernel+0x7f/0xaa0
> ? x86_64_start_reservations+0x24/0x30
> ? x86_64_start_kernel+0xda/0xe0
> ? common_startup_64+0x13e/0x141
> </TASK>
>
> The platform ID is used for one thing and one thing only: microcode
> updates. Those updates are solely the domain of the bare-metal OS. The
> guest kernel code should not even try to touch the MSR. Skip reading
> the MSR when the kernel is running in a virtualized environment. 0 is a
> valid platform ID, however, microcode related logic is skipped in a
> virtualized environment.
>
> Since intel_get_platform_id() could be called early before cpuinfo_x86
> is fully initialized in the case of CONFIG_MICROCODE_DBG, check whether
> the kernel is running in a virtualized environment from CPUID. Use
> cpuid_ecx() instead of native_cpuid_ecx() so that Xen PV guest will see
> the virtualized bit.
>
> Fixes: d8630b67ca1ed ("x86/cpu: Add platform ID to CPU info structure")
> Reported-by: Vishal Verma <vishal.l.verma@xxxxxxxxx>
> Signed-off-by: Binbin Wu <binbin.wu@xxxxxxxxxxxxxxx>
> Reviewed-by: Rick Edgecombe <rick.p.edgecombe@xxxxxxxxx>

Acked-by: Kiryl Shutsemau (Meta) <kas@xxxxxxxxxx>

--
Kiryl Shutsemau / Kirill A. Shutemov