Commit a7036191 authored by Daniel Borkmann's avatar Daniel Borkmann

bpf: No need to simulate speculative domain for immediates

In 801c6058 ("bpf: Fix leakage of uninitialized bpf stack under
speculation") we replaced masking logic with direct loads of immediates
if the register is a known constant. Given in this case we do not apply
any masking, there is also no reason for the operation to be truncated
under the speculative domain.

Therefore, there is also zero reason for the verifier to branch-off and
simulate this case, it only needs to do it for unknown but bounded scalars.
As a side-effect, this also enables few test cases that were previously
rejected due to simulation under zero truncation.
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Reviewed-by: default avatarPiotr Krysiuk <piotras@gmail.com>
Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent bb01a1bb
...@@ -6545,8 +6545,12 @@ static int sanitize_ptr_alu(struct bpf_verifier_env *env, ...@@ -6545,8 +6545,12 @@ static int sanitize_ptr_alu(struct bpf_verifier_env *env,
/* If we're in commit phase, we're done here given we already /* If we're in commit phase, we're done here given we already
* pushed the truncated dst_reg into the speculative verification * pushed the truncated dst_reg into the speculative verification
* stack. * stack.
*
* Also, when register is a known constant, we rewrite register-based
* operation to immediate-based, and thus do not need masking (and as
* a consequence, do not need to simulate the zero-truncation either).
*/ */
if (commit_window) if (commit_window || off_is_imm)
return 0; return 0;
/* Simulate and find potential out-of-bounds access under /* Simulate and find potential out-of-bounds access under
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment