como verificar o microcódigo está ativado no meu sistema e como corrigir o pacote de firmware cpu intel que está causando problemas de reinicialização [fechado]

1

Corrige de intel lá pacote de firmware cpu parece estar causando problemas de reinicialização

Estou usando a distribuição centos 7.3 com 1.14.14 kernel e quero saber qual pacote é o firmware da cpu da intel e qual versão está com defeito e como corrigi-lo.

Embora eu ache que o pacote microcode seja o correto.

Também me referi a este doc mas não mencionou o nome e a versão exatos do pacote.

Informações do sistema:

sh-4.2# cat /proc/cpuinfo 
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 62
model name  : Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
stepping    : 4
microcode   : 0x42a
cpu MHz     : 2499.980
cache size  : 25600 KB
physical id : 0
siblings    : 2
core id     : 0
cpu cores   : 1
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology cpuid pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cpuid_fault pti retpoline fsgsbase smep erms xsaveopt
bugs        : cpu_meltdown spectre_v1 spectre_v2
bogomips    : 5000.16
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

processor   : 1
vendor_id   : GenuineIntel
cpu family  : 6
model       : 62
model name  : Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
stepping    : 4
microcode   : 0x42a
cpu MHz     : 2499.980
cache size  : 25600 KB
physical id : 0
siblings    : 2
core id     : 0
cpu cores   : 1
apicid      : 1
initial apicid  : 1
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology cpuid pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cpuid_fault pti retpoline fsgsbase smep erms xsaveopt
bugs        : cpu_meltdown spectre_v1 spectre_v2
bogomips    : 5000.16
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

sh-4.2#

pacote de microcódigo

sh-4.2# yum list installed | grep microcode
microcode_ctl.x86_64             2:2.1-22.5.el7_4                   @updates    
sh-4.2#

Também quero saber:

  1. O microcódigo é o pacote de firmware da CPU da Intel correto?
  2. O que o microcode_ctl realmente faz?
  3. Como mapear o valor do microcódigo em /proc/cpuinfo com microcode_ctl versão do pacote, para identificar o pacote defeituoso?

Atualização:

Eu pude comparar a versão do pacote listada por intel aqui com o meu pacote de sistemas. Primeiro eu descobri o meu sistema CPUID rodando estes comandos yum install cpuid && cpuid | grep serial e verificado a versão afetam para este correspondente CPUID aqui . Parece que estou usando o pacote afetado 0x42a Eu comparei essa versão com a saída de cat /proc/cpuinfo | grep microcode . O não afetado 0x428 é este pacote microcode_ctl-2.1-16.3.el7_3.x86_64 . Eu instalei este pacote, mas não consegui descobrir se meu sistema tem o microcódigo ativado.

Eu tenho mais algumas perguntas -

  1. Não tenho certeza se minha máquina tem microcode ativado no momento da inicialização. Eu cansei desses comandos e ele não emitiu nada dmesg | grep microcode . Eu também verifiquei este grep -i 'microcode' /boot/config-$(uname -r) ele mostra configuração de microcódigo definido como sim, mas ainda em log de tempo de inicialização dmesg | grep microcode não mostrando nada. O microcódigo está realmente habilitado aqui e, senão, como habilitá-lo.
  2. Eu também referida blogue para permitir microcódigo mas foi stucked no esta etapa echo 1 > /sys/devices/system/cpu/microcode/reload o sistema não está permitindo criar este arquivo mesmo com usuário root.
por mchawre 24.01.2018 / 19:31

1 resposta

3

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 ao dracut (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.

    
por 30.01.2018 / 01:08