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

linked_maps1.c (1851B)


      1// SPDX-License-Identifier: GPL-2.0
      2/* Copyright (c) 2021 Facebook */
      3
      4#include "vmlinux.h"
      5#include <bpf/bpf_helpers.h>
      6#include <bpf/bpf_tracing.h>
      7
      8struct my_key { long x; };
      9struct my_value { long x; };
     10
     11struct {
     12	__uint(type, BPF_MAP_TYPE_HASH);
     13	__type(key, struct my_key);
     14	__type(value, struct my_value);
     15	__uint(max_entries, 16);
     16} map1 SEC(".maps");
     17
     18 /* Matches map2 definition in linked_maps2.c. Order of the attributes doesn't
     19  * matter.
     20  */
     21typedef struct {
     22	__uint(max_entries, 8);
     23	__type(key, int);
     24	__type(value, int);
     25	__uint(type, BPF_MAP_TYPE_ARRAY);
     26} map2_t;
     27
     28extern map2_t map2 SEC(".maps");
     29
     30/* This should be the winning map definition, but we have no way of verifying,
     31 * so we just make sure that it links and works without errors
     32 */
     33struct {
     34	__uint(type, BPF_MAP_TYPE_ARRAY);
     35	__type(key, int);
     36	__type(value, int);
     37	__uint(max_entries, 16);
     38} map_weak __weak SEC(".maps");
     39
     40int output_first1;
     41int output_second1;
     42int output_weak1;
     43
     44SEC("raw_tp/sys_enter")
     45int BPF_PROG(handler_enter1)
     46{
     47	/* update values with key = 1 */
     48	int key = 1, val = 1;
     49	struct my_key key_struct = { .x = 1 };
     50	struct my_value val_struct = { .x = 1000 };
     51
     52	bpf_map_update_elem(&map1, &key_struct, &val_struct, 0);
     53	bpf_map_update_elem(&map2, &key, &val, 0);
     54	bpf_map_update_elem(&map_weak, &key, &val, 0);
     55
     56	return 0;
     57}
     58
     59SEC("raw_tp/sys_exit")
     60int BPF_PROG(handler_exit1)
     61{
     62	/* lookup values with key = 2, set in another file */
     63	int key = 2, *val;
     64	struct my_key key_struct = { .x = 2 };
     65	struct my_value *value_struct;
     66
     67	value_struct = bpf_map_lookup_elem(&map1, &key_struct);
     68	if (value_struct)
     69		output_first1 = value_struct->x;
     70
     71	val = bpf_map_lookup_elem(&map2, &key);
     72	if (val)
     73		output_second1 = *val;
     74
     75	val = bpf_map_lookup_elem(&map_weak, &key);
     76	if (val)
     77		output_weak1 = *val;
     78
     79	return 0;
     80}
     81
     82char LICENSE[] SEC("license") = "GPL";