
Mein Kernel gerät ständig in Panik, wenn ich mit einem bestimmten drahtlosen Netzwerk verbunden bin. Ich würde gerne einen Fehlerbericht senden, aber mein Kernel ist anscheinend infiziert. Von /var/log/messages
:
Apr 17 21:28:22 Eiger kernel: [13330.442453] Pid: 4095, comm: kworker/u:1 Tainted: G O 3.8.4-102.fc17.x86_64 #1
Und
[root@Eiger ~]# cat /proc/sys/kernel/tainted
4096
Ich konnte keine Dokumentation darüber finden, was die 4096-Bitmaske bedeutet, aber das . Wie finde ich heraus, welches Modul den Kernel beschädigt?G
Flag bedeutet, dass ein externes GPL-Modul in den Kernel geladen wird
Ich habe nach [Tt]aint
„in /var/log/messages
“ oder „in“ gesucht dmesg
und nichts gefunden, das dem Laden eines Moduls entspricht. Mein Kernel ist der neueste Kernel von Fedora 17: 3.8.4-102.fc17.x86_64.
AKTUALISIEREN: Es kann am Modul liegen rts5139
. Es wird angezeigt, erzeugt lsmod
aber : Beim Booten des vorherigen Kernels, 3.8.3-103.fc17.x86_64, wird dieses Modul nicht aufgelistet und der Kernel ist nicht infiziert ( ist 0).modinfo rts5139
ERROR: Module rts5139 not found.
lsmod
/proc/sys/kernel/taint
Ich habe versucht, dieses Modul auf die schwarze Liste zu setzen
echo 'blacklist rts5139' >> /etc/modprobe.d/blacklist.conf
aber beim Neustart wird immer noch angezeigt, dass der Kernel beschädigt ist.
Antwort1
Nun, ich glaube nicht, dass ein Standard-Kernelpaket von Fedora irgendwelche Module enthält, die diesen Makel auslösen würden. Daher lautet die Frage: Welche anderen Kernelmodule haben Sie installiert?
Typische Kandidaten wären Grafiktreiber (wobei ich glaube, dass diese meistens das „proprietäre“ Bit setzen) und Wireless-Treiber.
Wenn Sie in der Ausgabe etwas finden lsmod
, das Ihrer Meinung nach ein Kandidat sein könnte, führen Sie es aus modinfo <module-name>
und prüfen Sie, ob die Ausgabe intree: Y
ein Modul enthält, ohne das die angezeigte Verschmutzung ausgelöst wird.
AKTUALISIEREN: Das rts5139
Modul, das Sie sehen, lsmod
das aber scheinbar nicht auf Ihrem System vorhanden ist, befindet sich wahrscheinlich im initrd und wird von dort früh im Bootvorgang geladen, bevor das Hauptdateisystem gemountet wird.
Das erklärt auch, warum Blacklisting nicht funktioniert, da Sie das Initrd mit der aktualisierten Blacklist neu erstellen müssten. Das Neuaufbauen des Initrd dracut
führt jedoch trotzdem dazu, dass das Modul verschwindet.
Antwort2
➜ ~ dmesg | grep -i 'taint'
[ 10.029333] vboxdrv: module verification failed: signature and/or required key missing - tainting kernel
[ 10.029364] Disabling lock debugging due to kernel taint
Antwort3
Eine andere Möglichkeit besteht darin, die taint
Datei jedes Moduls in folgendem Verzeichnis zu untersuchen /sys/module
:
#!/bin/bash
cat /proc/modules |
while read module rest
do
if [[ $(od -A n /sys/module/$module/taint) != " 000012" ]] ; then
echo $module
fi
done
Wenn ein Modul keinen Makel hat, taint
enthält die Datei nur eine neue Zeile, die od
als " 000012
" dargestellt wird. Sie können die Dateigröße nicht überprüfen, da die Größen unabhängig vom tatsächlichen Inhalt alle mit 4.096 Bytes angegeben sind.
Antwort4
Überprüfen Sie Ihr Boot-Protokoll oder beobachten Sie Ihren Boot-Prozess im Frühstadium (bevor Ihre Festplatten RW gemountet werden). Dies könnte ein fehlerhaftes Modul in Ihrem initrd sein.
Habt ihr DKMS oder ähnliches im Einsatz?