Linux 7.0 发布:一个 bash 脚本,一个周末,23 年的内核漏洞

你有没有想过,你家楼下那家开了二十三年的老面馆,后厨可能一直有个煤气阀门装反了?
每天开火、炒菜、下面,没人觉得哪里不对。直到某天一个来实习的厨师随手拧了拧,才发现整个厨房都在玩火。
Linux 7.0 在 4 月 12 日正式发布。这个版本里藏着一个被打开二十三年的阀门,一个任何人用 bash 脚本就能触发的内核漏洞。
一个 bash 脚本的周末
Nicholas Carlini 是个安全研究员。他写了个 bash 脚本,简单到有点寒酸。循环遍历内核源码文件,扔给 Claude Opus 4.6,然后问它:“假装你在打 CTF,你能搞坏什么?”
脚本跑了好几个月,回回都是噪音。模型指出的"漏洞"要么是误报,要么根本不存在。
某个周五晚上,Carlini 没盯着屏幕。脚本自己跑。
然后它停下来了。
返回的结果让 Carlini 停下手里所有事。Claude 找到了一个洞,藏在 Linux 网络文件共享代码里。这段代码跑在你公司的文件服务器上,跑在医院的存储设备里,也跑在 AWS、GCP、Azure 相当一部分实例中。你孩子学校的网盘后台大概率也用的是同一套代码。
利用这个漏洞,一个第一天上班的实习生,连上办公室的访客 Wi-Fi,跑几行脚本,就能接管整台文件服务器。
接管的意思是能看 HR 的工资表。
Carlini 翻了提交记录。这个洞是 2003 年 3 月挖下的。那时候 git 还没诞生。过去二十年里,每一台基于 Linux 的存储设备都带着这个bug出厂。
后来他在 [un]prompted 安全大会上跟观众说:“我这辈子从没发现过这种东西。这非常、非常、非常难。”
但他的脚本并不聪明。它只是便宜。
一个人,一周算力。经济学上的白菜价。
三周后,Linus Torvalds 给 Linux 7.0 打了标签。发布邮件里他写了一句听起来像耸肩的话:“我猜会有大量 AI 工具继续帮我们找各种边角 case,这至少一段时间内会是新常态。”
2026 年 4 月 12 日,周日。Linux 7.0 发布。这就是它带来的故事,以及把故事写进代码的人。
AI 审补丁成了新常态
Greg Kroah-Hartman 管着稳定版内核,也就是 Linus 的二把手。他还管着内核安全邮箱。多年来他打开邮箱,看到的绝大部分是垃圾。
他管那些叫"AI 垃圾"。生成的报告,没有真漏洞,文件不对,行号不对,什么都不对。他专门建了个文件夹收这些。
二月底的某个早晨,这个文件夹突然不涨了。
取而代之的是真正的报告。行号标得精确,复现步骤真的能复现,根因分析也说得通。三月份他告诉 The Register:“几个月前我们收到的是 AI 垃圾。一个月前发生了某种转变。现在我们收到的是真报告。” 他又说:“我们不知道。似乎没人知道为什么。”
要么是所有前沿模型在同一月里突然都会读 C 代码了,要么是某个临界点被跨过了。
Greg 做了一个维护者该做的事。他写文档。
在 7.0-rc7 之前,他提交了一个更新 security-bugs.rst 的 PR。这份文件告诉安全研究者怎么提交漏洞。更新后的版本是写给语言模型看的。哪个维护者管哪个子系统,合格的报告长什么样,自动化流水线该填哪些字段。
内核的安全收件箱现在两用:人类和 agent 走同一个通道。
另一拨人在盯提交,不是盯 CVE。
Google 的 Roman Gushchin 推出了 Sashiko。名字来自一种日本刺绣技法,用 Rust 写的(这个梗等下你会懂)。Sashiko 阅读 LKML 上的每一个补丁。拿真实开发里的 1000 个补丁做基准测试,它能 catch 住后来被发现 bug 的 53%。
每一个都是人类审阅者漏掉的。
Gushchin 被问到这个数字的时候说:“有人觉得 53% 不算高。但 100% 的这些 issue 都是人类审阅者漏掉的。”
此刻在 LKML 的某个存档里,有一个补丁会在下周二的半夜把你的值班 SRE 叫醒。Sashiko 上个月已经标了它。你永远不会知道是哪一个。
这就是从里面看,新常态长什么样。
Rust 赢了。两边的人都走了。
发布当天,Miguel Ojeda 提交了最后一封 Rust-for-Linux 的 PR,附言只有一句话。
“实验结束了,Rust 会留下来。”
四年前,这句话能让他在邮件列表里被骂到抬不起头。Rust 2022 年底进入 Linux 6.1,作为可选项实验,顶着一堆维护者的反对。有人说它是 fad,有人说是政治项目,骂法各异。六个版本之后,实验标签撕掉了。Rust 在内核里成了对等语言。
各个子系统仍然自己决定接不接受 Rust 代码,内核绝大部分还是 C,但争论结束了。Nova 驱动(NVIDIA 开源替代 nouveau,面向 Turing 架构)在 7.0 里带着 Rust 代码发货。Danilo Krummrich 过去两年构建的 Rust DRM 基础设施也进了主线。
但把 Rust 送进来的人,不在庆祝现场。
Wedson Almeida Filho 领导了微软的 Rust-for-Linux 工作。四年里他跟不想让他代码靠近自己子系统的 C 维护者们吵架。他发了一封辞职信,理由是"非技术性的 nonsense",然后走了。他的联席负责人 Alex Gaynor 在 Rust 获得正式地位的同一周也卸任了。
胜利游行的时候,他们已经不在场。
另一边,Christoph Hellwig 管了二十年 DMA 子系统。这是内核里地基级别的代码,大多数工程师根本不知道谁负责,因为他们永远不需要管。一年前他在公开邮件里把 Rust 混用 C 叫做"癌症"。当维护者们同意让 Rust 驱动通过薄包装层调用 C 的 DMA API 时,Hellwig 辞职了。Marek Szyprowski 接手。
二十年。这是一个人全部的职业生命,而不是其中的某个章节。
最后一场争论无关技术,只关乎一种新语言能不能通过 wrapper 调你的函数。Hellwig 输了,然后选择了离开。
安全 Rust 从结构上消灭了整个类别的 bug。缓冲区溢出、释放后使用、空指针解引用,这些东西在 safe Rust 里写不出来。Carlini 脚本找到的那个 23 年 NFSv4 溢出,按 Rust 的规矩,这种代码根本写不出来。
内核现在包含了一种让这篇文章开头那个 CVE 不可能存在的语言。而为此战斗过的人走了,反对的人也走了,Linux 7.0 照样发货。

