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

bpf-script-example.c (1337B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * bpf-script-example.c
      4 * Test basic LLVM building
      5 */
      6#ifndef LINUX_VERSION_CODE
      7# error Need LINUX_VERSION_CODE
      8# error Example: for 4.2 kernel, put 'clang-opt="-DLINUX_VERSION_CODE=0x40200" into llvm section of ~/.perfconfig'
      9#endif
     10#define BPF_ANY 0
     11#define BPF_MAP_TYPE_ARRAY 2
     12#define BPF_FUNC_map_lookup_elem 1
     13#define BPF_FUNC_map_update_elem 2
     14
     15static void *(*bpf_map_lookup_elem)(void *map, void *key) =
     16	(void *) BPF_FUNC_map_lookup_elem;
     17static void *(*bpf_map_update_elem)(void *map, void *key, void *value, int flags) =
     18	(void *) BPF_FUNC_map_update_elem;
     19
     20struct bpf_map_def {
     21	unsigned int type;
     22	unsigned int key_size;
     23	unsigned int value_size;
     24	unsigned int max_entries;
     25};
     26
     27#define SEC(NAME) __attribute__((section(NAME), used))
     28struct bpf_map_def SEC("maps") flip_table = {
     29	.type = BPF_MAP_TYPE_ARRAY,
     30	.key_size = sizeof(int),
     31	.value_size = sizeof(int),
     32	.max_entries = 1,
     33};
     34
     35SEC("func=do_epoll_wait")
     36int bpf_func__SyS_epoll_pwait(void *ctx)
     37{
     38	int ind =0;
     39	int *flag = bpf_map_lookup_elem(&flip_table, &ind);
     40	int new_flag;
     41	if (!flag)
     42		return 0;
     43	/* flip flag and store back */
     44	new_flag = !*flag;
     45	bpf_map_update_elem(&flip_table, &ind, &new_flag, BPF_ANY);
     46	return new_flag;
     47}
     48char _license[] SEC("license") = "GPL";
     49int _version SEC("version") = LINUX_VERSION_CODE;