drs*_*drs 7 fedora kernel-panic kernel-modules linux-kernel
连接到某个无线网络时,我的内核一直处于恐慌状态。我想发送错误报告,但我的内核显然已被污染。来自/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
Run Code Online (Sandbox Code Playgroud)
和
[root@Eiger ~]# cat /proc/sys/kernel/tainted
4096
Run Code Online (Sandbox Code Playgroud)
我无法找到有关 4096 位掩码含义的文档,但该. 如何找出哪个模块污染了内核?G
标志表示外部 GPL 模块已加载到内核中
我已经搜索[Tt]aint
了 /var/log/messages
或dmesg
没有找到与加载模块时对应的任何内容。我的内核是 Fedora 17 的最新内核:3.8.4-102.fc17.x86_64。
更新:这可能是由于rts5139
模块。它出现在lsmod
但modinfo rts5139
产生ERROR: Module rts5139 not found.
引导以前的内核 3.8.3-103.fc17.x86_64 时,此模块未列出lsmod
并且内核未受污染(/proc/sys/kernel/taint
为 0)。
我试过把这个模块列入黑名单
echo 'blacklist rts5139' >> /etc/modprobe.d/blacklist.conf
Run Code Online (Sandbox Code Playgroud)
但是重新启动仍然显示内核被污染。
好吧,我不相信标准的 Fedora 内核包会包含任何会触发此污点的模块,所以问题是,您还安装了哪些其他内核模块?
常见的候选者是图形驱动程序(尽管我认为这些驱动程序主要设置“专有”位)和无线驱动程序。
如果您可以在lsmod
输出中找到任何您认为可能是候选的内容,然后运行modinfo <module-name>
并查看输出是否包含intree: Y
任何模块,如果没有这些模块会触发您看到的污点。
更新:rts5139
您在其中看到lsmod
但似乎不在您的系统上的模块可能在 initrd 中,并且在安装主文件系统之前的引导过程早期从那里加载。
这也解释了为什么黑名单不起作用,因为您必须使用更新的黑名单重建 initrd。dracut
尽管如此,重建 initrd将导致模块消失。
小智 5
\xe2\x9e\x9c ~ dmesg | grep -i 'taint'\n[ 10.029333] vboxdrv: module verification failed: signature and/or required key missing - tainting kernel\n[ 10.029364] Disabling lock debugging due to kernel taint\n
Run Code Online (Sandbox Code Playgroud)\n
另一种方法是检查taint
以下每个模块的文件/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
Run Code Online (Sandbox Code Playgroud)
如果一个模块没有污点,那么该taint
文件将只包含一个换行符,od
表示为“ 000012
”。您无法检查文件大小,因为无论其实际内容如何,大小都列为 4,096 字节。