Monday, November 3rd 2025
AMD "Zen 5" RDSEED Bug Threatens Cryptographic Key Generation
AMD officially confirmed that a hardware defect in the RDSEED instruction on its new Zen 5 processors, cataloged as AMD-SB-7055 and assigned CVE-2025-62626. The company reports that the 16-bit and 32-bit forms of RDSEED can return zero values, which may be mistakenly interpreted as a successful entropy read. The 64-bit form is unaffected. AMD rates the issue as high severity and suggests short-term software workarounds: prioritize using the 64-bit RDSEED path where possible, mask RDSEED from software discovery, or treat a zero return as a failure and retry. Firmware and microcode updates are being rolled out to OEMs. AMD's advisory provides product-family target dates, such as AGESA TurinPI 1.0.0.8 for EPYC 9005, with a target date of November 14, 2025, and consumer families targeted for late November 2025. Users should install vendor BIOS/microcode updates when available and consider regenerating any sensitive keys created on unpatched systems.
RDSEED is a low-level instruction that supplies entropy used for cryptographic keys and other security functions. When it returns predictable values without detection, newly generated keys or nonces may be weaker than intended. According to AMD, the problem affects the 16-bit and 32-bit forms of RDSEED, while the 64-bit form does not appear to be impacted. The company is distributing firmware and platform updates to correct the issue, but until those updates are applied, the recommended interim measures are straightforward: prefer the 64-bit RDSEED path where possible, prevent software from discovering or using the affected RDSEED forms, or treat a zero result as a failure and retry. Once updates become available, users should install them promptly and consider regenerating any sensitive keys created on unpatched systems.
Sources:
AMD, via Tom's Hardware
RDSEED is a low-level instruction that supplies entropy used for cryptographic keys and other security functions. When it returns predictable values without detection, newly generated keys or nonces may be weaker than intended. According to AMD, the problem affects the 16-bit and 32-bit forms of RDSEED, while the 64-bit form does not appear to be impacted. The company is distributing firmware and platform updates to correct the issue, but until those updates are applied, the recommended interim measures are straightforward: prefer the 64-bit RDSEED path where possible, prevent software from discovering or using the affected RDSEED forms, or treat a zero result as a failure and retry. Once updates become available, users should install them promptly and consider regenerating any sensitive keys created on unpatched systems.

17 Comments on AMD "Zen 5" RDSEED Bug Threatens Cryptographic Key Generation
That's something that should have caught by a simple unit-test in pre-production.
I feel like I can count with both hands the amount of times "dumb" things happened from corner cases that nobody thought about, but memory's a little hazy.
lore.kernel.org/lkml/20251016182107.3496116-1-gourry@gourry.net/
If they haven't already developed software that performs a broad-extreme search for bugs in their CPUs, they should do it "to yesterday".
Or to put in another way, if you want absolute 100% test coverage, lets say we want to test every branching path the program has. Every if-statement doubles the amount of paths your program can take. You only need 64 if-statements to reach ~16 quintillion branching paths. I'm looking at a hobbyist project I'm doing and there's 144 if-statements, meaning there's at least 22,300,745,198,530,623,141,535,718,272,648,361,505,980,416 branching paths. Hardware is just hard-coded software, so you can bet you butt there's branching paths. Or even more basic: different logic states.
So, if we want to wait until the heat death of the universe for something to come out, most testing is just "is it doing the feature I need?" and some obvious limits.
Does this mean AMD should hire more pen testers? Sure, I guess.
Thanks for pointing it out.
And in any case, if statements only double the amount of paths to the degree that they're nestedOnly if they're all nested into each other, in which case you certainly have some problem ...Oh come on, testing is often very extensive, although it generally can't cover every possible condition that can occur
In my case, I'm dealing with something at work where the original implementer was fixing a problem, but they didn't realize it caused other side effects because the thing they did broke the original logic of the application.While I acknowledge my statement was oversimplified, it's not true that the code paths only double if there are nested statements. For example, assuming the values being checked are independent from each other, each if statement doubles the amount of code paths.
It depends on what level of testing you're doing, and how they're doing it. A lot of times I've seen, the system level test is just all of the unit tests combined with some adjustments made.
I mean, you also kind of acknowledged it yourself:
Nor should it be desired or prioritized to have "complete" test coverage. Usually people refer to unit tests (and sometimes integration tests etc.), which should only test a unit in isolation (external states/dependencies should be mocked). And such tests are usually only valuable for libraries or small sections of code, and only for the parts where there's an algorithm or some testable logic. There are a lot of code in the Linux kernel, a driver or any code for that matter that are just declarations and initializations, and there is no point in testing those in this way. I've seen enough unit tests that basically are either just a "write protection" of the code, or worse, will only fail if the CPU is unable to do math or the OS is unable to allocate memory. Such tests have absolutely no value. There are systems tests etc. which should cover those kinds of validations.
What should scare you is that "professional" developers (and probably most large software companies) rely on such metrics along with static analysis and all kinds of metrics to evaluate "code quality" and even "vulnerabilities". While perhaps 1% of the information is useful, the amount of time spent, the bureaucracy, and all the constraints only leads to more bloated, unmaintainable and garbage code. Unfortunately this BS is what people get taught in CS degrees these days, not deep levels of technical understanding.
Virtually all flaws in software that matters are skill issues, the rest are careless mistakes, which you will catch by having proper coding standards and procedures.It's true in terms of branching paths, but (probably) not in terms of possible logical states, as most of those branches (hopefully) don't directly interact with each other's state.
-----
To tie this back into the subject matter;
So many of you wonder why so many CPU bugs are uncaught?
Unlike what shuffy_losys claimed, hardware isn't just hardcoded software, there is also physics involved at this level. The vast majority of CPU bugs which sneaks their way into production silicon are due to timing issues, not logical issues. No matter how much they simulate the design beforehand, there will always the possibility of such flaws due to the production node's characteristics, the specific die design and just yield variation. (Unlike software, hardware transistors will have "undefined behavior" between cycles, and this is where most of such bugs and even stability issues comes from.) So even if the managed to simulate enough states, it still would not cover all of these cases.
With that being said, I firmly believe that all CPU designs could benefit from doing another stepping before mass production (and/or having more widely deployed engineering samples), as most of these launch with a few dozen known flaws, not to mention all the flaws they discover afterwards. The amount of "mitigations" in firmware or OS and libraries are often causing major performance regressions, quite often after the purchase of a product.
One important note about error handling, whether it is from invalid input or internal state, far too many coders tend to write too "forgiving" code which suppresses errors, which leads to many errors being very hard to detect and eliminate.Sure, there are most certainly timing issues with software, most commonly know are race conditions, but there is also other synchronization issues, even with event polling (just look at how horribly imprecise IO in Windows is), or when communicating with hardware through drivers etc.
With CPUs on the other hand, the typical timing errors are of a different nature, at least the ones which typically slips through QA. While timing issues with caches could be analogous to race conditions in code, such CPU bugs are rare compared to the ones caused by undefined behavior inside the core. CPUs thanks to their pipelined design actually have ~14-19 states simultaneously, and in-between those some units can have undefined behavior. So if some timing is off (for the reasons mentioned previously), data which should have been flushed can remain, or some data can be under some conditions manipulated, etc. Testing for such cases requires final silicon and cleverly designed tests.