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-test-relocation.c (1331B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * bpf-script-test-relocation.c
      4 * Test BPF loader checking relocation
      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") my_table = {
     29	.type = BPF_MAP_TYPE_ARRAY,
     30	.key_size = sizeof(int),
     31	.value_size = sizeof(int),
     32	.max_entries = 1,
     33};
     34
     35int this_is_a_global_val;
     36
     37SEC("func=sys_write")
     38int bpf_func__sys_write(void *ctx)
     39{
     40	int key = 0;
     41	int value = 0;
     42
     43	/*
     44	 * Incorrect relocation. Should not allow this program be
     45	 * loaded into kernel.
     46	 */
     47	bpf_map_update_elem(&this_is_a_global_val, &key, &value, 0);
     48	return 0;
     49}
     50char _license[] SEC("license") = "GPL";
     51int _version SEC("version") = LINUX_VERSION_CODE;