1 .. include:: ../disclaimer-zh_CN.rst 2 3 :Original: :doc:`../../../admin-guide/tainted- 4 5 :译者: 6 7 吴想成 Wu XiangCheng <bobwxc@email.cn> 8 9 受污染的内核 10 ------------- 11 12 当发生一些在稍后调查问题时可能 13 (tainted)”的。不用太过担心,大 14 主要在有人想调查某个问题时才有 15 的事件。这就是为什么来自受污染 16 未受污染的内核重现问题。 17 18 请注意,即使在您消除导致污染的 19 污染状态,以表示内核仍然不可信 20 bug”)、可恢复错误(“kernel oops 21 受污染状态,并将有关此的调试信 22 ``/proc/`` 中的文件在运行时检查受 23 24 25 BUG、Oops或Panics消息中的污染标志 26 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 27 28 在顶部以“CPU:”开头的一行中可以 29 在进程ID(“PID:”)和触发事件命 30 31 BUG: unable to handle kernel NULL poin 32 Oops: 0002 [#1] SMP PTI 33 CPU: 0 PID: 4424 Comm: insmod Tainted: 34 Hardware name: Red Hat KVM, BIOS 0.5.1 35 RIP: 0010:my_oops_init+0x13/0x1000 [kp 36 [...] 37 38 如果内核在事件发生时没有被污染 39 么它将是“Tainted:”以及字母或空 40 41 Tainted: P W O 42 43 下表解释了这些字符的含义。在本 44 警告( ``W`` ),并且加载了外部构 45 了污染。要解码其他字符,请使用 46 47 48 解码运行时的污染状态 49 ~~~~~~~~~~~~~~~~~~~~~ 50 51 在运行时,您可以通过读取 ``cat /pr 52 如果返回 ``0`` ,则内核没有受到污 53 这个数字的最简单方法是使用脚本 54 发行版可能会将其作为名为 ``linux-t 55 供;如果没有,您可以从 56 `git.kernel.org <https://git.kernel.org/pub/sc 57 网站下载此脚本并用 ``sh kernel-chktai 58 语句的机器上打印这样的内容:: 59 60 Kernel is Tainted for following reason 61 * Proprietary module was loaded (#0) 62 * Kernel issued warning (#9) 63 * Externally-built ('out-of-tree') mo 64 See Documentation/admin-guide/tainted- 65 https://www.kernel.org/doc/html/lates 66 a more details explanation of the var 67 Raw taint value as int/string: 4609/'P 68 69 你也可以试着自己解码这个数字。 70 在本例中您可以通过下表找到数字 71 个位域(bitfield),其中每个位表 72 前面提到的脚本来处理。但是如果 73 设置了哪些位:: 74 75 $ for i in $(seq 18); do echo $(($i-1) 76 77 污染状态代码表 78 ~~~~~~~~~~~~~~~ 79 80 === ===== ====== ========================== 81 位 日志 数字 内核被污染的原 82 === ===== ====== ========================== 83 0 G/P 1 已加载专用模块 84 1 _/F 2 模块被强制加载 85 2 _/S 4 内核运行在不合规 86 3 _/R 8 模块被强制卸载 87 4 _/M 16 处理器报告了机器 88 5 _/B 32 引用了错误的页或 89 6 _/U 64 用户空间应用程序 90 7 _/D 128 内核最近死机了, 91 8 _/A 256 ACPI表被用户覆盖 92 9 _/W 512 内核发出警告 93 10 _/C 1024 已加载staging驱动程 94 11 _/I 2048 已应用平台固件缺 95 12 _/O 4096 已加载外部构建( 96 13 _/E 8192 已加载未签名的模 97 14 _/L 16384 发生软锁定 98 15 _/K 32768 内核已实时打补丁 99 16 _/X 65536 备用污染,为发行 100 17 _/T 131072 内核是用结构随机 101 === ===== ====== ========================== 102 103 注:字符 ``_`` 表示空白,以便于阅 104 105 污染的更详细解释 106 ~~~~~~~~~~~~~~~~~ 107 108 0) ``G`` 加载的所有模块都有GPL或 109 没有MODULE_LICENSE(模块许可证) 110 兼容的模块被认为是专有的。 111 112 113 1) ``F`` 任何模块被 ``insmod -f`` 强 114 115 2) ``S`` 内核运行在不合规范的处 116 因此无法保证正确执行。内核 117 118 - 在x86上:PAE是通过intel CPU(如 119 CPU不报告PAE,但可能有功能实 120 运行,MSR被暴露到用户空间中 121 - 在arm上:在某些CPU(如Keystone 122 - 在arm64上:CPU之间存在不匹配 123 - 某些驱动程序正在被用在不受 124 上的scsi/snic,非x86/x86_64/itanium 125 irqchip/irq-gic的固件设置…)。 126 127 3) ``R`` 模块被 ``rmmod -f`` 强制卸载 128 129 4) ``M`` 任何处理器报告了机器检 130 131 5) ``B`` 页面释放函数发现错误的 132 或内核错误;日志中应该有其 133 134 6) ``U`` 用户或用户应用程序特意 135 136 7) ``D`` 内核最近死机了,即出现 137 138 8) ``A`` ACPI表被重写。 139 140 9) ``W`` 内核之前已发出过警告( 141 142 10) ``C`` 已加载staging驱动程序。 143 144 11) ``I`` 内核正在处理平台固件(BI 145 146 12) ``O`` 已加载外部构建(“树外 147 148 13) ``E`` 在支持模块签名的内核中 149 150 14) ``L`` 系统上先前发生过软锁定 151 152 15) ``K`` 内核已经实时打了补丁。 153 154 16) ``X`` 备用污染,由Linux发行版定 155 156 17) ``T`` 内核构建时使用了randstruct 157 布局(甚至是性能病态的布局
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.