Wie kann ermittelt werden, welches Modul den Kernel verunreinigt?

Wie kann ermittelt werden, welches Modul den Kernel verunreinigt?

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 GFlag bedeutet, dass ein externes GPL-Modul in den Kernel geladen wird. Wie finde ich heraus, welches Modul den Kernel beschädigt?

Ich habe nach [Tt]aint„in /var/log/messages“ oder „in“ gesucht dmesgund 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 lsmodaber : 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 rts5139ERROR: 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: Yein Modul enthält, ohne das die angezeigte Verschmutzung ausgelöst wird.

AKTUALISIEREN: Das rts5139Modul, das Sie sehen, lsmoddas 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 dracutfü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 taintDatei 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, taintenthält die Datei nur eine neue Zeile, die odals " 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?

verwandte Informationen