Como verificar se o kernel do Linux está "Retpoline" ativado ou não?

17

Quanto à vulnerabilidade de segurança "Spectre", o "Retpoline" foi introduzido para ser uma solução para mitigar o risco. No entanto, eu li um post que mencionava:

Se você constrói o kernel sem CONFIG_RETPOLINE, não pode construir módulos com o retpoline e espera que eles sejam carregados - porque os símbolos de thunk não são exportados.

Se você construir o kernel com o retpoline, poderá carregar com êxito os módulos que não foram criados com o retpoline. ( Fonte )

Existe uma maneira fácil e comum / genérica / unificada de verificar se o kernel está "Retpoline" ativado ou não? Quero fazer isso para que meu instalador possa usar a compilação apropriada do módulo do kernel a ser instalado.

Weishan Yang
fonte

Respostas:

21

Se você estiver usando kernels da linha principal ou da maioria das principais distribuições, a melhor maneira de verificar o suporte total ao retpoline ( ou seja, o kernel foi configurado com CONFIG_RETPOLINEe construído com um compilador compatível com retpoline) é procurar “Retpoline genérico completo ”Em /sys/devices/system/cpu/vulnerabilities/spectre_v2. No meu sistema:

$ cat /sys/devices/system/cpu/vulnerabilities/spectre_v2
Mitigation: Full generic retpoline, IBPB, IBRS_FW

Se você deseja testes mais abrangentes, para detectar retpolinas nos kernels sem o spectre_v2arquivo systree, verifique como as spectre-meltdown-checkercoisas funcionam.

Stephen Kitt
fonte
2
Para verificar também outras vulnerabilidades relacionadas ao colapso / espectro, corra $ grep . /sys/devices/system/cpu/vulnerabilities/*, o que é sugerido no blog de Greg Kroah-Hartman .
Alex Vong
1
Obrigado @Alex; Eu estava respondendo a pergunta específica, mas isso é útil - embora eu prefira a head /sys/devices/system/cpu/vulnerabilities/*mim mesma ;-). Atualmente, ele cobre as vulnerabilidades Meltdown / Spectre, mas também deve cobrir quaisquer vulnerabilidades futuras de natureza semelhante (o espaço para nome é propositadamente genérico).
Stephen Kitt
@StephenKitt Sim, headfornece uma saída formatada melhor.
21818 Alex Vong
4

A resposta de Stephen Kitt é mais abrangente nesse caso específico, porque o suporte ao retpoline também precisa de uma nova versão do compilador.

Mas, em geral, a maioria das distribuições tem o arquivo de configuração do kernel disponível em um dos seguintes locais:

  • /boot/config-4.xx.xx-...
  • /proc/config.gz

Então você pode simplesmente zgrep CONFIG_RETPOLINE /boot/config* /proc/config.gz

jpa
fonte
4
Eu recomendo o grepping in /boot/config*, porque isso pode ser encontrado CONFIG_RETPOLINEem uma imagem do kernel que está instalada, mas não está em execução no momento, dando uma falsa sensação de segurança. Examinar /proc/config.gzou /sys/...é seguro, mas muitas distribuições Linux compilam o kernel sem /proc/config.gz.
pts
Você poderia tornar a lógica um pouco mais inteligente e usar uname (ou o equivalente syscall) para obter o kernel em execução no momento e depois examinar esse arquivo / boot / config específico?
Adam Luchjenbroers 06/04
@pts /boot/config-$(uname -r), então?
Muni
2
O uso /boot/config-$(uname -r)também não é infalível: ainda não garante que a configuração corresponda ao kernel em execução. Os kernels de uname -rdistribuição mantêm o mesmo em várias versões, desde que a ABI do kernel não seja alterada.
Stephen Kitt
Obrigado a todos pela sua resposta. Sua resposta e mensagem são úteis.
Weishan Yang