Jak sprawdzić, czy jądro Linuksa jest włączone „Retpoline”, czy nie?

17

Jeśli chodzi o lukę w zabezpieczeniach „Spectre”, „Retpoline” została wprowadzona jako rozwiązanie zmniejszające ryzyko. Jednak przeczytałem post, w którym wspomniano:

Jeśli zbudujesz jądro bez niego CONFIG_RETPOLINE, nie będziesz mógł budować modułów za pomocą retpoliny, a następnie oczekiwać, że się załadują - ponieważ symbole zgubne nie są eksportowane.

Jeśli zbudować jądro z retpoline choć, może z powodzeniem załadować moduły, które nie są zbudowane z retpoline. ( Źródło )

Czy istnieje prosty i powszechny / ogólny / zunifikowany sposób sprawdzenia, czy jądro ma włączoną funkcję „Retpoline”? Chcę to zrobić, aby mój instalator mógł użyć właściwej kompilacji modułu jądra do zainstalowania.

Weishan Yang
źródło

Odpowiedzi:

21

Jeśli używasz jądra głównego lub jądra większości głównych dystrybucji, najlepszym sposobem sprawdzenia pełnej obsługi retpoliny ( tj . Jądro zostało skonfigurowane CONFIG_RETPOLINEi zostało zbudowane z kompilatorem obsługującym retpolinę) jest poszukiwanie „pełnej ogólnej retpoliny” ”w /sys/devices/system/cpu/vulnerabilities/spectre_v2. W moim systemie:

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

Jeśli chcesz bardziej kompleksowych testów, aby wykryć retpoliny w jądrach bez spectre_v2pliku systree, sprawdź, jak to działa spectre-meltdown-checker.

Stephen Kitt
źródło
2
Aby sprawdzić inne luki związane z krachem / widmem, uruchom $ grep . /sys/devices/system/cpu/vulnerabilities/*, co sugeruje blog Grega Kroah-Hartmana .
Alex Vong,
1
Dzięki @Alex; Odpowiedziałem na konkretne pytanie, ale jest to przydatne - chociaż wolę head /sys/devices/system/cpu/vulnerabilities/*siebie ;-). Obejmuje to obecnie luki w zabezpieczeniach Meltdown / Spectre, ale powinno również obejmować wszelkie przyszłe luki o podobnym charakterze (przestrzeń nazw jest celowo ogólna).
Stephen Kitt,
@StephenKitt Tak, headdaje ładniejszy sformatowany wynik.
Alex Vong,
4

Odpowiedź Stephena Kitta jest bardziej wyczerpująca w tym konkretnym przypadku, ponieważ obsługa retpoliny wymaga również nowej wersji kompilatora.

Ale w ogólnym przypadku większość dystrybucji ma plik konfiguracyjny jądra dostępny w jednej z następujących lokalizacji:

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

Więc możesz po prostu zgrep CONFIG_RETPOLINE /boot/config* /proc/config.gz

jpa
źródło
4
Odradzam włączanie /boot/config*, ponieważ może to znaleźć się CONFIG_RETPOLINEw obrazie jądra, który jest zainstalowany, ale obecnie nie działa, dając fałszywe poczucie bezpieczeństwa. Badanie /proc/config.gzlub /sys/...jest bezpieczne, ale wiele dystrybucji Linuksa kompiluje jądro bez /proc/config.gz.
pkt
Czy możesz uczynić logikę nieco mądrzejszą i użyć uname (lub równoważnego syscall), aby uzyskać aktualnie działające jądro, a następnie sprawdzić ten konkretny plik / boot / config?
Adam Luchjenbroers,
@pts /boot/config-$(uname -r), więc?
muru
2
Użycie również /boot/config-$(uname -r)nie jest głupie: nadal nie gwarantuje, że config pasuje do działającego jądra. Jądra Distro pozostają takie same uname -rw wielu wersjach, o ile ABI jądra się nie zmienia.
Stephen Kitt,
Dziękuję wszystkim za odpowiedź. Twoja odpowiedź i wiadomość są pomocne.
Weishan Yang,