AI 写代码的新规矩
发布同时,新规则生效。
任何借助 AI 写的补丁,必须带 Assisted-by: trailer,写明模型和工具。AI agent 不能签 Signed-off-by,因为开发者原创声明是法律声明,只有人类能做。
bug 的问责,归于按发送键的那个人。
这条规则不是大家坐下来心平气和写的。它出现是因为 NVIDIA 工程师 Sasha Levin 往内核 6.15 提交了一个几乎完全由语言模型生成的补丁,连 changelog 都是 AI 写的,而他没告诉任何人。
代码编译过了。初审也过了。但它带了一个性能回归,一路活到稳定版,毁了某个人的一周。
反弹声浪大到 Linus 出面。他向来没耐心开流程会,直接终结争论:喊全面禁止是"没意义的摆姿态"。AI 是工具。问责在人类。把政策发了。
Red Hat 提出了一个更难的问题,目前还没答案。
用 GPL 授权代码训练的语言模型,从结构上就难以保证提交的出处。输出的版权是谁的?Linux 7.0 没解决这个问题。但它也不会自己消失。
Linux 7.0 的硬件遗产:从 XFS 自愈到 SPARC 续命
数据中心里一台 RAID 控制器半夜跑 SCRUB 巡检,在文件系统的记账元数据里翻了一位。0 变成了 1,出现在内核最不想让它出现的地方。
如果你跑 XFS(RHEL、Rocky Linux、AlmaLinux、Oracle Linux 的默认文件系统), historically 你有两种方式发现这件事。要么服务开始抽风,要么你第二天早上看未挂载磁盘上的 xfs_repair 输出。
两种方式都不是好周一。
Darrick J. Wong 在 2026 年 1 月 15 日提交了第 6 版 XFS 自愈补丁集,7.0 里发货了。
以前,一家中等公司的文件服务器周末丢了一个字节的元数据,值班工程师会被 pager 叫醒,开车进机房下线服务器,跑完 xfs_repair 再赶在周一前拉起来。
最好情况:四小时停机。最坏情况:维护窗口没跑完,周一站会以道歉开场。
Linux 7.0 把这趟周末加班取消了。后台跑着一个叫 xfs_healer 的守护进程,发现同样的损坏,在服务器继续服务文件的同时修复它,写进系统日志。用户没感知。pager 不响。周一准时开始。
乘以云。XFS 是 AWS、GCP、Azure RHEL 系列镜像的默认文件系统。地球上大部分企业级 Linux 舰队,刚才安静了一截。
法兰克福某家银行里,一台 SPARC M7 服务器正在结算一笔交易。软件写于 1998 年。跟 Oracle 的合同规定谁也不能动它。
4 月 12 日,这台服务器收到了新内核代码。SPARC(Sun Microsystems,九十年代初的古董)得到了 fork/clone bug 修复、新的 clone3 系统调用支持、API 清理。DEC Alpha(主要活在科学实验室里,模拟代码写于作者上高中的时候)拿到了内存压缩过程中用户空间内存损坏的修复。Motorola 68000 也收到了补丁。
这些人不会写博客夸它。他们会装完内核,然后后颈有点发热。那是一种被看见的感觉。
4 月 7 日,tip 分支接受了 Linux 7.1 移除 Intel i486 支持的 PR。486 发货于 1989 年。x86 32 位代码路径今天仍然广泛使用,扔掉 i486 兼容性后,所有还在跑它的设备都能更快。
SPARC 留着,因为有人在乎到愿意拥有它。486 被移除,因为没人在乎到愿意拥有它。
AMD 最新的服务器芯片 EPYC 9005(云厂商现在正在成千万上架的那代),在 7.0 刷新后的 KVM 路径下跑加密虚拟机更高效了。加密虚拟机是银行和医院愿意多掏钱的功能,这样云厂商自己也没法读他们的数据。现代 EPYC 9005 “Turin” 服务器上的基准测试显示,内存密集型负载下 SEV-SNP 开销降到了个位数到低双位数。

