]> git.baikalelectronics.ru Git - kernel.git/commit
bpf: Fix propagation of 32-bit signed bounds from 64-bit bounds.
authorAlexei Starovoitov <ast@kernel.org>
Tue, 8 Dec 2020 18:01:51 +0000 (19:01 +0100)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 10 Dec 2020 21:02:53 +0000 (13:02 -0800)
commit1575af8ea4a2671170a63beb138f5faa83f136fe
treefa020a03b80b74b93d1751f5e7b2108f4eea074e
parenta391c0609ac39bbfa6106437e39bdd516fff65f6
bpf: Fix propagation of 32-bit signed bounds from 64-bit bounds.

The 64-bit signed bounds should not affect 32-bit signed bounds unless the
verifier knows that upper 32-bits are either all 1s or all 0s. For example the
register with smin_value==1 doesn't mean that s32_min_value is also equal to 1,
since smax_value could be larger than 32-bit subregister can hold.
The verifier refines the smax/s32_max return value from certain helpers in
do_refine_retval_range(). Teach the verifier to recognize that smin/s32_min
value is also bounded. When both smin and smax bounds fit into 32-bit
subregister the verifier can propagate those bounds.

Fixes: 822cea084c9a ("bpf: Verifier, do explicit ALU32 bounds tracking")
Reported-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
Acked-by: John Fastabend <john.fastabend@gmail.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/verifier.c