• Daniel Borkmann's avatar
    bpf: Fix mprog detachment for empty mprog entry · d210f973
    Daniel Borkmann authored
    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: 053c8e1f ("bpf: Add generic attach/detach/query API for multi-progs")
    Reported-by: syzbot+0c06ba0f831fe07a8f27@syzkaller.appspotmail.com
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/r/20230804131112.11012-1-daniel@iogearbox.netSigned-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
    d210f973
mprog.c 11.5 KB