调试一个exe,偶尔发现exe卡死,用windbg一看,好多线程都在等待一个线程释放CRT内存申请的锁。
而这个线程也在调用malloc申请内存,走到了LowFragHeap里面,正在执行一条rdrand指令。
让exe继续执行,然后断下来看栈,发现这个线程一直卡在rdrand上并未返回。

搜了一下,AMD Ryzen 3000系列出过rdrand返回的随机数不随机的bug。
看来还有卡死的bug。先看看cpu微码有更新包没。

# Call Site
00 ntdll!RtlpHeapGenerateRandomValue32+0xa3
01 ntdll!RtlpSubSegmentInitialize+0x2cf
02 ntdll!RtlpLowFragHeapAllocFromContext+0x6ef
03 ntdll!RtlpAllocateHeapInternal+0x12a

 

 

查看CPU微码当前版本的命令:reg query HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0

输出信息:

HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0
Component Information REG_BINARY 00000000000000000000000000000000
Identifier REG_SZ AMD64 Family 23 Model 113 Stepping 0
Configuration Data REG_FULL_RESOURCE_DESCRIPTOR FFFFFFFFFFFFFFFF0000000000000000
ProcessorNameString REG_SZ AMD Ryzen 7 3700X 8-Core Processor
VendorIdentifier REG_SZ AuthenticAMD
FeatureSet REG_DWORD 0x383b3dff
~MHz REG_DWORD 0xe10
Update Revision REG_BINARY 2110700800000000
Previous Update Revision REG_BINARY 2110700800000000
Update Status REG_DWORD 0x3
Platform Specific Field 1 REG_DWORD 0x8701021
Platform Specific Field 2 REG_BINARY 00000000

 用AIDA64看到的微码版本号是08701021h。除了字节顺序,和上面显示的一致。

制造商 AuthenticAMD
名称 AMD Ryzen 7 3700X 8-Core Processor
修订版本 00870F10h
扩展修订版本 00870F10h
平台 ID C7h (Socket AM4)
微代码修订更新 08701021h
SMU Firmware Version 46.62.0

主板是MSI的B450M MORTAR MAX,先在官网更新一下BIOS再说。官网最新BIOS版本是2022-05-16,很新了。

https://www.msi.com/Motherboard/B450M-MORTAR-MAX/support#bios

 然并卵,更新BIOS到2.G0这个版本后,微码版本还是08701021h。

系统中的mcupdate_AuthenticAMD.dll版本倒是挺新,签名日期是2022-05-07的。

 

参考:
血泪控诉:曝光数月的AMD微代码bug毁掉了我的周末
https://cloud.tencent.com/developer/news/465936