Correção de pânico no kernel Linux evita crash em máquinas virtuais AMD durante injeção de erros

Correção de pânico no kernel Linux evita crash em máquinas virtuais AMD durante injeção de erros

William Roche, da Oracle, enviou uma correção importante para o subsistema de tratamento de erros de hardware (MCE) do kernel linux. O patch resolve uma falha crítica que causava o travamento completo (kernel panic) de máquinas virtuais (VMs) rodando em processadores AMD sob o QEMU/KVM. O problema ocorria especificamente durante a manipulação de “erros de memória adiados”, uma técnica usada para testar a resiliência do sistema a falhas de hardware.

A falha foi introduzida recentemente após uma tentativa de unificar os manipuladores de erros da AMD, mas não levou em conta que ambientes virtualizados podem não oferecer suporte a todos os recursos de hardware modernos.

Para o iniciante: o que é MCE e por que o sistema travava?

Imagine que o kernel do linux tem um “inspetor de segurança” interno chamado MCE (Machine Check Exception). A função dele é vigiar o processador e a memória em busca de fumaça (erros físicos). Se algo falha, o inspetor corre para um painel de controle para ler os detalhes do erro e tentar salvar o sistema.

O erro aqui era como se o inspetor tentasse abrir uma gaveta específica (um registro chamado MCA_DESTAT) que só existe em painéis de luxo novos (arquitetura SMCA da AMD). No entanto, em uma casa alugada (uma máquina virtual), esse painel é simplificado e a gaveta simplesmente não existe. Quando o inspetor tentava forçar a abertura dessa gaveta inexistente, ele entrava em pânico e desligava toda a casa para evitar um desastre imaginário, resultando no “Kernel panic”.

O que muda na prática: antes e depois do patch

A mudança foca na validação da presença do recurso antes de qualquer tentativa de acesso ao hardware virtualizado.

Detalhes técnicos e implementação

O problema técnico residia na função amd_clear_bank. Após o commit 7cb735d7c0cb, o código passou a tentar limpar o registro MCA_DESTAT para todos os erros adiados, mesmo aqueles registrados no status padrão. Em sistemas reais modernos da AMD, isso funciona bem, mas o QEMU/KVM muitas vezes emula arquiteturas mais simples onde esses registros não são mapeados.

O patch v2 introduz uma condicional robusta:

  1. O código agora verifica explicitamente a flag mce_flags.smca.
  2. O registro MCA_DESTAT só é limpo se o hardware for Scalable MCA.
  3. Garante que o registro MCA_STATUS continue sendo limpo corretamente para manter a compatibilidade com sistemas legados e máquinas virtuais.

Essa correção é vital para provedores de nuvem e desenvolvedores que utilizam injeção de erros de memória para validar softwares de alta disponibilidade, garantindo que o ambiente de teste seja tão estável quanto o hardware real.

Status de lançamento e disponibilidade

O patch foi enviado em 18 de fevereiro de 2026 e já recebeu o selo de revisão de Yazen Ghannam, mantenedor da AMD.

  • Status atual: Enviado como v2 (revisado e aprovado em princípio).
  • Previsão de lançamento: Deve ser integrado de forma prioritária ao ciclo do kernel 7.0-rcX e marcado para “backport” nas versões estáveis (LTS).
  • Adoção: Usuários de Proxmox, AWS, Azure e Oracle Cloud que utilizam instâncias baseadas em AMD e kernels recentes serão os principais beneficiados pela correção automática via atualizações de segurança das distribuições.