¿Cómo verificar si el kernel de Linux está “Retpoline” habilitado o no?

17

En cuanto a la vulnerabilidad de seguridad "Spectre", se introdujo "Retpoline" como una solución para mitigar el riesgo. Sin embargo, he leído una publicación que menciona:

Si CONFIG_RETPOLINEcompila el núcleo sin , no puede compilar módulos con retpoline y luego esperar que se carguen, porque los símbolos thunk no se exportan.

Sin embargo, si compila el kernel con retpoline, puede cargar con éxito módulos que no están construidos con retpoline. ( Fuente )

¿Existe una manera fácil y común / genérica / unificada de verificar si el núcleo está habilitado o no para "Retpoline"? Quiero hacer esto para que mi instalador pueda usar la compilación adecuada del módulo del núcleo que se instalará.

Weishan Yang
fuente

Respuestas:

21

Si está utilizando núcleos mainline, o los núcleos de la mayoría de las distribuciones principales, la mejor manera de verificar el soporte completo de retpoline ( es decir, el kernel se configuró CONFIG_RETPOLINEcon un compilador compatible con retpoline) "En /sys/devices/system/cpu/vulnerabilities/spectre_v2. En mi sistema:

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

Si desea pruebas más completas, para detectar retpolines en núcleos sin el spectre_v2archivo systree, vea cómo funcionan las spectre-meltdown-checkercosas.

Stephen Kitt
fuente
2
Para verificar otras vulnerabilidades relacionadas con el deshielo / espectro también, ejecute $ grep . /sys/devices/system/cpu/vulnerabilities/*, lo que se sugiere en el blog de Greg Kroah-Hartman .
Alex Vong
1
Gracias @Alex; Estaba respondiendo la pregunta específica, pero eso es útil, aunque me prefiero a head /sys/devices/system/cpu/vulnerabilities/*mí mismo ;-). Eso actualmente cubre las vulnerabilidades Meltdown / Spectre, pero también debería cubrir cualquier vulnerabilidad futura de naturaleza similar (el espacio de nombres es a propósito genérico).
Stephen Kitt
@StephenKitt Sí, headofrece una salida con mejor formato.
Alex Vong
4

La respuesta de Stephen Kitt es más completa en este caso específico, porque el soporte de retpoline también necesita una nueva versión del compilador.

Pero, en general, la mayoría de las distribuciones tienen el archivo de configuración del núcleo disponible en una de las siguientes ubicaciones:

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

Entonces puedes simplemente zgrep CONFIG_RETPOLINE /boot/config* /proc/config.gz

jpa
fuente
44
Recomiendo contra grepping /boot/config*, porque eso puede encontrarse CONFIG_RETPOLINEen una imagen del kernel que está instalada pero que actualmente no se está ejecutando, lo que da una falsa sensación de seguridad. Examinar /proc/config.gzo /sys/...es seguro, pero muchas distribuciones de Linux compilan el núcleo sin él /proc/config.gz.
pts
¿Podría hacer que la lógica sea un poco más inteligente y usar uname (o la llamada al sistema equivalente) para obtener el kernel actualmente en ejecución y luego examinar ese archivo / boot / config en particular?
Adam Luchjenbroers
@pts /boot/config-$(uname -r), entonces?
muru
2
El uso /boot/config-$(uname -r)tampoco es infalible: todavía no garantiza que la configuración coincida con el núcleo en ejecución. Los núcleos de distribución se mantienen igual uname -ren varias versiones, siempre que la ABI del núcleo no cambie.
Stephen Kitt el
Gracias a todos por su respuesta. Su respuesta y mensaje son útiles.
Weishan Yang el