ML-DSA(基于模格的数字签名算法,NIST 批准的后量子标准)以三个安全级别落地:44、65、87。
每次 Linux 机器加载驱动,都会检查加密签名,确认驱动来自授权方。今天的签名能被足够大的量子计算机伪造,而能造这种机器的设备目前还不存在。
问题是,敌对情报机构已经在录制加密签名流量了。等到量子计算机就绪,他们会解密今天录下来的东西。这叫"先存储,后解密"。ML-DSA 今天签名的代码,是为了 2035 年不被破解。
Linux 7.0 给 AI 留了三颗实体按键
输入子系统新增了三个键码,通过 Google 提交的 HID fixes PR 进入 7.0。Google 同时撰写了内核补丁和底层 USB-IF HID 规范(HUTRR119)。
KEY_ACTION_ON_SELECTION(0x254):对高亮内容触发 AI 动作,解释、总结、搜索。
KEY_CONTEXTUAL_INSERT(0x255):打开覆盖层,往当前字段生成或获取文本。
KEY_CONTEXTUAL_QUERY(0x256):提供与选中元素相关的建议。
跟微软的 Copilot 键不同(2024 年加的,把一颗 legacy 功能键硬绑定到某个厂商的助手),这三个是一等 HID 值,明确声明与 agent 无关。笔记本厂商可以映射到物理按键、Fn 组合、触摸板手势, whatever。
键盘,从"输入设备"变成了"调用 agent 的设备"。不是隐喻,是内核代码。

一个 Linux 7.0 发布,四个技术转向
同一份提交历史里,AI 在邮件列表审补丁,catch 率 53%;AI 找到藏了 23 年的内核漏洞;内核还长出了三颗给 AI agent 发消息的实体键盘按键。顺带一提,AI 现在可以以新政策和标签身份成为署名贡献者。
给 AI 建的基础设施,和让 AI 变得更安全的基础设施,同一周到货。
下一个 23 年漏洞
如果一个人、一个 bash 脚本、一个长周末能找到五个内核漏洞,Google 内部团队找到了多少个?你的硬件厂商内部团队找到了多少个?某个国家级对手已经找到、归档、但没告诉任何人的,又有多少个?
Linus 说这叫新常态。OpenSSL。GCC。Python。Postgres。Chromium。你仓库里那个十年没动过的微服务,作者早就不在了。它们都坐在某处,带着一个 112 字节的缓冲区和一次 1056 字节的写入,等着那个还没被写出来的 bash 脚本。
具体的行动建议很实际。跑 NFS 的,CVE-2026-31402 打补丁了吗?跑 XFS 的,自愈守护进程可以先在 staging 试起来。跑 AMD EPYC 9005 的,基准测试跑完再跟业务拍胸脯。这些都不新鲜,新鲜的是背后的紧迫感变了。
真正该问的是:你仓库里那些写于 2010 年前、作者早就不在、但还在跑的东西,如果有人把 Claude Code 对准它,你的计划是什么?
代码审查漏了这个。漏了二十三年。不是审查的人不努力,是工具变了。
常见问题
Linux 7.0 的 NFSv4 漏洞影响我的服务器吗?
如果你跑任何基于 Linux 的 NFS 服务,影响。CVE-2026-31402 的补丁已经发布,不管你是自己编译内核还是用发行版打包的版本,先确认补丁状态。这个漏洞从 2003 年就在代码里,利用门槛低到一台访客 Wi-Fi 上的笔记本就能触发。
Rust 进内核意味着什么?
意味着 Rust 不再是实验品,而是和 C 平起平坐的内核语言。Nova 驱动和 Rust DRM 基础设施已经带着 Rust 代码发货。不过目前只有特定子系统接受 Rust,绝大部分内核代码还是 C。对普通用户来说,短期感知不强,长期意味着更少的内存安全类 bug。
XFS 自愈功能需要手动开启吗?
xfs_healer 在 Linux 7.0 里是后台守护进程,默认行为取决于你的发行版打包策略。RHEL 家族大概率会默认启用,因为它直接关系到他们承诺的 SLA。建议在 staging 环境先验证,再推生产。
Linus 说这叫新常态。你可能还没感觉到,但 Linux 7.0 已经把它写进了内核代码。
