at v5.2-rc2 50 lines 1.3 kB view raw
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 14static void *(*bpf_map_lookup_elem)(void *map, void *key) = 15 (void *) BPF_FUNC_map_lookup_elem; 16static void *(*bpf_map_update_elem)(void *map, void *key, void *value, int flags) = 17 (void *) BPF_FUNC_map_update_elem; 18 19struct 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)) 27struct 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 34int this_is_a_global_val; 35 36SEC("func=sys_write") 37int 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} 49char _license[] SEC("license") = "GPL"; 50int _version SEC("version") = LINUX_VERSION_CODE;