linux_dsm_epyc7002/kernel/bpf
Daniel Borkmann 8e2fe1d9f1 bpf: add new arg_type that allows for 0 sized stack buffer
Currently, when we pass a buffer from the eBPF stack into a helper
function, the function proto indicates argument types as ARG_PTR_TO_STACK
and ARG_CONST_STACK_SIZE pair. If R<X> contains the former, then R<X+1>
must be of the latter type. Then, verifier checks whether the buffer
points into eBPF stack, is initialized, etc. The verifier also guarantees
that the constant value passed in R<X+1> is greater than 0, so helper
functions don't need to test for it and can always assume a non-NULL
initialized buffer as well as non-0 buffer size.

This patch adds a new argument types ARG_CONST_STACK_SIZE_OR_ZERO that
allows to also pass NULL as R<X> and 0 as R<X+1> into the helper function.
Such helper functions, of course, need to be able to handle these cases
internally then. Verifier guarantees that either R<X> == NULL && R<X+1> == 0
or R<X> != NULL && R<X+1> != 0 (like the case of ARG_CONST_STACK_SIZE), any
other combinations are not possible to load.

I went through various options of extending the verifier, and introducing
the type ARG_CONST_STACK_SIZE_OR_ZERO seems to have most minimal changes
needed to the verifier.

Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-02-21 22:07:09 -05:00
..
arraymap.c bpf: add lookup/update support for per-cpu hash and array maps 2016-02-06 03:34:36 -05:00
core.c bpf: move clearing of A/X into classic to eBPF migration prologue 2015-12-18 16:04:51 -05:00
hashtab.c bpf: grab rcu read lock for bpf_percpu_hash_update 2016-02-19 14:37:43 -05:00
helpers.c bpf: split state from prandom_u32() and consolidate {c, e}BPF prngs 2015-10-08 05:26:39 -07:00
inode.c bpf, inode: allow for rename and link ops 2015-12-12 18:44:23 -05:00
Makefile bpf: introduce BPF_MAP_TYPE_STACK_TRACE 2016-02-20 00:21:44 -05:00
stackmap.c bpf: introduce BPF_MAP_TYPE_STACK_TRACE 2016-02-20 00:21:44 -05:00
syscall.c bpf: add lookup/update support for per-cpu hash and array maps 2016-02-06 03:34:36 -05:00
verifier.c bpf: add new arg_type that allows for 0 sized stack buffer 2016-02-21 22:07:09 -05:00