]> www.infradead.org Git - users/hch/misc.git/commitdiff
x86/cacheinfo: Validate CPUID leaf 0x2 EDX output
authorAhmed S. Darwish <darwi@linutronix.de>
Tue, 4 Mar 2025 08:51:12 +0000 (09:51 +0100)
committerIngo Molnar <mingo@kernel.org>
Tue, 4 Mar 2025 08:59:14 +0000 (09:59 +0100)
CPUID leaf 0x2 emits one-byte descriptors in its four output registers
EAX, EBX, ECX, and EDX.  For these descriptors to be valid, the most
significant bit (MSB) of each register must be clear.

The historical Git commit:

  019361a20f016 ("- pre6: Intel: start to add Pentium IV specific stuff (128-byte cacheline etc)...")

introduced leaf 0x2 output parsing.  It only validated the MSBs of EAX,
EBX, and ECX, but left EDX unchecked.

Validate EDX's most-significant bit.

Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Cc: stable@vger.kernel.org
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: https://lore.kernel.org/r/20250304085152.51092-2-darwi@linutronix.de
arch/x86/kernel/cpu/cacheinfo.c

index e6fa03ed9172c09a1622ea393a20d12c7fb7afa4..a6c6bccfa8b8d3d2762384e418efbd4ca0a69c9e 100644 (file)
@@ -808,7 +808,7 @@ void init_intel_cacheinfo(struct cpuinfo_x86 *c)
                        cpuid(2, &regs[0], &regs[1], &regs[2], &regs[3]);
 
                        /* If bit 31 is set, this is an unknown format */
-                       for (j = 0 ; j < 3 ; j++)
+                       for (j = 0 ; j < 4 ; j++)
                                if (regs[j] & (1 << 31))
                                        regs[j] = 0;