On 7/5/23 2:33 PM, Wang Ming wrote:
In use_missing_map function, value is initialized twice.There is no connection between the two assignment. This patch could fix this bug.
Please never submit patches where you are just speculating and did not even bother to run BPF selftests !
Otherwise you would have seen that your change is breaking it :
Error: #126 log_fixup Error: #126/5 log_fixup/missing_map Error: #126/5 log_fixup/missing_map missing_map:PASS:skel_open 0 nsec libbpf: prog 'use_missing_map': BPF program load failed: Invalid argument libbpf: prog 'use_missing_map': failed to load: -22 libbpf: failed to load object 'test_log_fixup' libbpf: failed to load BPF skeleton 'test_log_fixup': -22 missing_map:PASS:load_fail 0 nsec missing_map:PASS:existing_map_autocreate 0 nsec missing_map:PASS:missing_map_autocreate 0 nsec missing_map:FAIL:log_buf unexpected log_buf: '8: <invalid BPF map reference> BPF map 'missing_map' is referenced but wasn't created ' is not a substring of 'reg type unsupported for arg#0 function use_missing_map#20 0: R1=ctx(off=0,imm=0) R10=fp0 ; int use_missing_map(const void *ctx) 0: (b4) w1 = 0 ; R1_w=0 ; int zero = 0; 1: (63) *(u32 *)(r10 -4) = r1 ; R1_w=0 R10=fp0 fp-8=0000???? 2: (bf) r2 = r10 ; R2_w=fp0 R10=fp0 ; 3: (07) r2 += -4 ; R2_w=fp-4 ; return bpf_map_lookup_elem(&missing_map, &zero) != NULL; 4: <invalid BPF map reference> BPF map 'missing_map' is referenced but wasn't created processed 5 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0
Signed-off-by: Wang Ming machel@vivo.com
tools/testing/selftests/bpf/progs/test_log_fixup.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/tools/testing/selftests/bpf/progs/test_log_fixup.c b/tools/testing/selftests/bpf/progs/test_log_fixup.c index 1bd48feaaa42..1c49b2f9be6c 100644 --- a/tools/testing/selftests/bpf/progs/test_log_fixup.c +++ b/tools/testing/selftests/bpf/progs/test_log_fixup.c @@ -52,13 +52,9 @@ struct { SEC("?raw_tp/sys_enter") int use_missing_map(const void *ctx) {
- int zero = 0, *value;
- int zero = 0;
- value = bpf_map_lookup_elem(&existing_map, &zero);
- value = bpf_map_lookup_elem(&missing_map, &zero);
- return value != NULL;
- return bpf_map_lookup_elem(&missing_map, &zero) != NULL; }
extern int bpf_nonexistent_kfunc(void) __ksym __weak;