On Mon, Jan 09, 2023 at 08:19:31AM -0800, Song Liu wrote: > On Mon, Jan 9, 2023 at 6:37 AM Jiri Olsa <jolsa@xxxxxxxxxx> wrote: > > > > Currently we allow to load any tracing program as sleepable, > > but BPF_TRACE_RAW_TP can't sleep. Making the check explicit > > for tracing programs attach types, so sleepable BPF_TRACE_RAW_TP > > will fail to load. > > > > Updating the verifier error to mention iter programs as well. > > > > Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx> > > --- > > kernel/bpf/verifier.c | 17 ++++++++++++++--- > > 1 file changed, 14 insertions(+), 3 deletions(-) > > > > diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c > > index fa4c911603e9..121a64ee841a 100644 > > --- a/kernel/bpf/verifier.c > > +++ b/kernel/bpf/verifier.c > > @@ -16743,6 +16743,18 @@ BTF_ID(func, rcu_read_unlock_strict) > > #endif > > BTF_SET_END(btf_id_deny) > > > > +static int can_be_sleepable(struct bpf_prog *prog) > > Shall we return bool? ok > > > +{ > > + if (prog->type == BPF_PROG_TYPE_TRACING) { > > + return prog->expected_attach_type == BPF_TRACE_FENTRY || > > + prog->expected_attach_type == BPF_TRACE_FEXIT || > > + prog->expected_attach_type == BPF_MODIFY_RETURN || > > + prog->expected_attach_type == BPF_TRACE_ITER; > > + } > > + return prog->type == BPF_PROG_TYPE_LSM || > > + prog->type == BPF_PROG_TYPE_KPROBE; > > +} > > + > > static int check_attach_btf_id(struct bpf_verifier_env *env) > > { > > struct bpf_prog *prog = env->prog; > > @@ -16761,9 +16773,8 @@ static int check_attach_btf_id(struct bpf_verifier_env *env) > > return -EINVAL; > > } > > > > - if (prog->aux->sleepable && prog->type != BPF_PROG_TYPE_TRACING && > > - prog->type != BPF_PROG_TYPE_LSM && prog->type != BPF_PROG_TYPE_KPROBE) { > > - verbose(env, "Only fentry/fexit/fmod_ret, lsm, and kprobe/uprobe programs can be sleepable\n"); > > + if (prog->aux->sleepable && !can_be_sleepable(prog)) { > > + verbose(env, "Only fentry/fexit/fmod_ret, lsm, iter and kprobe/uprobe programs can be sleepable\n"); > > return -EINVAL; > > } > > Maybe add a verifier test for this? ok, will add thanks, jirka