Come verificare se il kernel Linux è "Retpoline" abilitato o no?


17

Per quanto riguarda la vulnerabilità di sicurezza "Spectre", "Retpoline" è stata introdotta come una soluzione per mitigare il rischio. Tuttavia, ho letto un post che menzionava:

Se si crea il kernel senza CONFIG_RETPOLINE, non è possibile creare moduli con retpoline e quindi aspettarsi che vengano caricati, poiché i simboli thunk non vengono esportati.

Se si crea il kernel con il retpoline però, si può caricare correttamente i moduli che non sono costruite con retpoline. ( Fonte )

Esiste un modo semplice e comune / generico / unificato per verificare se il kernel è "Retpoline" abilitato o meno? Voglio fare questo in modo che il mio programma di installazione possa usare la build corretta del modulo del kernel da installare.

Risposte:


21

Se stai usando i kernel mainline, o i kernel della maggior parte delle principali distribuzioni, il modo migliore per verificare il pieno supporto di retpoline ( cioè il kernel è stato configurato con CONFIG_RETPOLINE, ed è stato costruito con un compilatore compatibile con retpoline) è cercare "retpoline generico completo "In /sys/devices/system/cpu/vulnerabilities/spectre_v2. Sul mio sistema:

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

Se vuoi test più completi, per rilevare retpoline su kernel senza il spectre_v2file systree, controlla come spectre-meltdown-checkervanno le cose.


2
Per verificare anche altre vulnerabilità legate al tracollo / allo spettro, esegui $ grep . /sys/devices/system/cpu/vulnerabilities/*, come suggerito nel blog di Greg Kroah-Hartman .
Alex Vong,

1
Grazie @Alex; Stavo rispondendo alla domanda specifica, ma è utile - anche se preferisco head /sys/devices/system/cpu/vulnerabilities/*me stesso ;-). Attualmente copre le vulnerabilità di fusione / spettro, ma dovrebbe anche coprire eventuali vulnerabilità future di natura simile (lo spazio dei nomi è intenzionalmente generico).
Stephen Kitt,

@StephenKitt Sì, headoffre un output formattato più gradevole .
Alex Vong,

4

La risposta di Stephen Kitt è più completa in questo caso specifico, perché il supporto di retpoline richiede anche una nuova versione del compilatore.

Ma in generale, la maggior parte delle distribuzioni ha il file di configurazione del kernel disponibile in uno dei seguenti percorsi:

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

Quindi puoi semplicemente zgrep CONFIG_RETPOLINE /boot/config* /proc/config.gz


4
Mi sconsiglio di eseguire il grepping /boot/config*, perché ciò potrebbe trovarsi CONFIG_RETPOLINEin un'immagine del kernel installata ma non attualmente in esecuzione, dando un falso senso di sicurezza. Esaminare /proc/config.gzo /sys/...è sicuro, ma molte distribuzioni Linux compilano il kernel senza /proc/config.gz.
punti

Potresti rendere la logica un po 'più intelligente e usare uname (o l'equivalente syscall) per ottenere il kernel attualmente in esecuzione e quindi esaminare quel particolare file / boot / config?
Adam Luchjenbroers,

@pts /boot/config-$(uname -r), allora?
muru,

2
L'utilizzo /boot/config-$(uname -r)non è neanche infallibile: non garantisce comunque che la configurazione corrisponda al kernel in esecuzione. I kernel Distro mantengono lo stesso uname -rin più versioni, purché il kernel ABI non cambi.
Stephen Kitt,

Grazie a tutti per la risposta. La tua risposta e il tuo messaggio sono utili.
Weishan Yang,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.