Linux 内核社区最近重启一项技术讨论:将 x86_64 架构的可重定位内核链接为 PIE(位置无关可执行文件)代码。
1. 核心提案
知名内核开发者 Ard Biesheuvel 发布了一套包含 19 个补丁的系列,建议将 x86_64 架构的内核从传统的链接方式切换为 PIE 链接。
2. 主要目的
* 安全性增强: 这是内核进一步加固的前提,特别是为了支持更先进的 FG-KASLR(细粒度内核地址空间布局随机化)。
* 架构一致性: 帮助不同 CPU 架构之间的启动协议实现进一步的标准化和统一。
* 更高效的重定位: 如果编译器支持 RELR 重定位打包,使用 PIE 链接生成的二进制文件在启动时的重定位处理会更高效,占用的空间也比传统的 RELA 重定位小得多。
3. 解决的历史争议
这个想法其实在一年前就提出来过,但当时被否决了,主要担心点有三个:
* a) 机制冗余: 认为在完全链接的二进制文件中使用 GOT(全局偏移表)很愚蠢。
* b) 膨胀问题: 担心会导致代码体积大幅增加。
* c) 性能损耗: 担心对运行性能有负面影响。
4. 此次更新的数据支持
为了回应质疑,Ard 提供了新的测试数据:
* 代码体积: 增加非常微小,Clang 编译仅增加 0.2%,GCC 编译增加 0.5%。
* 性能表现: 在多个微架构上使用 hackbench 测试,未发现明显的性能衰退。
* 兼容性: 这一变化主要针对开启了 KASLR 的内核。如果关闭 CONFIG_RANDOMIZE_BASE,系统仍会回退到现状。
结论
目前这一提案处于 RFC(征求意见)阶段。如果讨论顺利,这项技术有望在 2026 年 左右正式进入 Linux 内核主线。
简单来说: 这是一项为了让 Linux 内核更安全(防黑客攻击)、启动更高效的技术改进,且目前的测试证明它几乎不会带来性能损失或空间负担。