x86/bugs: Fix use of possibly uninit value in amd_check_tsa_microcode()
authorMichael Zhivich <mzhivich@akamai.com>
Wed, 23 Jul 2025 13:40:19 +0000 (09:40 -0400)
committerSalvatore Bonaccorso <carnil@debian.org>
Sat, 2 Aug 2025 13:13:02 +0000 (15:13 +0200)
Origin: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git/commit?id=ab2c2b383f0b1a2a37d06219952f59ed0e88fa02

For kernels compiled with CONFIG_INIT_STACK_NONE=y, the value of __reserved
field in zen_patch_rev union on the stack may be garbage.  If so, it will
prevent correct microcode check when consulting p.ucode_rev, resulting in
incorrect mitigation selection.

This is a stable-only fix.

Cc: <stable@vger.kernel.org>
Signed-off-by: Michael Zhivich <mzhivich@akamai.com>
Fixes: d12145e8454f ("x86/bugs: Add a Transient Scheduler Attacks mitigation")
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Gbp-Pq: Topic bugfix/x86
Gbp-Pq: Name x86-bugs-Fix-use-of-possibly-uninit-value-in-amd_che.patch

arch/x86/kernel/cpu/amd.c

index 4785d41558d61b3f4a93b14d6809a1b2df7918c0..2d71c329b3475c1eb072ded8802d9bec43ba99f5 100644 (file)
@@ -563,6 +563,8 @@ static bool amd_check_tsa_microcode(void)
        p.model         = c->x86_model;
        p.ext_model     = c->x86_model >> 4;
        p.stepping      = c->x86_stepping;
+       /* reserved bits are expected to be 0 in test below */
+       p.__reserved    = 0;
 
        if (c->x86 == 0x19) {
                switch (p.ucode_rev >> 8) {