Kiedy jądro jest skażone, oznacza to, że jest w stanie, który nie jest obsługiwany przez społeczność . Większość programistów jądra zignoruje zgłoszenia błędów dotyczących skażonych jąder, a członkowie społeczności mogą poprosić o poprawienie stanu skażenia, zanim będą mogli przystąpić do diagnozowania problemów związanych z jądrem. Ponadto niektóre funkcje debugowania i wywołania interfejsu API mogą być wyłączone, gdy jądro jest skażone.
W większości przypadków z zastrzeżonymi sterownikami można bezpiecznie zignorować stan skażenia , ale niektóre scenariusze powodujące skażenie jądra mogą wskazywać na poważne problemy z systemem.
Ta funkcja ma na celu identyfikację warunków, które mogą utrudnić prawidłowe rozwiązanie problemu z jądrem. Na przykład ładowanie zastrzeżonego modułu może spowodować, że wyjście debugowania jądra będzie niewiarygodne, ponieważ programiści jądra nie mają dostępu do kodu źródłowego modułu i dlatego nie mogą ustalić, co moduł zrobił z jądrem. Podobnie, jeśli w jądrze wcześniej wystąpił błąd lub wystąpił poważny błąd sprzętowy, informacje debugowania wygenerowane przez jądro mogą nie być wiarygodne.
Jądro może zostać skażone z jednego z kilku powodów , w tym (między innymi):
- Korzystanie z zastrzeżonego (lub niezgodnego z GPL) modułu jądra - jest to najczęstsza przyczyna skażonych jąder i zwykle wynika z ładowania zastrzeżonych sterowników wideo NVIDIA lub AMD
- Zastosowanie sterowników pomostowych , które są częścią kodu źródłowego jądra, ale nie są w pełni przetestowane
- Korzystanie z modułów nienależących do drzewa , które nie są zawarte w kodzie źródłowym jądra Linux
- Wymuszone ładowanie lub rozładowywanie modułu jądra (takie jak wymuszone wstawianie modułu, który nie został zbudowany dla bieżącej wersji jądra)
- Zastosowanie jądra SMP (wieloprocesorowego) na niektórych nieobsługiwanych procesorach jednoprocesorowych, głównie starszych procesorach AMD Athlon
- Przesłanianie z ACPI DSDT, czasami konieczna w celu skorygowania błędów zarządzania energią (patrz tutaj szczegóły)
- Pewne krytyczne błędy, takie jak wyjątki sprawdzania komputera i przestoje jądra
- Pewne poważne błędy w oprogramowaniu systemowym (BIOS, UEFI), które jądro musi obejść
Każdy z tych warunków jest reprezentowany przez konkretną flagę w jądrze. Niektórzy dostawcy Linuksa, na przykład SUSE, dodają dodatkowe flagi skażenia wskazujące warunki, takie jak ładowanie modułu, który nie jest obsługiwany przez dostawcę.
Więcej informacji jest dostępnych w dokumentacji jądra . Są tam wymienione flagi skażenia (z _ stand-in dla „pustych”)
- G | P : G, jeśli wszystkie załadowane moduły mają licencję GPL lub kompatybilną, w przeciwnym razie załadowano moduł prawnie zastrzeżony. Zakłada się, że moduły bez MODULE_LICENSE lub z MODULE_LICENSE, które nie są rozpoznawane przez insmod jako kompatybilne z GPL.
- F | _ : jeśli którykolwiek moduł został wymuszony przez „insmod -f”, w przeciwnym razie, jeśli wszystkie moduły zostały załadowane normalnie.
- S | _ : jeśli wystąpił błąd w jądrze SMP działającym na sprzęcie, który nie został certyfikowany jako bezpieczny do uruchamiania wieloprocesorowego. Obecnie dzieje się tak tylko w przypadku różnych Athlonów, które nie obsługują SMP.
- R | _ : jeżeli moduł został wymuszony przez rozładunek
rmmod -f
, w przeciwnym razie, jeśli wszystkie moduły zostały normalnie rozładowane.
- M | _ : jeśli jakikolwiek procesor zgłosił wyjątek kontroli maszyny , w przeciwnym razie nie wystąpiły wyjątki kontroli maszyny.
- B | _ : jeśli funkcja zwalniania strony znalazła złe odwołanie do strony lub niektóre nieoczekiwane flagi strony.
- U | _ : jeśli użytkownik lub aplikacja użytkownika wyraźnie zażądała ustawienia flagi Tainted.
- D | _ : jeśli jądro niedawno zmarło, tzn. Wystąpił błąd OOPS lub BŁĄD.
- A | _ : jeśli tabela ACPI została przesłonięta.
- W | _ : jeśli jądro wcześniej wydało ostrzeżenie (chociaż niektóre ostrzeżenia mogą ustawiać bardziej szczegółowe flagi skażenia).
- C | _ : jeśli załadowano sterownik pomostowy.
- I | _ : jeśli jądro pracuje nad poważnym błędem w oprogramowaniu układowym platformy (BIOS lub podobnym).
- O | _ : jeśli załadowano moduł zbudowany zewnętrznie („z drzewa”).
- E | _ : jeśli niepodpisany moduł został załadowany do podpisu modułu obsługującego jądro.
- L | _ : jeśli wcześniej w systemie wystąpiła miękka blokada.
- K | _ : jeśli jądro zostało załatane na żywo.