O microcódigo problemático com a mitigação apressadamente desenvolvida para a vulnerabilidade do Specter Variant 2 foi lançado em 3 de janeiro para o RHEL e 4 de janeiro para o CentOS: link
Mais tarde, o microcódigo incluído nesse pacote para os processadores Broadwell e Haswell acabou tendo problemas e foi revertido: link
De acordo com o último aviso de segurança do RedHat, sua versão do pacote microcode_ctl
2: 2.1-22.5.el7_4 é a versão que já tem o problema de recuperação do microcódigo. Mas a atualização do microcódigo é incorporada ao arquivo initramfs
, portanto, se você suspeitar que ainda está tendo problemas relacionados ao microcódigo, recrie seu arquivo initramfs
(classicamente o comando mkinitrd
ou dracut
do RHEL / Centos 7 e mais recente).
O pacote microcode_ctl
contém os arquivos de microcódigo reais e algumas ferramentas para criar a atualização correta do microcódigo no arquivo initramfs
. Os arquivos de microcódigo reais estão instalados em /lib/firmware/intel-ucode
: existem alguns arquivos pequenos, um para cada modelo de processador Intel que já precisou de uma atualização de microcódigo.
Para alguns processadores da Intel, descobriu-se que, em alguns casos, era necessário aplicar uma atualização de microcódigo o mais cedo possível no processo de inicialização, para evitar certos erros de hardware.
(Mais especificamente, processadores Intel com código de modelo / proc / cpuinfo 79 e microcódigo original o processo de atualização não eram confiáveis se /sys/devices/system/cpu/microcode/reload
fosse usado enquanto o sistema estava rodando no modo SMP normal. Esse bug poderia ser evitado O BIOS instala a atualização do microcódigo ou instala a atualização no início da inicialização, enquanto o processo de inicialização ainda não iniciou todos os núcleos e ainda estava sendo executado em apenas um núcleo.)
Para este propósito, um recurso de "carga de microcódigo inicial" foi desenvolvido no Linux. Se o arquivo initrd / initramfs contiver um arquivo chamado kernel/x86/microcode/GenuineIntel.bin
(para Intel) ou kernel/x86/microcode/AuthenticAMD.bin
(para AMD), o kernel tentará carregá-lo como uma atualização de microcódigo bem no início do processo de inicialização. Nenhuma ferramenta de espaço do usuário é necessária para essa funcionalidade .
No RHEL / Centos 7, para ver se o seu arquivo initramfs contém um arquivo de atualização de microcódigo inicial, execute este comando:
lsinitrd /boot/initramfs-$(uname -r).img | less
Se o início da saída se parece com isso, uma atualização de microcódigo é incluída:
Image: /boot/initramfs-3.10.0-693.el7.x86_64.img: 20M
========================================================================
Early CPIO image
========================================================================
drwxr-xr-x 3 root root 0 Oct 11 05:11 .
-rw-r--r-- 1 root root 2 Oct 11 05:11 early_cpio
drwxr-xr-x 3 root root 0 Oct 11 05:11 kernel
drwxr-xr-x 3 root root 0 Oct 11 05:11 kernel/x86
drwxr-xr-x 2 root root 0 Oct 11 05:11 kernel/x86/microcode
-rw-r--r-- 1 root root 12288 Oct 11 05:11 kernel/x86/microcode/GenuineIntel.bin
========================================================================
Version: dracut-033-502.el7
Arguments: -f -v
[... main initrd contents skipped ...]
Além dos arquivos de microcódigo reais, o pacote microcode_ctl
RPM contém os seguintes itens:
-
/usr/lib/dracut/dracut.conf.d/01-microcode.conf
, o arquivo que informa aodracut
(o criador initramfs) para adicionar a atualização do microcódigo inicial ao arquivo initramfs. -
/usr/lib/systemd/system/microcode.service
que usa/sys/devices/system/cpu/microcode/reload
para carregar a atualização do microcódigo no caso de a atualização do microcódigo inicial ter sido desativada ou não ter sido executada. Ele tem uma exceção especial para os processadores Intel com o código de modelo 79: nesses processadores ele não faz nada. -
/usr/sbin/intel-microcode2ucode
, uma ferramenta para converter o arquivo de microcódigo da Intel em um formato utilizável pelo mecanismo de atualização de microcódigo do Linux. - um arquivo README em
/usr/share/doc/microcode_ctl/README
.
Se você estiver executando em uma máquina virtual, não precisará se preocupar com atualizações de microcódigo - isso é uma tarefa do administrador do host de virtualização, uma VM não pode fazê-lo. Mesmo se você tiver o pacote microcode_ctl
instalado, ele não fará nada se você estiver executando em uma VM.
Para reverter o microcódigo problemático, você precisa eliminar todas as fontes do microcódigo problemático do seu sistema:
- reverter quaisquer atualizações de firmware que incluam o firmware do problema
- certifique-se de que o pacote
microcode_ctl
seja uma versão que tenha o problema de recuperação do microcódigo (você fez isso) - verifique se o arquivo initramfs foi atualizado para corresponder ao tempo de instalação do pacote
microcode_ctl
package
Então desligue e reinicie. Um microcódigo não é persistente em ciclos de energia, mas se uma CPU já tiver uma nova versão de microcódigo carregada, ela não aceitará uma atualização de microcódigo com um número de versão menor.