跳到主要内容

每周一龙:第 38 期

· 阅读需 10 分钟
WANG Xuerui
🐲龙门客栈打杂的

每周一都为大家报道 LoongArch 社区最前线的第一手新鲜资讯! 上周的进展主要有 Linux、工具链和发行版。 详情点进来看!

如无特别说明,文中提及的日期、时间都为北京时间(UTC+8)。

本期周报的实际发稿时间是周二晚间,因为周一都在忙别的。

先「马」再看

本栏目的内容具有一定延续性,将持续追踪报道 LoongArch 领域的重要或长期项目(坑)。

Linux

在移植、测试 Chromium 的过程中,社区同学们发现了 Chromium seccomp 沙箱机制对 statx 系统调用的处理方式存疑。xen0n 重新发起了讨论: 本次的问题本质上与数年前就已为社区所深知的 seccomp 深参数审查(deep argument inspection)问题相同。 截至周一晚间,已经累积了相当多的讨论内容,其深度、复杂度甚至不日即可撑起一篇专栏文章; 我们将在尘埃落定之后为您追踪报道。

来自统信的 Wang Yuli 意图清理 LoongArch CRC32 加速代码中的两条 64 位模式用不着的语句。xen0n 建议 可以不用删掉:换成 #ifdef 的话,万一未来增加 LoongArch32 支持,不用再改一次代码。

近日,Linux 项目成为了自己的 CVE 编号权威机构(CVE numbering authority, CNA)。 这意味着 Linux 可以自己给自己的安全漏洞分配 CVE 编号了。 于是乎,先前 LoongArch 的 BPF 实现中被发现并修补的一处内存越界访问, 便成为了新时期的首个 Linux/LoongArch CVE:CVE-2024-26588。 我们摘录并翻译此漏洞的影响范围如下:

  • 从 6.1 起,被提交 bbfddb904df6f82 引入,在 6.1.75 为提交 4631c2dd69d9 所修复
  • 从 6.1 起,被提交 bbfddb904df6f82 引入,在 6.6.14 为提交 9aeb09f4d85a 所修复
  • 从 6.1 起,被提交 bbfddb904df6f82 引入,在 6.7.2 为提交 7924ade13a49 所修复
  • 从 6.1 起,被提交 bbfddb904df6f82 引入,在 6.8-rc1 为提交 36a87385e31c 所修复

请使用上游内核的 LoongArch 用户、开发者注意。(xen0n 为您检查了 Loongnix 的 Linux 4.19.190.8.14 代码,不存在该问题。但不确定其他旧世界系统或「产品内核」是否受影响。) 感谢 xry111 提供新闻线索!

请受中国法律管辖的读者注意

这是友情提醒:如果您或您的组织在中国大陆法域内提供、运营网络服务或从事信息安全工作, 那么您应该已经对国家信息安全漏洞共享平台(CNVD) 与《网络产品安全漏洞管理规定》有所了解。 简单来说,您在中国处理安全漏洞时,如果您是「网络产品提供者」,您需要在 2 日内上报 CNVD 等国内漏洞共享平台; 如果您是信息安全工作者,对漏洞细节等信息的发布也受到一些具体限制。 违反《规定》导致危害网络安全等后果的,还将触发《网络安全法》罚则

由于 LoongArch 尚处于新旧世界交替的过渡期,本例漏洞所影响的内核版本可认为实际没有部署: 实际承载业务的 LoongArch 装机量仍以旧世界为主,而新世界用户群体的「追新」则相当激进,且新世界用户以开发者为主,不承载重点业务。 因此即便本例漏洞未被首先上报 CNVD(笔者未查证),事后看来,也没有对任何法益造成实质减损,因而不至触发《规定》乃至《网络安全法》的罚则。

即使如此,笔者认为仍有必要给读者朋友们提个醒:假如之后再给 Linux 等开源软件「捉虫」,觉得像是有安全影响的话,请认真评估下!

