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_maps2.c (1735B)


      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
      8/* modifiers and typedefs are ignored when comparing key/value types */
      9typedef struct my_key { long x; } key_type;
     10typedef struct my_value { long x; } value_type;
     11
     12extern struct {
     13	__uint(max_entries, 16);
     14	__type(key, key_type);
     15	__type(value, value_type);
     16	__uint(type, BPF_MAP_TYPE_HASH);
     17} map1 SEC(".maps");
     18
     19struct {
     20	__uint(type, BPF_MAP_TYPE_ARRAY);
     21	__type(key, int);
     22	__type(value, int);
     23	__uint(max_entries, 8);
     24} map2 SEC(".maps");
     25
     26/* this definition will lose, but it has to exactly match the winner */
     27struct {
     28	__uint(type, BPF_MAP_TYPE_ARRAY);
     29	__type(key, int);
     30	__type(value, int);
     31	__uint(max_entries, 16);
     32} map_weak __weak SEC(".maps");
     33
     34int output_first2;
     35int output_second2;
     36int output_weak2;
     37
     38SEC("raw_tp/sys_enter")
     39int BPF_PROG(handler_enter2)
     40{
     41	/* update values with key = 2 */
     42	int key = 2, val = 2;
     43	key_type key_struct = { .x = 2 };
     44	value_type val_struct = { .x = 2000 };
     45
     46	bpf_map_update_elem(&map1, &key_struct, &val_struct, 0);
     47	bpf_map_update_elem(&map2, &key, &val, 0);
     48	bpf_map_update_elem(&map_weak, &key, &val, 0);
     49
     50	return 0;
     51}
     52
     53SEC("raw_tp/sys_exit")
     54int BPF_PROG(handler_exit2)
     55{
     56	/* lookup values with key = 1, set in another file */
     57	int key = 1, *val;
     58	key_type key_struct = { .x = 1 };
     59	value_type *value_struct;
     60
     61	value_struct = bpf_map_lookup_elem(&map1, &key_struct);
     62	if (value_struct)
     63		output_first2 = value_struct->x;
     64
     65	val = bpf_map_lookup_elem(&map2, &key);
     66	if (val)
     67		output_second2 = *val;
     68
     69	val = bpf_map_lookup_elem(&map_weak, &key);
     70	if (val)
     71		output_weak2 = *val;
     72
     73	return 0;
     74}
     75
     76char LICENSE[] SEC("license") = "GPL";