
Como se viu, a execução de algumas instruções específicas do FMA3 em um processador AMD Ryzen leva a uma falha crítica do sistema operacional.
Instruções como FMA3 (Fused-Multiply-Add) são suportadas pela Intel (em Haswell) e pela AMD. Estas são instruções como
d = round(a × b + c)
, em que
d deve estar no mesmo registro que
a ,
b ou
c . Em comparação, as instruções do FMA4 são suportadas apenas pela AMD (no Buldozer e nos processadores posteriores). Existem
a ,
b ,
c e
d em diferentes registros.
Um bug no processador foi descoberto no
Flops versão2 , um utilitário simples e pouco conhecido para testar CPUs. Deve-se observar que o desenvolvedor deste utilitário Alexander "Mystical" Yee (Alexander "Mystical" Yee) o posiciona como um utilitário de teste específico que é sensível à microarquitetura dos processadores. Em outros benchmarks, o bug nunca apareceu.
Com o utilitário Flops version2, são fornecidos binários específicos para todas as principais arquiteturas x64 (Core2, Bulldozer, Sandy Bridge, Piledriver, Haswell, Skylake). Mas, no momento, nem entre os assemblies binários
do Windows nem
do Linux existe uma versão para testar o Zen. Portanto, agora para testar a Ryzen, usava binários de outras arquiteturas, a Haswell mais próxima. O erro acima com as instruções do FMA3 foi
descoberto há
duas semanas pelo próprio autor do programa Flops, quando ele executou um teste com o binário padrão de Haswell em um computador com a seguinte configuração:
- Ryzen 7 1800X
- Asus Prime B350M-A (BIOS 0502)
- 4 x 8GB Corsair CMK32GX4M4A2400C14 a 2133 MHz
- Atualização de aniversário do Windows 10
De repente, foi descoberto que o sistema geralmente congela durante a seguinte operação:
Single-Precision - 128-bit FMA3 - Fused Multiply Add:
Às vezes, o teste passa com êxito nesta operação, mas ainda permanece em alguma outra operação no futuro.
O desenvolvedor explica que seu teste é de código aberto e, se você não confia nos resultados, pode fazer e compilar o binário no Visual Studio e verificar os resultados duas vezes.
Alexander sabia que atenção chamaria ao relatar um erro em um processador anunciado. Portanto, ele verificou repetidamente os resultados. O processador desligou o sistema em todas as frequências de clock. E, ao trabalhar no modo single-thread, cada núcleo pendia o sistema.
Havia algumas probabilidades de que a causa da falha ainda não estivesse no processador, mas em outra coisa. Por exemplo, em uma placa-mãe específica, em um BIOS específico, em um sistema operacional específico ... O que mais poderia ser?
O desenvolvedor compartilhou os resultados com os colegas para que eles verifiquem outras versões do Zen em seus computadores. As falhas foram confirmadas para outros processadores, em diferentes placas-mãe, em diferentes versões do Windows e no Linux.
Nos primeiros dias após a ligação de Alex, os testes foram lançados por cinco proprietários de processadores Ryzen. Aqui estão os resultados:
Falhas confirmadas:- 1800X + Asus Prime B350M-A (BIOS 0502)
- 1700 + Asus Prime B350M-A (BIOS ??)
- Asus Crosshair VI Hero
- 1700 + Asus Crosshair VI Hero (BIOS 5803) (dois bancos de memória G.Skill + Kingston)
- 1800X + Asus Crosshair VI Hero (Windows 7) - uma vez aprovado no teste, falhou repetidamente.
Operação sem problemas confirmada:O desenvolvedor do benchmark verificou todas as variantes de FMA (128 bits, 256 bits, precisão única, precisão dupla de números). Em todos os casos, o computador congela firmemente.
Ele foi assediado por apenas um detalhe: embora o teste tenha sido escrito corretamente, por algum motivo ele não se encaixava em outros benchmarks, como prime95 e y-triturador, embora eles também usassem FMA nos testes.
Então alguma incerteza permaneceu.
No final, em 16 de março, uma
mensagem oficial foi recebida de um representante da AMD de que o bug será corrigido no novo código
AGESA (AMD Generic Encapsulated Software Architecture), um protocolo usado, entre outras coisas, para inicializar os núcleos dos processadores AMD. Em outras palavras, os especialistas da empresa verificaram e confirmaram o bug. Mais tarde, os representantes da AMD
confirmaram oficialmente o bug nos comentários da mídia .
Felizmente, esse bug pode ser corrigido sem substituir o hardware, mas simplesmente atualizando o microcódigo. O bug é insignificante, portanto, não causará revisões do processador ou outros problemas para a empresa. De fato, no mundo real do trabalho, quase ninguém pode encontrar esse bug, ele não afeta o desempenho do computador ou do processador.
A má notícia é que os invasores podem usá-lo para ataques de negação de serviço. Ou seja, principalmente esse erro é um problema de segurança da informação. Afinal, um programa de usuário comum executando no modo de usuário, e não no nível do kernel do sistema operacional, não deve travar o sistema com força. Mas isso está acontecendo.
O fato de o teste ter sido executado em um binário para outra arquitetura não é tão importante. Qualquer processador deve reproduzir com êxito os testes de qualquer binário, se suportar o conjunto apropriado de instruções, escreve o autor do benchmark. Mas mesmo se você executar o teste usando instruções incompatíveis, o programa não deve travar o sistema com força.
O perigo de uma vulnerabilidade de segurança é agravado pelo fato de que o código malicioso pode até ser executado sob uma máquina virtual, mas ainda assim travará todo o sistema. Um computador com o novo processador Ryzen pode travar qualquer malware. Talvez até através de um navegador.
Como já mencionado, a AMD está trabalhando na atualização do protocolo AGESA. Depois disso, os patches serão lançados para todas as versões do BIOS em todas as placas-mãe.