bpf: Fix mprog detachment for empty mprog entry
authorDaniel Borkmann <daniel@iogearbox.net>
Fri, 4 Aug 2023 13:11:11 +0000 (15:11 +0200)
committerMartin KaFai Lau <martin.lau@kernel.org>
Fri, 4 Aug 2023 16:35:39 +0000 (09:35 -0700)
commitd210f9735e13e9b1ef6ffbb636ee051f615bd109
tree07a63dcf460d52a98815aba252e3b0197fda8d57
parent5964d1e4594eb1dbfc1e2a34ec89eb48f6b03e75
bpf: Fix mprog detachment for empty mprog entry

syzbot reported an UBSAN array-index-out-of-bounds access in bpf_mprog_read()
upon bpf_mprog_detach(). While it did not have a reproducer, I was able to
manually reproduce through an empty mprog entry which just has miniq present.

The latter is important given otherwise we get an ENOENT error as tcx detaches
the whole mprog entry. The index 4294967295 was triggered via NULL dtuple.prog
which then attempts to detach from the back. bpf_mprog_fetch() in this case
did hit the idx == total and therefore tried to grab the entry at idx -1.

Fix it by adding an explicit bpf_mprog_total() check in bpf_mprog_detach() and
bail out early with ENOENT.

Fixes: 053c8e1f235d ("bpf: Add generic attach/detach/query API for multi-progs")
Reported-by: syzbot+0c06ba0f831fe07a8f27@syzkaller.appspotmail.com
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/r/20230804131112.11012-1-daniel@iogearbox.net
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
kernel/bpf/mprog.c