Commit a812460
LoongArch: BPF: Support 64-bit pointers to kfuncs
Like commit 1cf3bfc ("bpf: Support 64-bit pointers to kfuncs")
for s390x, add support for 64-bit pointers to kfuncs for LoongArch.
Since the infrastructure is already implemented in BPF core, the only
thing need to be done is to override bpf_jit_supports_far_kfunc_call().
Before this change, several test_verifier tests failed:
# ./test_verifier | grep # | grep FAIL
torvalds#119/p calls: invalid kfunc call: ptr_to_mem to struct with non-scalar FAIL
torvalds#120/p calls: invalid kfunc call: ptr_to_mem to struct with nesting depth > 4 FAIL
torvalds#121/p calls: invalid kfunc call: ptr_to_mem to struct with FAM FAIL
torvalds#122/p calls: invalid kfunc call: reg->type != PTR_TO_CTX FAIL
torvalds#123/p calls: invalid kfunc call: void * not allowed in func proto without mem size arg FAIL
torvalds#124/p calls: trigger reg2btf_ids[reg->type] for reg->type > __BPF_REG_TYPE_MAX FAIL
torvalds#125/p calls: invalid kfunc call: reg->off must be zero when passed to release kfunc FAIL
torvalds#126/p calls: invalid kfunc call: don't match first member type when passed to release kfunc FAIL
torvalds#127/p calls: invalid kfunc call: PTR_TO_BTF_ID with negative offset FAIL
torvalds#128/p calls: invalid kfunc call: PTR_TO_BTF_ID with variable offset FAIL
torvalds#129/p calls: invalid kfunc call: referenced arg needs refcounted PTR_TO_BTF_ID FAIL
torvalds#130/p calls: valid kfunc call: referenced arg needs refcounted PTR_TO_BTF_ID FAIL
torvalds#486/p map_kptr: ref: reference state created and released on xchg FAIL
This is because the kfuncs in the loaded module are far away from
__bpf_call_base:
ffff800002009440 t bpf_kfunc_call_test_fail1 [bpf_testmod]
9000000002e128d8 T __bpf_call_base
The offset relative to __bpf_call_base does NOT fit in s32, which breaks
the assumption in BPF core. Enable bpf_jit_supports_far_kfunc_call() lifts
this limit.
Note that to reproduce the above result, tools/testing/selftests/bpf/config
should be applied, and run the test with JIT enabled, unpriv BPF enabled.
With this change, the test_verifier tests now all passed:
# ./test_verifier
...
Summary: 777 PASSED, 0 SKIPPED, 0 FAILED
Tested-by: Tiezhu Yang <[email protected]>
Signed-off-by: Hengqi Chen <[email protected]>
Signed-off-by: Huacai Chen <[email protected]>1 parent a88e69e commit a812460
1 file changed
+5
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
201 | 201 | | |
202 | 202 | | |
203 | 203 | | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
204 | 209 | | |
205 | 210 | | |
206 | 211 | | |
| |||
0 commit comments