| From 8177c6bedb7013cf736137da586cf783922309dd Mon Sep 17 00:00:00 2001 |
| From: "Ahmed S. Darwish" <darwi@linutronix.de> |
| Date: Tue, 4 Mar 2025 09:51:12 +0100 |
| Subject: x86/cacheinfo: Validate CPUID leaf 0x2 EDX output |
| |
| From: Ahmed S. Darwish <darwi@linutronix.de> |
| |
| commit 8177c6bedb7013cf736137da586cf783922309dd upstream. |
| |
| 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 |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/x86/kernel/cpu/cacheinfo.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/arch/x86/kernel/cpu/cacheinfo.c |
| +++ b/arch/x86/kernel/cpu/cacheinfo.c |
| @@ -808,7 +808,7 @@ void init_intel_cacheinfo(struct cpuinfo |
| cpuid(2, ®s[0], ®s[1], ®s[2], ®s[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; |
| |