从BPF发送数据到用户空间端并等待分析结果

问题描述 投票:0回答:1

我目前正在尝试使用 libbpf + bpf LSM 挂钩编写一个 fanotify 想要的程序。

我在这里想要实现的是拦截LSM事件(例如lsm.s/file_open)并将事件数据发送到用户空间端。 在用户端,我会做一些分析并返回一个结论,该结论将传递回 LSM 模块。

我知道几年前这还不可能,但在最近的补丁中添加了可休眠 bpf 程序,并且它们与 LSM 挂钩一起使用。 但我仍然不知道在分析结果准备好之前是否可以阻止 bpf 端。 那么还有可能吗?

在当前状态下,我只能基本上读取用户ringbuf的一些统计数据,但这并不是我想要实现的目标。我想为用户空间返回结果分配一个结构并在一个循环中检查它是否由 bpf_copy_from_user() 返回的有效响应可以是这样,但我想听听对此的一些想法。 预先感谢!

c++ security linux-kernel ebpf libbpf
1个回答
0
投票

我认为这还不可能。 Sleepable BPF 程序适用于特殊情况,例如助手执行可能会被中断;例如,参见

bpf_copy_from_user_task
助手。可休眠 BPF 程序在等待用户空间输入时不能简单地休眠。

根据您想要对用户空间判决执行的操作,可以从稍后的程序执行中读取它。

© www.soinside.com 2019 - 2024. All rights reserved.