0/2 已展开

LLM 分析

Linux 6.18.39 stable 发布:跨子系统累积修复与 AF_ALG zero-copy 文档清理

系列概况

  • 标题: Linux 6.18.39
  • 作者: Greg Kroah-Hartman (Greg KH)
  • 版本: 6.18.39 stable release(非 patch series,而是 stable 分支的例行维护发布;patch.version/index/total 均为 null,series_title 为 "Linux 6.18.39")
  • 规模: 跨多子系统的累积发布;邮件正文只展示了部分 diffstat 摘要
  • 修改文件: 邮件可见的部分包括 Documentation/crypto/userspace-if.rstDocumentation/process/deprecated.rstMAINTAINERSMakefilearch/arm64/{kernel/entry-fpsimd.S,kvm/hyp/nvhe/hyp-main.c,kvm/nested.c,lib/insn.c,net/bpf_jit_comp.c}arch/loongarch/{include/asm/acpi.h,kernel/acpi.c,kernel/setup.c,kvm/intc/{eiointc,ipi,pch_pic}.c,net/bpf_jit.c,pci/acpi.c}arch/powerpc/net/bpf_jit_comp.carch/riscv/{include/asm/pgtable.h,kernel/entry.S,net/bpf_jit_comp64.c,net/bpf_jit_core.c}arch/s390/{Kconfig,include/asm/asm-extable.h,include/asm/word-at-a-time.h,mm/extable.c}arch/x86/{events/intel/uncore_snb.c,include/asm/nospec-branch.h,kernel/cpu/bugs.c,kernel/cpu/resctrl/monitor.c,kvm/{lapic.c,lapic.h,svm/avic.c}}
  • 代码统计: 邮件仅给出行数摘要,如 userspace-if.rst | 31deprecated.rst | 7MAINTAINERS | 1Makefile | 5entry-fpsimd.S | 8hyp-main.c | 3kvm/nested.c | 40loongarch/kernel/acpi.c | 28s390/word-at-a-time.h | 22s390/mm/extable.c | 18x86/cpu/bugs.c | 50 -x86/kvm/lapic.c | 49x86/kvm/svm/avic.c | 47;邮件在 arc 处被截断,完整统计未给出
  • Message-ID: 2026071811-onto-impound-c1fd@gregkh(mail #1);跟帖 2026071811-unsecured-cornflake-bc9c@gregkh(mail #2)
  • 完整性: 2 封邮件;首封为发布公告(diffstat 在 arc 处被截断),次封为同主题回复,展示 Documentation/crypto/userspace-if.rst 的示例 hunk(hunk 在 "splice() and sendfile() system" 处被截断)

补丁目的

本帖既不是单一 bug 的修复讨论,也不是某个新特性的 RFC,而是 stable 分支维护者 Greg KH 发布的 6.18.39 例行稳定版本。目标有三点:

  1. 把若干上游 mainline 修复 cherry-pick 进 linux-6.18.y stable 分支
  2. 公告原文 "All users of the 6.18 kernel series must upgrade",要求所有 6.18 系列用户升级
  3. 公示本次发布涉及的子系统范围,方便下游使用者自检是否受相关修复影响

跟帖中具体展示的例子是 AF_ALG zero-copy 接口的文档清理:由于 splice/vmsplice zero-copy 路径历史上反复成为漏洞来源,文档中对应章节被改写以反映接口已退役。

旧流程的问题

mail #2 给出的 hunk 显示 Documentation/crypto/userspace-if.rst 旧版详细介绍了 AF_ALG 的 zero-copy 用法,包含:

  • 强调用 vmsplice(..., SPLICE_F_GIFT) + splice() 实现零拷贝,避免数据拷贝进内核
  • 约束:数据需 page 对齐(不强制但更高效)、每次系统调用最多 16 页
  • 给出一段 libkcapi 风格的完整示例:
int pipes[2];
pipe(pipes);
/* input data in iov */
vmsplice(pipes[1], iov, iovlen, SPLICE_F_GIFT);
/* opfd is the file descriptor returned from accept() system call */
splice(pipes[0], NULL, opfd, NULL, ret, 0);
read(opfd, out, outlen);

这条 zero-copy 路径在历史上多次成为漏洞源头(CVE 多发),从安全角度不再适合作为公开推荐用法;同时 kernel 实现侧早已移除该接口,文档若不更新会持续误导用户态程序继续依赖已退役的路径。

新流程

新文档删除了上述零拷贝示例段,替换为简短说明:

  • "AF_ALG used to have zero-copy support, but it was removed due to it being a frequent source of vulnerabilities."
  • "For backwards compatibility the splice() and sendfile() system …"(邮件在 hunk 中被截断,未给出完整文本)

也就是说:kernel 实现层早已移除 zero-copy,文档现在只是顺手把误导性示例撤掉,并保留 splice() / sendfile() 的向后兼容性提示,避免继续诱导用户态程序去用已退役接口。

                  +---------------------------+
                  |  upstream mainline (6.18+) |
                  +-------------+-------------+
                                |
        cherry-pick stable-worthy fixes
                                |
                                v
                  +---------------------------+
                  |  linux-6.18.y branch      |
                  |  tag: v6.18.39            |
                  +-------------+-------------+
                                |
                  Greg KH posts announce mail
                                |
                                v
   +---------------------------+   +-----------------------------+
   | mail #1: release note     |   | mail #2: example hunk reply |
   |  - "all users must upgrade"|   |  - userspace-if.rst hunk    |
   |  - diffstat (truncated)   |   |    drop zero-copy recipe    |
   +-------------+-------------+   |    keep splice/sendfile note|
                 |                 +--------------+--------------+
                 v                                |
   +---------------------------+                  v
   | users MUST upgrade to     |    Documentation/crypto/userspace-if.rst
   | 6.18.39                   |    =========================
   +---------------------------+    BEFORE: zero-copy recipe + libkcapi sample
                                    AFTER : "removed due to frequent vulns"

Patch 概览

本次发布不是单 patch,而是 stable 分支的一次批量 cherry-pick。邮件正文在 diffstat 中列出的修改面大致可分为:

  • 文档 / 元数据: Documentation/crypto/userspace-if.rstDocumentation/process/deprecated.rstMAINTAINERSMakefile
  • arm64: entry-fpsimd.Skvm/nested.ckvm/hyp/nvhe/hyp-main.clib/insn.cbpf_jit_comp.c
  • loongarch: ACPI 与 KVM intc(eiointc.cipi.cpch_pic.c)、bpf_jit.cpci/acpi.csetup.c
  • powerpc: bpf_jit_comp.c
  • riscv: pgtable.hentry.Sbpf_jit_comp64.cbpf_jit_core.c
  • s390: Kconfigasm-extable.hword-at-a-time.hmm/extable.c
  • x86: uncore_snb.cnospec-branch.hcpu/bugs.cresctrl/monitor.ckvm/lapic.{c,h}kvm/svm/avic.c
  • crypto 文档: Documentation/crypto/userspace-if.rst(mail #2 中展示了 hunk)

由于邮件不含每个文件的实际 hunk,逐 patch 实现细节需查阅 linux-6.18.y 分支 v6.18.39 tag 的完整 changelog。

关键实现

由于本帖正文仅展示文件名 + 行数摘要(mail #1)和单个文档 hunk(mail #2),邮件层面无法逐项展开功能性改动。可观察到的明确改动只有 mail #2 的文档 hunk:删除旧 AF_ALG zero-copy 示例段,新增简短说明。其它子系统的具体修复需要从 linux-6.18.y tag 的 log 拉取后再分析。

类比

可以把 6.18.39 想象成 某款在售车型的季度 OTA 召回公告 + 小修包

  • mainline = 厂家下一代新车的研发线
  • stable (6.18.y) = 已经卖出去的车队
  • 6.18.39 = 4S 店发布的例行检修 + 安全补丁包,明确要求所有车主回店升级
  • AF_ALG zero-copy 文档清理 = 顺手把"车主手册"里关于某个曾经很炫但已被禁用的选装功能(零拷贝接口)那一页撕掉,换成"该功能已停用"的小字说明,避免继续误导老车主往那个方向折腾

Highlight:风险与注意点

  1. 本帖并非 scheduler 讨论:来源频道虽标记 sched,但邮件正文是跨子系统的 stable release,与 CPU scheduler(runqueue、sched_class、fair/rt/deadline)无直接关联
  2. 必须升级:公告原文 "All users of the 6.18 kernel series must upgrade",6.18 系列用户应尽快合入或安装 6.18.39
  3. AF_ALG 用户态兼容性:若用户态仍有代码用 vmsplice(SPLICE_F_GIFT) + splice() 走 AF_ALG zero-copy 路径,需要确认内核侧已禁用并相应调整实现
  4. 追改动需看 git:邮件正文只列 diffstat,不含具体 hunk;要逐项审计请到 linux-6.18.y 分支查看 v6.18.39 tag 的完整 changelog
  5. 邮件正文被截断:mail #1 的 diffstat 在 arc 处结束(应为 arch/...),mail #2 的 hunk 在 "splice() and sendfile() system" 处结束,信息不完整

一句话总结

Greg KH 发布 Linux 6.18.39 stable 例行维护版本,跨多架构与多子系统修复了一批问题,并在 Documentation/crypto/userspace-if.rst 中正式撤销 AF_ALG 的 zero-copy 用法说明(因反复出现的安全漏洞),要求所有 6.18 系列用户升级。