bpf, trace: make ctx access checks more robust
authorDaniel Borkmann <daniel@iogearbox.net>
Sun, 15 Jan 2017 00:34:25 +0000 (01:34 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 16 Jan 2017 19:41:42 +0000 (14:41 -0500)
commit2d071c643f1cd15a24172de4b5b7ae2adb93abbb
tree31fa22a277b92984067d77bb6d2f1edaae1d2adf
parent019ec0032e821a7262995af0c81b242dc7e55c9f
bpf, trace: make ctx access checks more robust

Make sure that ctx cannot potentially be accessed oob by asserting
explicitly that ctx access size into pt_regs for BPF_PROG_TYPE_KPROBE
programs must be within limits. In case some 32bit archs have pt_regs
not being a multiple of 8, then BPF_DW access could cause such access.

BPF_PROG_TYPE_KPROBE progs don't have a ctx conversion function since
there's no extra mapping needed. kprobe_prog_is_valid_access() didn't
enforce sizeof(long) as the only allowed access size, since LLVM can
generate non BPF_W/BPF_DW access to regs from time to time.

For BPF_PROG_TYPE_TRACEPOINT we don't have a ctx conversion either, so
add a BUILD_BUG_ON() check to make sure that BPF_DW access will not be
a similar issue in future (ctx works on event buffer as opposed to
pt_regs there).

Fixes: 2541517c32be ("tracing, perf: Implement BPF programs attached to kprobes")
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
kernel/trace/bpf_trace.c