File tree Expand file tree Collapse file tree 3 files changed +52
-2
lines changed
tools/testing/selftests/bpf Expand file tree Collapse file tree 3 files changed +52
-2
lines changed Original file line number Diff line number Diff line change @@ -5642,8 +5642,9 @@ static int check_max_stack_depth(struct bpf_verifier_env *env)
5642
5642
verbose(env, "verifier bug. subprog has tail_call and async cb\n");
5643
5643
return -EFAULT;
5644
5644
}
5645
- /* async callbacks don't increase bpf prog stack size */
5646
- continue;
5645
+ /* async callbacks don't increase bpf prog stack size unless called directly */
5646
+ if (!bpf_pseudo_call(insn + i))
5647
+ continue;
5647
5648
}
5648
5649
i = next_insn;
5649
5650
Original file line number Diff line number Diff line change
1
+ // SPDX-License-Identifier: GPL-2.0
2
+ #include <test_progs.h>
3
+
4
+ #include "async_stack_depth.skel.h"
5
+
6
+ void test_async_stack_depth (void )
7
+ {
8
+ RUN_TESTS (async_stack_depth );
9
+ }
Original file line number Diff line number Diff line change
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" ;
You can’t perform that action at this time.
0 commit comments