On Sat, Dec 01, 2018 at 01:18:53AM +0100, Daniel Borkmann wrote: > Currently, pointer offsets in three BPF context structures are > broken in two scenarios: i) 32 bit compiled applications running > on 64 bit kernels, and ii) LLVM compiled BPF programs running > on 32 bit kernels. The latter is due to BPF target machine being > strictly 64 bit. So in each of the cases the offsets will mismatch > in verifier when checking / rewriting context access. Fix this by > providing a helper macro __bpf_md_ptr() that will enforce padding > up to 64 bit and proper alignment, and for context access a macro > bpf_ctx_range_ptr() which will cover full 64 bit member range on > 32 bit archs. For flow_keys, we additionally need to force the > size check to sizeof(__u64) as with other pointer types. > > Fixes: d58e468b1112 ("flow_dissector: implements flow dissector BPF hook") > Fixes: 4f738adba30a ("bpf: create tcp_bpf_ulp allowing BPF to monitor socket > TX/RX data") > Fixes: 2dbb9b9e6df6 ("bpf: Introduce BPF_PROG_TYPE_SK_REUSEPORT") > Reported-by: David S. Miller <da...@davemloft.net> > Signed-off-by: Daniel Borkmann <dan...@iogearbox.net> > Acked-by: David S. Miller <da...@davemloft.net>
Applied. Thanks everyone