mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
selftests/bpf: test widening for iterating callbacks
A test case to verify that imprecise scalars widening is applied to callback entering state, when callback call is simulated repeatedly. Signed-off-by: Eduard Zingerman <eddyz87@gmail.com> Link: https://lore.kernel.org/r/20231121020701.26440-10-eddyz87@gmail.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
cafe2c2150
commit
9f3330aa64
1 changed files with 20 additions and 0 deletions
|
@ -25,6 +25,7 @@ struct buf_context {
|
|||
|
||||
struct num_context {
|
||||
__u64 i;
|
||||
__u64 j;
|
||||
};
|
||||
|
||||
__u8 choice_arr[2] = { 0, 1 };
|
||||
|
@ -69,6 +70,25 @@ int unsafe_on_zero_iter(void *unused)
|
|||
return choice_arr[loop_ctx.i];
|
||||
}
|
||||
|
||||
static int widening_cb(__u32 idx, struct num_context *ctx)
|
||||
{
|
||||
++ctx->i;
|
||||
return 0;
|
||||
}
|
||||
|
||||
SEC("?raw_tp")
|
||||
__success
|
||||
int widening(void *unused)
|
||||
{
|
||||
struct num_context loop_ctx = { .i = 0, .j = 1 };
|
||||
|
||||
bpf_loop(100, widening_cb, &loop_ctx, 0);
|
||||
/* loop_ctx.j is not changed during callback iteration,
|
||||
* verifier should not apply widening to it.
|
||||
*/
|
||||
return choice_arr[loop_ctx.j];
|
||||
}
|
||||
|
||||
static int loop_detection_cb(__u32 idx, struct num_context *ctx)
|
||||
{
|
||||
for (;;) {}
|
||||
|
|
Loading…
Add table
Reference in a new issue