[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] x86/AMD: check microcode size against CPUID-supplied limit


  • To: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Wed, 10 Aug 2022 10:12:39 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=NtygoRxhESv/N6X1/yEBbnxt1q39SAhRXgxSwy1OZzc=; b=VLiHX8m8wTasQlz5K2WV5VcvytibU1OJXirOkHakmOykgqCesLRmsI1DiyWgjhcDCuVXQJsGnrAYVo+oInREQxBX2V98gSD66393pwMDXSNP3/anGhirFWGbtf29A53Kj39Nrjv/GuQN9M+2qISZoBCmIiU7rc5lx+mWfZZkjwIkLV9HSsdmOea270WJBBg3s7RHDx3Vn269I3GfJ7wTa8xhH5AWbS8I3nQULldYYbV5nmcG/MfZr2bKwcXVGKV0saoWuYoE/ehA9f6Cfbig4hZhx02gLl9ql+oweXb6a3b3hItbOSC9SvplMVXltr+/xhqP9QPvyqwCTwSpak5jnA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=i/BrmW2qd15zMtsk2Yw7bhllWo0J2eDyMui5Qx/zAKjcqAdRPt3PaZxx8YrDdwCd/jJCN5XZ6LuHgpGrWwMI210QJi88uu5SYP2yh2ob8niZmHHjNsKp/Ciftp3wkJGglPwX6m6rHyVkxSZv3UzUoJNgfWMtK//cK8Hm3j6CNEbY6n7OguZU9omdW+N26ODT2YPCOq3XyQ1riwnID3i5ZwLGzRQ/GIZFMmCznsD43BCoGxfTTzpGz5Le0n6mduxwKBfj240Mmtx+IVLjFuX4fGMHFKhJBy/dbutn6c4CRN2L74v1/TKO07NLaQasQLUUgU0xXxhBHJ2Nx9R98jkPRg==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com;
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Delivery-date: Wed, 10 Aug 2022 08:12:56 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

With there now being a CPUID field for this, let's try to avoid further
growing the set of family-specific "magic" numbers. Sadly on the boot
CPU it's too early to use the host policy, so an actual CPUID insn needs
to be issued. Let's take the opportunity though and make the extended
CPUID level available early.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>

--- a/xen/arch/x86/cpu/common.c
+++ b/xen/arch/x86/cpu/common.c
@@ -352,7 +352,9 @@ void __init early_cpu_init(void)
                            &c->x86_capability[FEATURESET_7d0]);
 
        eax = cpuid_eax(0x80000000);
-       if ((eax >> 16) == 0x8000 && eax >= 0x80000008) {
+       if ((eax >> 16) == 0x8000)
+               c->extended_cpuid_level = eax;
+       if (c->extended_cpuid_level >= 0x80000008) {
                ebx = eax >= 0x8000001f ? cpuid_ebx(0x8000001f) : 0;
                eax = cpuid_eax(0x80000008);
 
--- a/xen/arch/x86/cpu/microcode/amd.c
+++ b/xen/arch/x86/cpu/microcode/amd.c
@@ -108,6 +108,13 @@ static bool verify_patch_size(uint32_t p
 {
     uint32_t max_size;
 
+    if ( boot_cpu_data.extended_cpuid_level >= 0x80000021 )
+    {
+        max_size = cpuid_ebx(0x80000021) & 0xfff;
+        if ( max_size )
+            return patch_size <= (max_size << 4);
+    }
+
 #define F1XH_MPB_MAX_SIZE 2048
 #define F14H_MPB_MAX_SIZE 1824
 #define F15H_MPB_MAX_SIZE 4096



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.