Commit 9df5fad
bpf: Reject BPF_MAP_TYPE_INSN_ARRAY in check_reg_const_str()
BPF_MAP_TYPE_INSN_ARRAY maps store instruction pointers in their
ips array, not string data. The map_direct_value_addr callback for
this map type returns the address of the ips array, which is not
suitable for use as a constant string argument.
When a BPF program passes a pointer to an insn_array map value as
ARG_PTR_TO_CONST_STR (e.g., to bpf_snprintf), the verifier's
null-termination check in check_reg_const_str() operates on the
wrong memory region, and at runtime bpf_bprintf_prepare() can read
out of bounds searching for a null terminator.
Reject BPF_MAP_TYPE_INSN_ARRAY in check_reg_const_str() since this
map type is not designed to hold string data.
Reported-by: [email protected]
Closes: https://syzkaller.appspot.com/bug?extid=2c29addf92581b410079
Tested-by: [email protected]
Fixes: 493d9e0 ("bpf, x86: add support for indirect jumps")
Signed-off-by: Deepanshu Kartikey <[email protected]>
Acked-by: Anton Protopopov <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Alexei Starovoitov <[email protected]>1 parent ab86d0b commit 9df5fad
1 file changed
Lines changed: 5 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9609 | 9609 | | |
9610 | 9610 | | |
9611 | 9611 | | |
| 9612 | + | |
| 9613 | + | |
| 9614 | + | |
| 9615 | + | |
| 9616 | + | |
9612 | 9617 | | |
9613 | 9618 | | |
9614 | 9619 | | |
| |||
0 commit comments