OSDN Git Service

bpf: Fix an array-index-out-of-bounds issue in disasm.c
authorYonghong Song <yonghong.song@linux.dev>
Mon, 31 Jul 2023 20:45:34 +0000 (13:45 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 1 Aug 2023 00:35:02 +0000 (17:35 -0700)
commite99688eba2e90a600956e936bc335ece902a5d7f
tree4ed882047898b50f32c5e23612d71ae884496feb
parent74bdfab4fd7c641e55f7fe9d1be9687eeb01df67
bpf: Fix an array-index-out-of-bounds issue in disasm.c

syzbot reported an array-index-out-of-bounds when printing out bpf
insns. Further investigation shows the insn is illegal but
is printed out due to log level 1 or 2 before actual insn verification
in do_check().

This particular illegal insn is a MOVSX insn with offset value 2.
The legal offset value for MOVSX should be 8, 16 and 32.
The disasm sign-extension-size array index is calculated as
 (insn->off / 8) - 1
and offset value 2 gives an out-of-bound index -1.

Tighten the checking for MOVSX insn in disasm.c to avoid
array-index-out-of-bounds issue.

Reported-by: syzbot+3758842a6c01012aa73b@syzkaller.appspotmail.com
Fixes: f835bb622299 ("bpf: Add kernel/bpftool asm support for new instructions")
Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
Acked-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/r/20230731204534.1975311-1-yonghong.song@linux.dev
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/disasm.c