@@ -20,6 +20,8 @@ __u64 out__non_existent_typed = -1;
20
20
/* test existing weak symbols can be resolved. */
21
21
extern const struct rq runqueues __ksym __weak ; /* typed */
22
22
extern const void bpf_prog_active __ksym __weak ; /* typeless */
23
+ struct task_struct * bpf_task_acquire (struct task_struct * p ) __ksym __weak ;
24
+ void bpf_testmod_test_mod_kfunc (int i ) __ksym __weak ;
23
25
24
26
25
27
/* non-existent weak symbols. */
@@ -29,6 +31,7 @@ extern const void bpf_link_fops1 __ksym __weak;
29
31
30
32
/* typed symbols, default to zero. */
31
33
extern const int bpf_link_fops2 __ksym __weak ;
34
+ void invalid_kfunc (void ) __ksym __weak ;
32
35
33
36
SEC ("raw_tp/sys_enter" )
34
37
int pass_handler (const void * ctx )
@@ -50,6 +53,18 @@ int pass_handler(const void *ctx)
50
53
if (& bpf_link_fops2 ) /* can't happen */
51
54
out__non_existent_typed = (__u64 )bpf_per_cpu_ptr (& bpf_link_fops2 , 0 );
52
55
56
+ if (!bpf_ksym_exists (bpf_task_acquire ))
57
+ /* dead code won't be seen by the verifier */
58
+ bpf_task_acquire (0 );
59
+
60
+ if (!bpf_ksym_exists (bpf_testmod_test_mod_kfunc ))
61
+ /* dead code won't be seen by the verifier */
62
+ bpf_testmod_test_mod_kfunc (0 );
63
+
64
+ if (bpf_ksym_exists (invalid_kfunc ))
65
+ /* dead code won't be seen by the verifier */
66
+ invalid_kfunc ();
67
+
53
68
return 0 ;
54
69
}
55
70
0 commit comments