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