Linux 获得双重快速双重更新以修复内核

Linux 获得双重快速双重更新以修复内核

Linux 获得双倍快速双更新来修复内核 糟糕! Plato区块链数据智能。垂直搜索。人工智能。

Linux 从未遭受臭名昭著的 BSoD,简称 蓝屏死机,这个名称是指与 Windows 系统崩溃相关的可怕的“出现了严重错误”的消息。

多年来,微软尝试了很多方法来摆脱“BSoD”这个绰号,包括更改出现崩溃消息时使用的背景颜色、添加超大号悲伤表情符号以使消息更具同情心、显示二维码用你的手机拍照来帮助你诊断问题,而不是用当时恰好加载的内核代码对象的技术混乱列表填满屏幕。

(这些故障转储列表通常会导致每次系统崩溃都归咎于防病毒和威胁防御软件,仅仅是因为它们的名称往往出现在加载模块列表的顶部或附近,而不是因为它们有任何事可做与崩溃,但因为它们通常加载较早并且恰好位于列表的顶部,因此成为方便的替罪羊。)

更好的是,“BSoD”不再像过去那样是日常的、随手可得的贬义词,因为 Windows 崩溃的频率比以前少了很多。

我们并不是说 Windows 永远不会崩溃,或者暗示它现在神奇地没有错误; 只是注意到您通常不需要像以前那样经常使用 BSoD 这个词。

Linux 崩溃通知

当然,Linux 从来没有 BSoD,甚至在 Windows 似乎一直都有 BSoD 的时候也没有,但这并不是因为 Linux 从不崩溃,或者神奇地没有错误。

只是 Linux 不会 BSoD(是的,该术语可以用作不及物动词,例如“我的笔记本电脑在一封电子邮件中被 BSoDded”),因为——用一种令人愉快的轻描淡写的说法——它遭受了 哎呀,或者如果 oops 严重到系统即使性能下降也无法可靠地保持运行,它 恐慌.

(也可以配置 Linux 内核,以便 哎呀 总是被“提升”为 恐慌,对于安全考虑使系统突然关闭(尽管有些数据没有及时保存)比最终处于可能导致数据泄漏或数据损坏的不确定状态的系统更好的环境。)

An 哎呀 通常会产生类似这样的控制台输出(如果您想探索,我们在下面提供了源代码 哎呀恐慌 为自己):

