Comment 2 for bug 1896504

Revision history for this message
Nicolas Dichtel (nicolas-dichtel) wrote :

Here is an example:

root@ubuntu1804hwe:~# uname -a
Linux ubuntu1804hwe 5.4.0-47-generic #51~18.04.1-Ubuntu SMP Sat Sep 5 14:35:50 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
root@ubuntu1804hwe:~# cat test.c
#include <linux/pkt_cls.h>
#include <linux/bpf.h>

#ifndef __section
# define __section(NAME) __attribute__((section(NAME), used))
#endif

static int (*bpf_skb_change_head)(void *ctx, int headroom, int flags) =
        (void *) BPF_FUNC_skb_change_head;

__section("test")
int _test(struct __sk_buff *skb)
{
        bpf_skb_change_head(skb, 14, 0);
        return TC_ACT_OK;
}

char _license[] __section("license") = "GPL";
root@ubuntu1804hwe:~# clang -target bpf -I/usr/include/x86_64-linux-gnu/ -O2 -o test.o -c test.c
root@ubuntu1804hwe:~# ip link add name dummy1 type dummy
root@ubuntu1804hwe:~# ip link set dummy1 up
root@ubuntu1804hwe:~# tc qdisc add dev dummy1 clsact
root@ubuntu1804hwe:~# tc filter add dev dummy1 egress matchall action bpf obj ./test.o sec test

Prog section 'test' rejected: Invalid argument (22)!
 - Type: 4
 - Instructions: 5 (0 over limit)
 - License: GPL

Verifier analysis:

0: (b7) r2 = 14
1: (b7) r3 = 0
2: (85) call bpf_skb_change_head#43
unknown func bpf_skb_change_head#43
processed 3 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0

Error fetching program/map!
bad action parsing
parse_action: bad value (5:bpf)!
Illegal "action"
root@ubuntu1804hwe:~#