diff --git a/docs/misc/xen-command-line.pandoc b/docs/misc/xen-command-line.pandoc index dba5d7f31e..ff7bc7e861 100644 --- a/docs/misc/xen-command-line.pandoc +++ b/docs/misc/xen-command-line.pandoc @@ -2772,9 +2772,10 @@ stop_machine context. In NMI handler, even NMIs are blocked, which is considered safer. The default value is `true`. The `digest-check=` option is active by default and controls whether to -perform additional authenticity checks. Collisions in the signature algorithm -used by AMD Fam17h/19h processors have been found. Xen contains a table of -digests of microcode patches with known-good provenance, and will block +perform additional authenticity checks. The Entrysign vulnerability (AMD +SB-7033, CVE-2024-36347) on Zen1-5 processors allows forging the signature on +arbitrary microcode such that it is accepted by the CPU. Xen contains a table +of digests of microcode patches with known-good provenance, and will block loading of patches that do not match. ### unrestricted_guest (Intel) diff --git a/xen/arch/x86/cpu/microcode/amd.c b/xen/arch/x86/cpu/microcode/amd.c index bfeb81f596..eeb51bbfe7 100644 --- a/xen/arch/x86/cpu/microcode/amd.c +++ b/xen/arch/x86/cpu/microcode/amd.c @@ -126,7 +126,7 @@ static bool check_digest(const struct container_microcode *mc) * microcode updates. Mitigate by checking the digest of the patch * against a list of known provenance. */ - if ( boot_cpu_data.x86 < 0x17 || + if ( boot_cpu_data.x86 < 0x17 || boot_cpu_data.x86 > 0x1a || !opt_digest_check ) return true; @@ -564,7 +564,12 @@ static const struct microcode_ops __initconst_cf_clobber amd_ucode_ops = { void __init ucode_probe_amd(struct microcode_ops *ops) { - if ( !opt_digest_check && boot_cpu_data.x86 >= 0x17 ) + /* + * The Entrysign vulnerability (SB-7033, CVE-2024-36347) affects Zen1-5 + * CPUs. Taint Xen if digest checking is turned off. + */ + if ( boot_cpu_data.x86 >= 0x17 && boot_cpu_data.x86 <= 0x1a && + !opt_digest_check ) { printk(XENLOG_WARNING "Microcode patch additional digest checks disabled\n");