aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing/selftests/bpf/verifier/var_off.c
diff options
context:
space:
mode:
authorAndrey Ignatov <rdna@fb.com>2019-04-03 23:22:39 -0700
committerDaniel Borkmann <daniel@iogearbox.net>2019-04-05 16:50:07 +0200
commit088ec26d9c2da9d879ab73e3f4117f9df6c566ee (patch)
treec7965d3ac5707279af5d842e99d37e474a4e8d73 /tools/testing/selftests/bpf/verifier/var_off.c
parentselftests/bpf: Test indirect var_off stack access in raw mode (diff)
downloadlinux-dev-088ec26d9c2da9d879ab73e3f4117f9df6c566ee.tar.xz
linux-dev-088ec26d9c2da9d879ab73e3f4117f9df6c566ee.zip
bpf: Reject indirect var_off stack access in unpriv mode
Proper support of indirect stack access with variable offset in unprivileged mode (!root) requires corresponding support in Spectre masking for stack ALU in retrieve_ptr_limit(). There are no use-case for variable offset in unprivileged mode though so make verifier reject such accesses for simplicity. Pointer arithmetics is one (and only?) way to cause variable offset and it's already rejected in unpriv mode so that verifier won't even get to helper function whose argument contains variable offset, e.g.: 0: (7a) *(u64 *)(r10 -16) = 0 1: (7a) *(u64 *)(r10 -8) = 0 2: (61) r2 = *(u32 *)(r1 +0) 3: (57) r2 &= 4 4: (17) r2 -= 16 5: (0f) r2 += r10 variable stack access var_off=(0xfffffffffffffff0; 0x4) off=-16 size=1R2 stack pointer arithmetic goes out of range, prohibited for !root Still it looks like a good idea to reject variable offset indirect stack access for unprivileged mode in check_stack_boundary() explicitly. Fixes: 2011fccfb61b ("bpf: Support variable offset stack access from helpers") Reported-by: Daniel Borkmann <daniel@iogearbox.net> Signed-off-by: Andrey Ignatov <rdna@fb.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to '')
0 files changed, 0 insertions, 0 deletions