工具链

binutils

Fan Peng(编者注:姓在前)移除了链接可执行文件时一处多余的未解析符号检测。 看补丁的说明文字,似乎是修复了某些软件链接失败的问题。

mengqinggang 修复了三种重定位类型的定义错误。

GCC

为防止先前的 GCC 12.x/13.x 版本与 Binutils 2.42 搭配时生成错误代码, 不得不将 relaxation 支持往回移植到 GCC 12.4 与 GCC 13.3。

对 GCC 12 而言,唯一可感知的明显变化是新增了 -mrelax-mno-relax 支持; 当 -mpass-relax-to-as 生效时,它们将被透传至汇编器。-mpass-relax-to-as 的默认取值取决于 GCC 构建时搭配的汇编器是否支持 -mrelax。GCC 本身的行为则不受这些开关影响。

对 GCC 13 而言,情况也类似:如果在 GCC 构建时检测到汇编器支持 -mrelax, 并且在当次具体的 GCC 调用时也生效了 -mrelax,那么将默认开启 -mno-explicit-relocs。 后一条要件是 Xi Ruoyao 为了保持与 Binutils 2.41 搭配时的行为不变而特意做的兼容

Xi Ruoyao去除了 CRC intrinsic 被翻译为指令后多余的符号扩展操作。 由于 CRC 操作几乎总是出现在热点循环中,此优化势必提升性能。

感谢 Xi Ruoyao 自己制造并提供本节的新闻线索!

LLVM

xen0n 在研究 Telegram Desktop 为何会在 Scudo 的 free 函数中无限递归的过程中, 顺便发现 Scudo 没有用上 LoongArch 的专门 CRC 计算指令, 遂顺手做掉了

heiher 改进了 LoongArch 代码生成后端对「长得像加法」操作的判断方式,从而能够避免生成少量不必要的指令。

heiher 还把 LoongArch 的 addrspacecast标记为了空操作。 这修复了在 Alpine Linux 上旧版本 Rust(1.72.0)构建失败的问题。 值得注意的是:此 issue 中提到的两个软件 Alpine Linux 和 Rust 1.72.0 实际上都没有 LoongArch 支持——后者更是一个已发布版本,我们无法坐时光机为其添加支持。 考虑到 musl 的 LoongArch 支持刚刚进入主线,而 musl 是 Alpine Linux 的 libc, 因此这应该代表着 Alpine Linux 的适配工作在龙芯内部得以继续开展了。

杂闻播报

龙芯中科发布了基于龙架构讲授的计算机核心课程 MOOC(慕课)资源。

时过境迁,Debian loong64 移植的完成度于 2 月 22 日前后再次超过 90%,预计之后不容易跌破了。 (先前虽然也达到过 90% 甚至更高,但当时许多基础包是手工上传的,因此每当这些基础包版本更新,完成度就会跌。 目前此情况已得到相当缓解。) 感谢 RevySR 提供以上两条新闻线索!

Debian Ports 架构完成度折线图

安同开源社区(AOSC)贡献者白铭骢 给 KDE 桌面硬件抽象组件 Solid 增加了 LoongArch /proc/cpuinfo 的解析支持,以便在 KInfoCenter 正确显示龙架构处理器的型号。 感谢 自己制造并提供新闻线索!

2 月 16 日,musl libc 上游合并了龙架构移植。 待 musl 新版本正式发布后,Rust musl target、Gentoo musl profile、Alpine Linux 等等大量工作都将可以开展了。 感谢 heiher 提供新闻线索!

Xi Ruoyaoelf.h 增加了编号从 110 到 126 的新 LoongArch 重定位类型定义。 之后对 elfutils 也做了类似的事情。

Xi Ruoyao 还给 XZ 项目增加了 LoongArch CRC32 优化。 感谢 自己制造并提供以上两条新闻线索!

张贴栏

本栏目可供张贴公益性质的各种信息。