gpt4 book ai didi

linux-kernel - bpf_xdp_adjust_meta() 返回错误代码 -13(权限被拒绝)

转载 作者:行者123 更新时间:2023-12-04 07:16:56 28 4
gpt4 key购买 nike

问题:bpf_xdp_adjust_meta(ctx, -delta);当 delta > 32 时返回错误代码 -13(权限被拒绝)。
但是BPF and XDP Reference Guide指出元数据有 256 字节的空间。
那么我是不是误会了什么,或者我如何将 256 字节用于元数据?
程序:

int xdp_prog_simple(struct xdp_md *ctx)
{
bpf_printk("---BPF DEBUG--- adjust_meta: %d\n", bpf_xdp_adjust_meta(ctx, -36));
return XDP_PASS;
}
设置:
内核: uname -rv 5.8.0-63-generic #71-Ubuntu SMP Tue Jul 13 15:59:12 UTC 2021 设备:
来自 xdp-tutorial/testenv 的 veth ,因为我的硬件驱动程序不支持原生 xdp 模式。
加载:
  • ip link set dev test xdp obj xdp_pass_kern.o sec xdp并检查程序是否以 xdp native 模式附加。
  • bpf_set_link_xdp_fd()来自用户空间程序

  • 我也尝试使用 不同的编译环境 (使用它们的默认值 Makefile ):
  • linux/samples/bpf
  • xdp-tutorial/basic01

  • 背景:
    我正在尝试通过 xdp_md->data_meta 传递数据字段使尾调用的 eBPF 程序可以访问数据。为了调整 data_meta 指针,我调用了 eBPF 辅助函数 bpf_xdp_adjust_meta(ctx, -delta);其中 delta 是保存元数据的结构的大小。
    只要 delta <= 32,这就可以正常工作。如果它更大,则辅助函数返回 -13(权限被拒绝)。这就是为什么我猜测元数据的余量在我的情况下是 32 字节,而不是 BPF and XDP Reference Guide 中所述的 256 字节。 .

    最佳答案

    元数据的最大房间空间 只有 32 个字节 ,所以你观察到的都是预期的。
    您可以通过阅读 the relevant kernel code 来检查这一点。 , 或 the logs for the commit that introduced the feature .
    您引用的文档是指您可以使用 bpf_xdp_adjust_head() 修改的封装 header 的空间大小。 ,而不是元数据的大小。诚然,文本中并不清楚(但欢迎 PR!)。

    关于linux-kernel - bpf_xdp_adjust_meta() 返回错误代码 -13(权限被拒绝),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68705117/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com