You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义eBPF kfunc调用失败:内核函数不允许调用问题排查及解决

eBPF调用自定义kfunc触发内核验证器报错:'calling kernel function %s is not allowed'

问题背景

  • 环境:Ubuntu 24.04.1 LTS,内核版本6.8.0-48-generic
  • 操作:为论文编写eBPF代码,需调用自定义kfunc,已按eunomia教程和内核文档实现LKM,模块加载时dmesg无报错,但运行时内核验证器抛出calling kernel function %s is not allowed错误
  • 验证:尝试官方示例也出现相同问题

原因分析

通过查看内核验证器源码定位到:

  • 验证器无法获取kfunc的元数据,进而无法检索kfunc的权限标志
  • 根本原因是程序类型不兼容:使用SEC("tracepoint/syscalls/*")声明的程序属于BPF_PROG_TYPE_TRACEPOINT类型,而kfunc仅支持BPF_PROG_TYPE_TRACING等特定类型的eBPF程序

解决方案

将eBPF程序的挂载类型从tracepoint切换为kprobes(使用SEC("kprobe/[目标函数名]")声明程序),即可解决验证器报错问题。

内容的提问来源于stack exchange,提问作者hellothere

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 09:03:09