On Wed, Nov 15, 2023 at 9:18 PM Eduard Zingerman <eddyz87@xxxxxxxxx> wrote: > > A test case to verify that imprecise scalars widening is applied to > callback bodies on repetative iteration. typo: repetitive? repeating? successive? subsequent? > > Signed-off-by: Eduard Zingerman <eddyz87@xxxxxxxxx> > --- > .../bpf/progs/verifier_iterating_callbacks.c | 20 +++++++++++++++++++ > 1 file changed, 20 insertions(+) > > diff --git a/tools/testing/selftests/bpf/progs/verifier_iterating_callbacks.c b/tools/testing/selftests/bpf/progs/verifier_iterating_callbacks.c > index fa9429f77a81..598c1e984b26 100644 > --- a/tools/testing/selftests/bpf/progs/verifier_iterating_callbacks.c > +++ b/tools/testing/selftests/bpf/progs/verifier_iterating_callbacks.c > @@ -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]; would the test be a bit more interesting if you use loop_ctx.i here? `return choice_arr[loop_ctx.i & 1];` ? > +} > + > static int loop_detection_cb(__u32 idx, struct num_context *ctx) > { > for (;;) {} > -- > 2.42.0 >