[v2,2/5] bpf: fix add/sub min/max estimations
Checks
Commit Message
eval_add()/eval_sub() not always correctly estimate
minimum and maximum possible values of add/sub operations.
Fixes: 8021917293d0 ("bpf: add extra validation for input BPF program")
Cc: stable@dpdk.org
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
---
lib/librte_bpf/bpf_validate.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
@@ -226,7 +226,7 @@ eval_add(struct bpf_reg_val *rd, const struct bpf_reg_val *rs, uint64_t msk)
struct bpf_reg_val rv;
rv.u.min = (rd->u.min + rs->u.min) & msk;
- rv.u.max = (rd->u.min + rs->u.max) & msk;
+ rv.u.max = (rd->u.max + rs->u.max) & msk;
rv.s.min = (rd->s.min + rs->s.min) & msk;
rv.s.max = (rd->s.max + rs->s.max) & msk;
@@ -254,10 +254,10 @@ eval_sub(struct bpf_reg_val *rd, const struct bpf_reg_val *rs, uint64_t msk)
{
struct bpf_reg_val rv;
- rv.u.min = (rd->u.min - rs->u.min) & msk;
- rv.u.max = (rd->u.min - rs->u.max) & msk;
- rv.s.min = (rd->s.min - rs->s.min) & msk;
- rv.s.max = (rd->s.max - rs->s.max) & msk;
+ rv.u.min = (rd->u.min - rs->u.max) & msk;
+ rv.u.max = (rd->u.max - rs->u.min) & msk;
+ rv.s.min = (rd->s.min - rs->s.max) & msk;
+ rv.s.max = (rd->s.max - rs->s.min) & msk;
/*
* if at least one of the operands is not constant,