[12710.153112] oops init (level = 1) [12710.153115] 通过 BUG() 触发 oops [12710.153127] ------------[ 在这里剪切 ]------------ [12710.153128] /home/duck/Articles/linuxoops/oops.c:17 的内核 BUG! [12710.153132] 无效操作码:0000 [#1] PREEMPT SMP PTI [12710.153748] CPU:0 PID:5531 Comm:insmod。 . . [12710.154322] 硬件名称:XXXX [12710.154940] RIP:0010:oopsinit+0x3a/0xfc0 [oops] [12710.155548] 代码:. . . . . [12710.156191] RSP:。 . . 旗帜: 。 . . [12710.156849] RAX:。 . . RBX:。 . . RCX:。 . . [12710.157513] RDX:。 . . 相对强弱指数:。 . . RDI:。 . . [12710.158171] RBP:。 . . R08:。 . . R09:。 . . [12710.158826] R10:。 . . R11:。 . . R12:。 . . [12710.159483] R13:。 . . R14:。 . . R15:。 . . [12710.160143] 财政司司长:。 . . GS:。 . . 知识: . . . . . . . [12710.163474] Call Trace: [12710.164129] [12710.164779] do_one_initcall+0x56/0x230 [12710.165424] do_init_module+0x4a/0x210 [12710.166050] __do_sys_finit_module+0x9e/0xf0 [12710.166711] do_syscall_64+0x37/0x90 [12710.167320] entry_SYSCALL_64_after_hwframe+0x72/0xdc [ 12710.167958] RIP: 0033:0x7f6c28b15e39 [12710.168578] 代码: . . . . . [. . . . . [12710.173349] [12710.174032] 链接的模块:。 . . . . [12710.180294] --- [结束跟踪 0000000000000000 ]---

不幸的是,当内核版本 6.2.3 在上周末发布时,两个微小的变化很快被证明是 问题,用户在管理磁盘存储时报告内核错误。

内核 6.1.16 显然受到相同的更改,因此容易出现相同的问题。

例如,插入可移动驱动器并安装它工作正常,但在完成使用后卸载驱动器可能会导致 哎呀.

尽管 oops 不会立即冻结整个计算机,但在卸载磁盘存储时内核级代码崩溃已经足够令人担忧,以至于消息灵通的用户可能希望尽快关闭,以防持续出现导致数据损坏的问题……

......但一些用户报告说,哎呀阻止了行话中所说的 有序关机,需要强制循环电源,方法是按住电源按钮几秒钟,或暂时切断服务器的电源。

好消息是内核 6.2.46.1.17 周末立即发布以回滚问题。

鉴于 Linux 内核发布的速度,这些更新已经跟进 6.2.56.1.18,它们本身由(今天,2023-03-13)更新 6.2.66.1.19.

怎么办呢?

如果您使用的是 6.x 版本的 Linux 内核 并且您还没有升级到最新版本,请确保您没有安装 6.2.3 或 6.1.16。

如果您已经拥有这些版本之一 (我们有几天的 6.2.3 并且无法引发驱动程序崩溃,大概是因为我们的内核配置屏蔽了我们无意中触发错误),请考虑尽快更新......

…因为即使到目前为止您还没有遇到任何基于磁盘卷的问题,您也可能幸运地免疫,但是通过再次升级您的内核,您将在设计上免疫。


自行探索 OOPS 和 PANIC 事件

您将需要一个从源代码构建的内核,该内核已安装在您的测试计算机上。

创建一个目录,让我们调用它 /test/oops,并将此源代码另存为 oops.c:

#include <linux/kernel.h> #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/init.h> MODULE_LICENSE("GPL"); static int level = 0;
module_param(level,int,0660); static int oopsinit(void) { printk("oops init (level = %d)n",level); // level: 0->just load; 1->oops; 2->panic switch (level) { case 1: printk("triggering oops via BUG()n"); BUG(); break; case 2: printk("forcing a full-on panic()n"); panic("oops module"); break; } return 0; } static void oopsexit(void) { printk("oops exitn"); } module_init(oopsinit); module_exit(oopsexit);

在同一个目录下创建一个名为 Kbuild 控制构建参数,像这样:

 EXTRA_CFLAGS = -Wall -g obj-m = oops.o

然后构建模块,如下所示。

-C 选项告诉 make 从哪里开始寻找 Makefiles,从而将构建过程指向正确的内核源代码树,并且 M= 设置告诉 make 在这种情况下在哪里可以找到要构建的实际模块代码。

您必须提供完整的绝对路径 M=,所以不要试图通过使用来保存打字 ./ (当前目录在构建过程中四处移动):

/test/oops$ make -C /where/you/built/the/kernel M=/test/oops CC [M] /home/duck/Articles/linuxoops/oops.o MODPOST /home/duck/Articles/linuxoops/ Module.symvers CC [M] /home/duck/Articles/linuxoops/oops.mod.o LD [M] /home/duck/Articles/linuxoops/oops.ko

您可以加载和卸载新的 oops.ko 带有参数的内核模块 level=0 只是为了检查它是否有效。

在看 dmesg 的日志 initexit 致电:

/test/oops# insmod oops.ko level=0 /test/oops# rmmod oops /test/oops# dmesg 。 . . [12690.998373] 哎呀:加载树外模块污染内核。 [12690.999113] oops init (level = 0) [12704.198814] oops exit

挑起一个 哎呀 (可恢复)或 恐慌 (会挂起你的电脑),使用 level=1 or level=2

不要忘记在触发任何一种情况之前保存您的所有工作(之后您需要重新启动),并且未经正式许可不要在其他人的计算机上执行此操作。


时间戳记:

更多来自 裸体安全