On Thu, Mar 21, 2024 at 5:00 PM Andrii Nakryiko <andrii@xxxxxxxxxx> wrote: > + > +static error_t parse_arg(int key, char *arg, struct argp_state *state) > +{ > + long ret; > + > + switch (key) { > + case ARG_TRIG_BATCH_ITERS: > + ret = strtol(arg, NULL, 10); > + if (ret < 1 || ret > UINT_MAX) { > + fprintf(stderr, "invalid --trig-batch-iters value"); > + argp_usage(state); > + } ... > +const volatile int batch_iters = 0; > + > +SEC("raw_tp") > +int trigger_count(void *ctx) > +{ > + int i; > + > + for (i = 0; i < batch_iters; i++) > + inc_counter(); so it's passing the verifier due to bounded loop logic, right? Then let's limit cmd line arg to something small instead of UINT_MAX. Otherwise users will be surprised by the errors coming from --trig-batch-iters 500k