1 /* 2 * bpf-script-test-relocation.c 3 * Test BPF loader checking relocation 4 */ 5 #ifndef LINUX_VERSION_CODE 6 # error Need LINUX_VERSION_CODE 7 # error Example: for 4.2 kernel, put 'clang-opt="-DLINUX_VERSION_CODE=0x40200" into llvm section of ~/.perfconfig' 8 #endif 9 #define BPF_ANY 0 10 #define BPF_MAP_TYPE_ARRAY 2 11 #define BPF_FUNC_map_lookup_elem 1 12 #define BPF_FUNC_map_update_elem 2 13 14 static void *(*bpf_map_lookup_elem)(void *map, void *key) = 15 (void *) BPF_FUNC_map_lookup_elem; 16 static void *(*bpf_map_update_elem)(void *map, void *key, void *value, int flags) = 17 (void *) BPF_FUNC_map_update_elem; 18 19 struct bpf_map_def { 20 unsigned int type; 21 unsigned int key_size; 22 unsigned int value_size; 23 unsigned int max_entries; 24 }; 25 26 #define SEC(NAME) __attribute__((section(NAME), used)) 27 struct bpf_map_def SEC("maps") my_table = { 28 .type = BPF_MAP_TYPE_ARRAY, 29 .key_size = sizeof(int), 30 .value_size = sizeof(int), 31 .max_entries = 1, 32 }; 33 34 int this_is_a_global_val; 35 36 SEC("func=sys_write") 37 int bpf_func__sys_write(void *ctx) 38 { 39 int key = 0; 40 int value = 0; 41 42 /* 43 * Incorrect relocation. Should not allow this program be 44 * loaded into kernel. 45 */ 46 bpf_map_update_elem(&this_is_a_global_val, &key, &value, 0); 47 return 0; 48 } 49 char _license[] SEC("license") = "GPL"; 50 int _version SEC("version") = LINUX_VERSION_CODE; 51
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.