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

test_global_func_args.c (1213B)


      1// SPDX-License-Identifier: GPL-2.0
      2
      3#include <linux/bpf.h>
      4
      5#include <bpf/bpf_helpers.h>
      6
      7struct S {
      8	int v;
      9};
     10
     11struct S global_variable = {};
     12
     13struct {
     14	__uint(type, BPF_MAP_TYPE_ARRAY);
     15	__uint(max_entries, 7);
     16	__type(key, __u32);
     17	__type(value, int);
     18} values SEC(".maps");
     19
     20static void save_value(__u32 index, int value)
     21{
     22	bpf_map_update_elem(&values, &index, &value, 0);
     23}
     24
     25__noinline int foo(__u32 index, struct S *s)
     26{
     27	if (s) {
     28		save_value(index, s->v);
     29		return ++s->v;
     30	}
     31
     32	save_value(index, 0);
     33
     34	return 1;
     35}
     36
     37__noinline int bar(__u32 index, volatile struct S *s)
     38{
     39	if (s) {
     40		save_value(index, s->v);
     41		return ++s->v;
     42	}
     43
     44	save_value(index, 0);
     45
     46	return 1;
     47}
     48
     49__noinline int baz(struct S **s)
     50{
     51	if (s)
     52		*s = 0;
     53
     54	return 0;
     55}
     56
     57SEC("cgroup_skb/ingress")
     58int test_cls(struct __sk_buff *skb)
     59{
     60	__u32 index = 0;
     61
     62	{
     63		const int v = foo(index++, 0);
     64
     65		save_value(index++, v);
     66	}
     67
     68	{
     69		struct S s = { .v = 100 };
     70
     71		foo(index++, &s);
     72		save_value(index++, s.v);
     73	}
     74
     75	{
     76		global_variable.v = 42;
     77		bar(index++, &global_variable);
     78		save_value(index++, global_variable.v);
     79	}
     80
     81	{
     82		struct S v, *p = &v;
     83
     84		baz(&p);
     85		save_value(index++, !p);
     86	}
     87
     88	return 0;
     89}
     90
     91char _license[] SEC("license") = "GPL";