untrusted comment: verify with openbsd-73-base.pub RWQS90bYzZ4XFuq9hHY4oe8RtnuPHEfrCpxFXFFyKVBA0EFBKxTRTBfWCORmJVgSFRE2aVSi9EfbQE/YncK3Y9SW0KDXk1GRFA0= OpenBSD 7.3 errata 011, July 24, 2023: Workaround for Zenbleed AMD cpu problem. For i386 and amd64 platforms. Apply by doing: signify -Vep /etc/signify/openbsd-73-base.pub -x 011_amdcpu.patch.sig \ -m - | (cd /usr/src && patch -p0) And then rebuild and install a new kernel: KK=`sysctl -n kern.osversion | cut -d# -f1` cd /usr/src/sys/arch/`machine`/compile/$KK make obj make config make make install Index: sys/arch/i386/i386/machdep.c =================================================================== RCS file: /cvs/src/sys/arch/i386/i386/machdep.c,v diff -u -p -u -r1.663 machdep.c --- sys/arch/i386/i386/machdep.c 30 Jan 2023 10:49:05 -0000 1.663 +++ sys/arch/i386/i386/machdep.c 24 Jul 2023 16:53:52 -0000 @@ -1639,6 +1639,7 @@ identifycpu(struct cpu_info *ci) char *cpu_device = ci->ci_dev->dv_xname; int skipspace; extern uint32_t cpu_meltdown; + uint64_t msr, nmsr; if (cpuid_level == -1) { name = "486DX"; @@ -1987,13 +1988,17 @@ identifycpu(struct cpu_info *ci) */ if (!strcmp(cpu_vendor, "AuthenticAMD")) { if (ci->ci_family >= 0x10 && ci->ci_family != 0x11) { - uint64_t msr; - - msr = rdmsr(MSR_DE_CFG); - if ((msr & DE_CFG_SERIALIZE_LFENCE) == 0) { - msr |= DE_CFG_SERIALIZE_LFENCE; - wrmsr(MSR_DE_CFG, msr); - } + nmsr = msr = rdmsr(MSR_DE_CFG); + nmsr |= DE_CFG_SERIALIZE_LFENCE; + if (msr != nmsr) + wrmsr(MSR_DE_CFG, nmsr); + } + if (family == 0x17 && ci->ci_model >= 0x31) { + nmsr = msr = rdmsr(MSR_DE_CFG); +#define DE_CFG_SERIALIZE_9 (1 << 9) /* Zenbleed chickenbit */ + nmsr |= DE_CFG_SERIALIZE_9; + if (msr != nmsr) + wrmsr(MSR_DE_CFG, nmsr); } } Index: sys/arch/amd64/amd64/cpu.c =================================================================== RCS file: /cvs/src/sys/arch/amd64/amd64/cpu.c,v diff -u -p -u -r1.165 cpu.c --- sys/arch/amd64/amd64/cpu.c 9 Mar 2023 13:17:28 -0000 1.165 +++ sys/arch/amd64/amd64/cpu.c 24 Jul 2023 16:53:42 -0000 @@ -1139,7 +1139,7 @@ void cpu_fix_msrs(struct cpu_info *ci) { int family = ci->ci_family; - uint64_t msr; + uint64_t msr, nmsr; if (!strcmp(cpu_vendor, "GenuineIntel")) { if ((family > 6 || (family == 6 && ci->ci_model >= 0xd)) && @@ -1182,11 +1182,17 @@ cpu_fix_msrs(struct cpu_info *ci) * where LFENCE is always serializing. */ if (family >= 0x10 && family != 0x11) { - msr = rdmsr(MSR_DE_CFG); - if ((msr & DE_CFG_SERIALIZE_LFENCE) == 0) { - msr |= DE_CFG_SERIALIZE_LFENCE; - wrmsr(MSR_DE_CFG, msr); - } + nmsr = msr = rdmsr(MSR_DE_CFG); + nmsr |= DE_CFG_SERIALIZE_LFENCE; + if (msr != nmsr) + wrmsr(MSR_DE_CFG, nmsr); + } + if (family == 0x17 && ci->ci_model >= 0x31) { + nmsr = msr = rdmsr(MSR_DE_CFG); +#define DE_CFG_SERIALIZE_9 (1 << 9) /* Zenbleed chickenbit */ + nmsr |= DE_CFG_SERIALIZE_9; + if (msr != nmsr) + wrmsr(MSR_DE_CFG, nmsr); } } }