Disable RDRAND on AMD family 0x17, models 0x70–0x7f. Change-Id: I634a3077beedf40816a1f6179ccf92d853979601 Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/37604 Commit-Queue: David Benjamin <davidben@google.com> Reviewed-by: David Benjamin <davidben@google.com>
diff --git a/crypto/cpu-intel.c b/crypto/cpu-intel.c index 1621ef6..832e9d6 100644 --- a/crypto/cpu-intel.c +++ b/crypto/cpu-intel.c
@@ -164,17 +164,23 @@ if (is_amd) { // See https://www.amd.com/system/files/TechDocs/25481.pdf, page 10. const uint32_t base_family = (eax >> 8) & 15; + const uint32_t base_model = (eax >> 4) & 15; uint32_t family = base_family; + uint32_t model = base_model; if (base_family == 0xf) { const uint32_t ext_family = (eax >> 20) & 255; family += ext_family; + const uint32_t ext_model = (eax >> 16) & 15; + model |= ext_model << 4; } - if (family < 0x17) { + if (family < 0x17 || (family == 0x17 && 0x70 <= model && model <= 0x7f)) { // Disable RDRAND on AMD families before 0x17 (Zen) due to reported // failures after suspend. // https://bugzilla.redhat.com/show_bug.cgi?id=1150286 + // Also disable for family 0x17, models 0x70–0x7f, due to possible RDRAND + // failures there too. ecx &= ~(1u << 30); } }