]> git.baikalelectronics.ru Git - kernel.git/commit
bpf: fix range arithmetic for bpf map access
authorJosef Bacik <jbacik@fb.com>
Mon, 14 Nov 2016 20:45:36 +0000 (15:45 -0500)
committerDavid S. Miller <davem@davemloft.net>
Wed, 16 Nov 2016 18:21:45 +0000 (13:21 -0500)
commit4eaf0048bc4c42d08a91735c2bd3167457004133
tree7a4064ef679c1a0394386eaf5dc538c47c9007a7
parent4eec946c70617811db15e9df5d1b65baab4bc134
bpf: fix range arithmetic for bpf map access

I made some invalid assumptions with BPF_AND and BPF_MOD that could result in
invalid accesses to bpf map entries.  Fix this up by doing a few things

1) Kill BPF_MOD support.  This doesn't actually get used by the compiler in real
life and just adds extra complexity.

2) Fix the logic for BPF_AND, don't allow AND of negative numbers and set the
minimum value to 0 for positive AND's.

3) Don't do operations on the ranges if they are set to the limits, as they are
by definition undefined, and allowing arithmetic operations on those values
could make them appear valid when they really aren't.

This fixes the testcase provided by Jann as well as a few other theoretical
problems.

Reported-by: Jann Horn <jannh@google.com>
Signed-off-by: Josef Bacik <jbacik@fb.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/bpf_verifier.h
kernel/bpf/verifier.c