栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

XDP程序ip链接错误:Prog部分被拒绝:不允许操作

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

XDP程序ip链接错误:Prog部分被拒绝:不允许操作

eBPF:不允许操作

使用eBPF时,有几种可能的原因导致权限错误(

-EPERM
由返回
bpf()
,您可以通过观察到
strace -e bpf<command>
)。但是没有那么多。通常,它们属于以下项目之一:

  • 用户没有所需的功能

    CAP_SYS_ADMIN
    ,,
    CAP_NET_ADMIN
    …,通常取决于所使用程序的类型)。通常可以通过 运行
    root
    具有所有必要功能的来解决。在您的情况下,您可以使用
    sudo
    ,因此可以满足要求。

  • 创建BPF对象(新映射或加载程序)将 超出用户可以在内核中锁定的内存量的限制 。这通常可以

    root
    通过
    ulimit -l<something_big>
    在终端或
    setrlimit()
    C程序中
    使用来解决。在您的情况下,您的程序非常小,并且您没有提到在系统上加载了很多BPF对象。

  • 还有更多的可能性,例如 尝试在“冻结”或只读 等的 地图上进行写操作 ,或 尝试对非

    root
    用户使用函数调用。这些通常用于更高级的用例,不应被像您这样简单的程序所破坏。

锁定,安全启动,EFI和(不幸的)反向端口的
bpf()
限制

但是,您似乎遇到的问题可能与其他原因有关。“锁定”是一个安全模块,已合并到Linux
5.5内核中。它旨在防止用户修改正在运行的Linux映像。事实证明,有几个发行版决定将Lockdown移植到他们的内核中,有时他们选择了在最终版本合并到主线Linux之前的补丁。

例如,Ubuntu和Fedora有许多自定义补丁程序可以向后移植,以适应Disco / 19.04和Eoan /
19.10(后者为5.3,我不记得Disco的内核)中使用的内核。它包含一个修补程序,当锁定功能被激活时,该修补程序将完全禁用

bpf()
系统调用,这意味着无法创建地图或加载BPF程序。另外,它们在激活安全启动时默认情况下启用了锁定,我认为这是使用EFI引导的计算机的默认设置。

另请参见此博客文章:检查锁定是否影响您的BPF使用的一种好方法是尝试加载最少的程序,或者运行

dmesg |grep Lockdown
以查看是否显示类似以下内容:

Lockdown: systemd: BPF is restricted; see man kernel_lockdown.7

因此 ,例如 对于 Ubuntu 19.04和19.10, 必须 禁用Lockdown才能与eBPF一起使用
。可以通过

SysRq
按键+
x
的物理笔划来完成此操作(我尚未测试),但不能通过写操作来完成
/proc/sysrq-trigger
。另外,您可以禁用安全启动(在BIOS中或通过
mokutil
,在Internet上搜索相关选项,并且不要忘记检查安全隐患)。

需要注意的是Linux内核5.4或最新的有主线限制的

bpf()
,不取消的系统调用,所以焦/
20.04和最新不会受到影响。 因此,升级到新内核可能是另一个解决方法
。我几天前提交了一份票证,要求将此更改回移植(而不是停用
bpf()
),并且该工作正在进行中,因此,到新读者看到答案时,锁定对eBPF的影响可能会得到缓解(编辑:应该已在内核5.3.0-43的Ubuntu19.10上修复)。不确定其他发行版如何处理此问题。但是,它对于使用eBPF进行跟踪仍然具有重要意义。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/405786.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号