13、eBPF程序验证与类型详解

eBPF程序验证与类型详解

许可证与辅助函数

如果程序采用GPL许可证,那么它也需具备GPL兼容许可证。在示例代码 hello-verifier.bpf.c 的第6章示例中,最后一行定义了一个“license”部分,其值为字符串 Dual BSD/GPL 。若移除这一行,验证器的输出将显示如下错误:

...
37: (85) call bpf_probe_read_kernel#113
cannot call GPL-restricted function from non-GPL compatible 
program

这是因为 bpf_probe_read_kernel() 辅助函数的 gpl_only 字段被设置为 true 。在这个eBPF程序中,虽然之前也调用了其他辅助函数,但它们并非GPL许可的,所以验证器不会对其使用提出异议。BCC项目维护了一个辅助函数列表,标明了它们是否为GPL许可。

内存访问检查

验证器会执行多项检查,以确保BPF程序仅访问其有权限访问的内存。例如,在处理网络数据包时,XDP程序仅允许访问构成该网络数据包的内存位置。大多数XDP程序开头类似如下代码:

SEC("xdp")
int xdp_load_balancer(struct xdp_md *ctx)
{
   void *data = (voi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值