皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

BPF 与 Linux 6.18 支持 签名程序和延迟任务执行

BPF 与 Linux 6.18 支持 签名程序和延迟任务执行

本周,一些令人兴奋的功能更新已排队进入 BPF 子系统的 “bpf-next” Git 分支,以迎接 Linux 6.18 的合并窗口。

首先,已合并到 bpf-next 的是对签名 BPF 程序的初始支持。签名 BPF 程序有助于确保 BPF 程序来自可信来源,以保障系统完整性。BPF 程序签名也是允许无特权用户加载经过审核的 BPF 程序过程中的一个环节。

那个合并解释了:

BPF 签名已在多个会议中与内核和 BPF 社区进行了多次讨论,以下补丁系列是当前讨论和签名 BPF 程序的总结。一旦实现签名,下一个重点将是为所有 BPF 用例(动态生成的 bpf 程序、简单的非 CO-RE程序) 

签名还为允许非特权用户加载经过审核的 BPF 程序铺平了道路,并有助于遵守最小权限原则
通过避免不必要的权限提升至 CAP_BPF 和 CAP_SYS_ADMIN(当然,在适当的安全策略激活的情况下)来获得权限。

在 Linux 6.18 发布前,BPF 树本周另一个值得注意的合并是支持延迟任务上下文执行。来自 Meta/Facebook 的贡献被描述为:

“此补丁为 BPF 程序引入了一种新机制,使用内核的任务工作基础设施在特定任务的上下文中调度延迟执行。

新的 bpf_task_work 接口使 BPF 能够使用需要任务上下文中的可睡眠子程序执行用例,例如,从不允许可睡眠的上下文中调度可睡眠函数,如 NMI。”

引入了 kfuncs bpf_task_work_schedule_signal()和 bpf_task_work_schedule_resume(),用于根据 task_work 使用的不同模式(TWA_SIGNAL 或 TWA_RESUME)调度 BPF 回调。

该实现通过元数据对象(struct bpf_task_work_context)管理调度状态。bpf_task_work_context 的指针存储在 BPF 映射值中。状态转换通过原子状态机(bpf_task_work_state)处理,以确保并发使用和删除时的正确性。生命周期由 refcounting 和 RCU Tasks Trace 保护。Kfuncs 通过 irq_work 间接调用 task_work_add(),以避免在潜在的 NMI 上下文中锁定。

如果没有任何最后时刻的问题,这些新的 BPF 特性应该会在即将到来的 Linux 6.18 合并窗口期间被合并。

转自 BPF With Linux 6.18 To Support Signed Programs & Deferred Task Execution – Phoronix