1 // SPDX-License-Identifier: GPL-2.0 2 #include <vmlinux.h> 3 #include <bpf/bpf_helpers.h> 4 5 #include "bpf_misc.h" 6 7 struct hmap_elem { 8 struct bpf_timer timer; 9 }; 10 11 struct { 12 __uint(type, BPF_MAP_TYPE_HASH); 13 __uint(max_entries, 64); 14 __type(key, int); 15 __type(value, struct hmap_elem); 16 } hmap SEC(".maps"); 17 18 __attribute__((noinline)) 19 static int timer_cb(void *map, int *key, struct bpf_timer *timer) 20 { 21 volatile char buf[256] = {}; 22 return buf[69]; 23 } 24 25 SEC("tc") 26 __failure __msg("combined stack size of 2 calls") 27 int prog(struct __sk_buff *ctx) 28 { 29 struct hmap_elem *elem; 30 volatile char buf[256] = {}; 31 32 elem = bpf_map_lookup_elem(&hmap, &(int){0}); 33 if (!elem) 34 return 0; 35 36 timer_cb(NULL, NULL, NULL); 37 return bpf_timer_set_callback(&elem->timer, timer_cb) + buf[0]; 38 } 39 40 char _license[] SEC("license") = "GPL"; 41