LWN:GNU Tools Cauldron 上的内核开发者们!

关注了就能看到更多这么棒的文章哦~

Kernel developers at Cauldron

By Jonathan Corbet
September 18, 2024
Cauldron
Gemini-1.5-flash translation
https://lwn.net/Articles/990379/

Linux 系统由大量相互依赖的组件组成,所有组件都必须良好地相互支持。因此,令人惊讶的是,似乎这些组件的开发者之间并不经常交流。为了改善这种情况,近年来一直努力吸引工具链开发者参加以内核为主的 Linux Plumbers 大会。不过,今年也出现了相反的情况:2024 年 GNU Tools Cauldron举办了一个讨论会,邀请内核开发者讨论他们的需求。

David Malcolm 开始讨论,询问大家是否有兴趣对内核进行更多静态分析。Steve Rostedt 指出了一些目前用于该目的的工具,并指出 sparse 对检查内核中的指针注释很有用。例如,它可以找到没有谨慎对待用户空间指针或遵循读写更新锁规则的代码。David Faust 说,有一个提案将 sparse 注释整合到 BPF 类型格式 (BTF) 标签中,这可能借助 C2x 属性实现。

Rostedt 建议,这种注释可以帮助找到一个 最近的 BPF 错误。BPF 验证器不知道一些跟踪点可能会在传入空指针值的情况下触发,因此它不需要连接到这些跟踪点的 BPF 程序检查空指针。这意味着一些 BPF 程序能够使内核崩溃,而这本是不应该发生的。一个“可能为空”的注释可以在这种情况下帮助验证器。

Malcolm 指出,GCC 很久以前就支持 nonnull 属性,但它与所需的“可能为空且必须检查”的含义相反。它是一个与优化相关的功能,并不真正适合此目的。随着讨论的进行,Malcolm 说,他创建了 一个用来跟踪的bug,专注于使用 GCC 对内核运行静态分析。

José Marchesi 提到了可以使用来构建内核的 struct 布局随机化 GCC 插件。问题在于,随机化这个动作是在创建调试数据之后发生;如果结构的布局被重新排序,调试信息将不正确。相反,Clang 正确地排序了工作,并且没有这个问题。Segher Boessenkool 断言,该插件是完全不可用的,Sam James 说,插件的情况总体上“一团糟”。显然,有一个正在流传之中的修复程序,它依赖于 GCC 的一个新的插件钩子。但我指出,内核项目希望完全摆脱 GCC 插件,转而支持编译器直接支持必要的功能。修复插件将受到欢迎,但用正确的实现替换它会更好。

关于 struct 布局随机化的价值,进行了一些讨论,有些人将其称为“通过模糊性实现安全性”。不过,Rostedt 为这项技术辩护,认为它是限制漏洞有效性的有用方法。Bradley Kuhn 说,围绕内核使用的一些 GCC 插件存在一些“严重的许可问题”,一些用户从这项工作的一些原始作者那里收到了“攻击性的电子邮件”。他说,最好从头开始重写这些功能,并将它们内置到编译器中。

还提到,布局重新排序也可以用于优化结构,消除内部空洞。Boessenkool 指出,这会违反标准,标准要求结构的地址等于其第一个元素的地址。不过,这似乎是某些用户愿意为一个有用的(且可选的)功能付出的代价。这部分讨论的结论是,在 GCC 中拥有 struct 布局重新排序将很有用,但没有人说他们会着手实际实现它。

接下来是内核中用户空间堆栈的展开,可能通过使用 SFrame 数据来实现。Rostedt 说,人们有兴趣可能将内核从目前内核使用的 ORC 格式迁移到 SFrame。用户空间展开对于生成包含用户端和内核端信息的配置文件很有用。它将通过在内核中设置一个任务标志来实现,该标志表示需要用户空间堆栈跟踪;这个堆栈数据将在从内核返回到用户空间之前生成。

不过,创建该跟踪需要从内核内部访问用户空间 SFrame 数据。反过来,这可能需要添加一个系统调用,以便用户空间提供这些数据。使事情变得复杂的是,SFrame 的情况可能会随着时间的推移而迅速变化,尤其是在运行即时编译器的进程中。因此,SFrame 数据可能存储在内核和用户空间共享的内存区域中,从而避免每次发生变化时都进行系统调用。

最后讨论的主题是希望从编译器获取有关不返回值或包含跳转表的函数的提示。正如 Josh Poimboeuf 解释的那样,此信息对于使内核的 objtool 实用程序在 64 位 Arm 系统上正常工作是必需的;反过来,这对于支持实时修补是必需的。Indu Bhagat 说,此信息对于某些控制流完整性应用程序也很有用。讨论之后进行了一段时间但是毫无结果,没有找到明确的解决方案。

这次会议没有讨论一开始列出的所有潜在主题的一半。不过,它确实表明,让不同组的开发者相互讨论他们的需求和愿望是有价值的。讨论将在维也纳举行的 Linux Plumbers 大会上继续进行,并且预计在未来的活动中也会继续进行。

[ 感谢 Linux 基金会,LWN 的旅行赞助商,支持我们前往此次活动。]

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

1780ad8401808f2b39a60bf74a19b386.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值