samples/bpf: syscall_tp_user: Fix array out-of-bound access
authorJinghao Jia <jinghao@linux.ibm.com>
Sun, 17 Sep 2023 21:42:20 +0000 (16:42 -0500)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 21 Sep 2023 21:32:47 +0000 (14:32 -0700)
commit9220c3ef6fefbf18f24aeedb1142a642b3de0596
treeac83062572f63b2577f6777d8fefd12828e4e2a9
parent0ee352fe0d28015cab161b04d202fa3231c0ba3b
samples/bpf: syscall_tp_user: Fix array out-of-bound access

Commit 06744f24696e ("samples/bpf: Add openat2() enter/exit tracepoint
to syscall_tp sample") added two more eBPF programs to support the
openat2() syscall. However, it did not increase the size of the array
that holds the corresponding bpf_links. This leads to an out-of-bound
access on that array in the bpf_object__for_each_program loop and could
corrupt other variables on the stack. On our testing QEMU, it corrupts
the map1_fds array and causes the sample to fail:

  # ./syscall_tp
  prog #0: map ids 4 5
  verify map:4 val: 5
  map_lookup failed: Bad file descriptor

Dynamically allocate the array based on the number of programs reported
by libbpf to prevent similar inconsistencies in the future

Fixes: 06744f24696e ("samples/bpf: Add openat2() enter/exit tracepoint to syscall_tp sample")
Signed-off-by: Jinghao Jia <jinghao@linux.ibm.com>
Signed-off-by: Ruowen Qin <ruowenq2@illinois.edu>
Signed-off-by: Jinghao Jia <jinghao7@illinois.edu>
Link: https://lore.kernel.org/r/20230917214220.637721-4-jinghao7@illinois.edu
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
samples/bpf/syscall_tp_user.c