cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

tailcall2.c (1054B)


      1// SPDX-License-Identifier: GPL-2.0
      2#include <linux/bpf.h>
      3
      4#include <bpf/bpf_helpers.h>
      5
      6struct {
      7	__uint(type, BPF_MAP_TYPE_PROG_ARRAY);
      8	__uint(max_entries, 5);
      9	__uint(key_size, sizeof(__u32));
     10	__uint(value_size, sizeof(__u32));
     11} jmp_table SEC(".maps");
     12
     13SEC("tc")
     14int classifier_0(struct __sk_buff *skb)
     15{
     16	bpf_tail_call_static(skb, &jmp_table, 1);
     17	return 0;
     18}
     19
     20SEC("tc")
     21int classifier_1(struct __sk_buff *skb)
     22{
     23	bpf_tail_call_static(skb, &jmp_table, 2);
     24	return 1;
     25}
     26
     27SEC("tc")
     28int classifier_2(struct __sk_buff *skb)
     29{
     30	return 2;
     31}
     32
     33SEC("tc")
     34int classifier_3(struct __sk_buff *skb)
     35{
     36	bpf_tail_call_static(skb, &jmp_table, 4);
     37	return 3;
     38}
     39
     40SEC("tc")
     41int classifier_4(struct __sk_buff *skb)
     42{
     43	bpf_tail_call_static(skb, &jmp_table, 3);
     44	return 4;
     45}
     46
     47SEC("tc")
     48int entry(struct __sk_buff *skb)
     49{
     50	bpf_tail_call_static(skb, &jmp_table, 0);
     51	/* Check multi-prog update. */
     52	bpf_tail_call_static(skb, &jmp_table, 2);
     53	/* Check tail call limit. */
     54	bpf_tail_call_static(skb, &jmp_table, 3);
     55	return 3;
     56}
     57
     58char __license[] SEC("license") = "GPL";