bpf: fix validate for function return value
authorKonstantin Ananyev <konstantin.ananyev@intel.com>
Wed, 3 Jul 2019 13:40:34 +0000 (14:40 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Thu, 4 Jul 2019 08:33:13 +0000 (10:33 +0200)
commit4715bb162368cf75c5e8db62f54b5071b70d68f3
tree085910727a790f693a19c2ae7fccbf278cd87c7a
parent0a92e63fc4cdd39e2fe08db663246fccf9b80298
bpf: fix validate for function return value

eval_call() blindly calls eval_max_bound() for external function
return value for all return types.
That causes wrong estimation for returned pointer min and max boundaries.
So any attempt to dereference that pointer value causes verifier to fail
with error message: "memory boundary violation at pc: ...".
To fix - estimate min/max boundaries based on the return value type.

Bugzilla ID: 298

Fixes: 8021917293d0 ("bpf: add extra validation for input BPF program")
Cc: stable@dpdk.org
Reported-by: Michel Machado <michel@digirati.com.br>
Suggested-by: Michel Machado <michel@digirati.com.br>
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
lib/librte_bpf/bpf_validate.c