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

tailcall1.c (1103B)


      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, 3);
      9	__uint(key_size, sizeof(__u32));
     10	__uint(value_size, sizeof(__u32));
     11} jmp_table SEC(".maps");
     12
     13#define TAIL_FUNC(x) 				\
     14	SEC("tc")				\
     15	int classifier_##x(struct __sk_buff *skb)	\
     16	{					\
     17		return x;			\
     18	}
     19TAIL_FUNC(0)
     20TAIL_FUNC(1)
     21TAIL_FUNC(2)
     22
     23SEC("tc")
     24int entry(struct __sk_buff *skb)
     25{
     26	/* Multiple locations to make sure we patch
     27	 * all of them.
     28	 */
     29	bpf_tail_call_static(skb, &jmp_table, 0);
     30	bpf_tail_call_static(skb, &jmp_table, 0);
     31	bpf_tail_call_static(skb, &jmp_table, 0);
     32	bpf_tail_call_static(skb, &jmp_table, 0);
     33
     34	bpf_tail_call_static(skb, &jmp_table, 1);
     35	bpf_tail_call_static(skb, &jmp_table, 1);
     36	bpf_tail_call_static(skb, &jmp_table, 1);
     37	bpf_tail_call_static(skb, &jmp_table, 1);
     38
     39	bpf_tail_call_static(skb, &jmp_table, 2);
     40	bpf_tail_call_static(skb, &jmp_table, 2);
     41	bpf_tail_call_static(skb, &jmp_table, 2);
     42	bpf_tail_call_static(skb, &jmp_table, 2);
     43
     44	return 3;
     45}
     46
     47char __license[] SEC("license") = "GPL";