Sobre a falha de segmentação dos Ryzen

Ao contrário das supostas falhas de segurança divulgadas recentemente que mais parecem picaretagem, a falha de segmentação dos Ryzen foi descoberta por conceituadas comunidades de desenvolvedores e confirmada pela AMD. Veja se o seu processador é afetado.


O que é a falha e os processadores afetados

Uma falha de segmentação (segfault) ocorre quando é feito um acesso a uma porção da RAM que não deveria ser acessada, como tentar ler uma variável que foi descartada ou realocada, utilizar matrizes cujo índice extrapola os limites da mesma, acessar segmentos da memória ainda não inicializados ou tentar escrever em segmentos que sejam de somente leitura, apenas para citar alguns exemplos.

Desde o final do ano passado uma falha que causa erros de segmentação nos Ryzen está sendo investigada por diversas comunidades de desenvolvedores, até que finalmente a AMD reconheceu o problema e está promovendo um recall dos processadores afetados – segundo a empresa, alguns lotes daqueles fabricados até a vigésima quinta semana de 2017 tem a falha. Observe que trata-se de um problema na fabricação dos processadores, portanto é algo físico (na pastilha de silício) que não é solucionável com uma atualização do microcódigo.

Para ver a semana que o processador foi fabricado, observe o exemplo abaixo:


O meu Ryzen 7 1700 foi fabricado na sexta semana de 2017, então pode ser afetado pela falha.

Como a falha se manifesta

A falha ocorre somente no Linux quando é utilizado o compilador GCC e resulta em travamento da aplicação. Portanto, se você utiliza apenas o Windows não terá problemas. Como nem todos os lotes são afetados, há um script que pode ser utilizado para testar o processador, o Kill Ryzen.

Ele deve ser rodado preferencialmente no Ubuntu 17.04 ou derivados (pode ser em uma máquina virtual ou diretamente pelo pendrive no modo Live). Se o script der erro como mostrado abaixo o seu processador é afetado pela falha:

Nos processadores afetados o segfault geralmente ocorre em questão de segundos

O teste é composto na verdade por dois scripts: o kill-ryzen.sh e o buildloop.sh e para rodá-los os mesmos devem ser marcados como executáveis. Para tanto navegue até a pasta onde os scripts foram baixados e entre com os seguintes comandos:

sudo chmod +x buildloop.sh
sudo chmod +x kill-ryzen.sh

Em seguida execute o script:

./kill-ryzen.sh


O kill-ryzen.sh baixará os pacotes do GCC em um ramdrive e rodará em loop o buildloop.sh:


O uso do processador fica em 100% durante todo o teste:


Deixei rodando por quatro horas no meu sistema, sem falhas. Dei-me por satisfeito e encerrei o script, muito provavelmente o meu processador não é de um dos lotes afetados - de qualquer modo, não tenho a intenção de compilar algo grande como o kernel Linux algum dia, que é um exemplo de compilação com o GCC que usaria 100% do processador por horas a fio.

O RMA

Se o seu processador tem a falha, visite esta página da AMD para iniciar o processo de RMA. Como nem todos os lotes são afetados, a AMD exige que sejam anexadas uma foto do processador (como a mostrada acima, da semana de fabricação) e um print da falha ao rodar o script de testes. Relatos dão conta de que o processo é rápido, mesmo no Brasil.

Comentários