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_data.c (2401B)


      1// SPDX-License-Identifier: GPL-2.0
      2// Copyright (c) 2019 Isovalent, Inc.
      3
      4#include <linux/bpf.h>
      5#include <linux/pkt_cls.h>
      6#include <string.h>
      7
      8#include <bpf/bpf_helpers.h>
      9
     10struct {
     11	__uint(type, BPF_MAP_TYPE_ARRAY);
     12	__uint(max_entries, 11);
     13	__type(key, __u32);
     14	__type(value, __u64);
     15} result_number SEC(".maps");
     16
     17struct {
     18	__uint(type, BPF_MAP_TYPE_ARRAY);
     19	__uint(max_entries, 5);
     20	__type(key, __u32);
     21	const char (*value)[32];
     22} result_string SEC(".maps");
     23
     24struct foo {
     25	__u8  a;
     26	__u32 b;
     27	__u64 c;
     28};
     29
     30struct {
     31	__uint(type, BPF_MAP_TYPE_ARRAY);
     32	__uint(max_entries, 5);
     33	__type(key, __u32);
     34	__type(value, struct foo);
     35} result_struct SEC(".maps");
     36
     37/* Relocation tests for __u64s. */
     38static       __u64 num0;
     39static       __u64 num1 = 42;
     40static const __u64 num2 = 24;
     41static       __u64 num3 = 0;
     42static       __u64 num4 = 0xffeeff;
     43static const __u64 num5 = 0xabab;
     44static const __u64 num6 = 0xab;
     45
     46/* Relocation tests for strings. */
     47static const char str0[32] = "abcdefghijklmnopqrstuvwxyz";
     48static       char str1[32] = "abcdefghijklmnopqrstuvwxyz";
     49static       char str2[32];
     50
     51/* Relocation tests for structs. */
     52static const struct foo struct0 = {
     53	.a = 42,
     54	.b = 0xfefeefef,
     55	.c = 0x1111111111111111ULL,
     56};
     57static struct foo struct1;
     58static const struct foo struct2;
     59static struct foo struct3 = {
     60	.a = 41,
     61	.b = 0xeeeeefef,
     62	.c = 0x2111111111111111ULL,
     63};
     64
     65#define test_reloc(map, num, var)					\
     66	do {								\
     67		__u32 key = num;					\
     68		bpf_map_update_elem(&result_##map, &key, var, 0);	\
     69	} while (0)
     70
     71SEC("tc")
     72int load_static_data(struct __sk_buff *skb)
     73{
     74	static const __u64 bar = ~0;
     75
     76	test_reloc(number, 0, &num0);
     77	test_reloc(number, 1, &num1);
     78	test_reloc(number, 2, &num2);
     79	test_reloc(number, 3, &num3);
     80	test_reloc(number, 4, &num4);
     81	test_reloc(number, 5, &num5);
     82	num4 = 1234;
     83	test_reloc(number, 6, &num4);
     84	test_reloc(number, 7, &num0);
     85	test_reloc(number, 8, &num6);
     86
     87	test_reloc(string, 0, str0);
     88	test_reloc(string, 1, str1);
     89	test_reloc(string, 2, str2);
     90	str1[5] = 'x';
     91	test_reloc(string, 3, str1);
     92	__builtin_memcpy(&str2[2], "hello", sizeof("hello"));
     93	test_reloc(string, 4, str2);
     94
     95	test_reloc(struct, 0, &struct0);
     96	test_reloc(struct, 1, &struct1);
     97	test_reloc(struct, 2, &struct2);
     98	test_reloc(struct, 3, &struct3);
     99
    100	test_reloc(number,  9, &struct0.c);
    101	test_reloc(number, 10, &bar);
    102
    103	return TC_ACT_OK;
    104}
    105
    106char _license[] SEC("license") = "GPL";