Message ID | cover.1704422454.git.dxu@dxuuu.xyz |
---|---|
Headers | show |
Series | Annotate kfuncs in .BTF_ids section | expand |
On Thu, Jan 04, 2024 at 07:45:49PM -0700, Daniel Xu wrote: SNIP > diff --git a/fs/verity/measure.c b/fs/verity/measure.c > index bf7a5f4cccaf..3969d54158d1 100644 > --- a/fs/verity/measure.c > +++ b/fs/verity/measure.c > @@ -159,9 +159,9 @@ __bpf_kfunc int bpf_get_fsverity_digest(struct file *file, struct bpf_dynptr_ker > > __bpf_kfunc_end_defs(); > > -BTF_SET8_START(fsverity_set_ids) > +BTF_KFUNCS_START(fsverity_set_ids) > BTF_ID_FLAGS(func, bpf_get_fsverity_digest, KF_TRUSTED_ARGS) > -BTF_SET8_END(fsverity_set_ids) > +BTF_KFUNCS_END(fsverity_set_ids) > > static int bpf_get_fsverity_digest_filter(const struct bpf_prog *prog, u32 kfunc_id) > { > diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c > index 51e8b4bee0c8..8cc718f37a9d 100644 > --- a/kernel/bpf/btf.c > +++ b/kernel/bpf/btf.c > @@ -7802,6 +7802,10 @@ int register_btf_kfunc_id_set(enum bpf_prog_type prog_type, > { > enum btf_kfunc_hook hook; > > + /* All kfuncs need to be tagged as such in BTF */ > + if (WARN_ON(!(kset->set->flags & BTF_SET8_KFUNCS))) > + return -EINVAL; having the warning for module with wrong set8 flags seems wrong to me, I think we should trigger the warn only for kernel calls.. by adding kset->owner check in the condition above jirka > + > hook = bpf_prog_type_to_kfunc_hook(prog_type); > return __register_btf_kfunc_id_set(hook, kset); > } SNIP
On Fri, Jan 05, 2024 at 09:55:43AM -0700, Daniel Xu wrote: > On Fri, Jan 05, 2024 at 04:11:33PM +0100, Jiri Olsa wrote: > > On Thu, Jan 04, 2024 at 07:45:49PM -0700, Daniel Xu wrote: > > > > SNIP > > > > > diff --git a/fs/verity/measure.c b/fs/verity/measure.c > > > index bf7a5f4cccaf..3969d54158d1 100644 > > > --- a/fs/verity/measure.c > > > +++ b/fs/verity/measure.c > > > @@ -159,9 +159,9 @@ __bpf_kfunc int bpf_get_fsverity_digest(struct file *file, struct bpf_dynptr_ker > > > > > > __bpf_kfunc_end_defs(); > > > > > > -BTF_SET8_START(fsverity_set_ids) > > > +BTF_KFUNCS_START(fsverity_set_ids) > > > BTF_ID_FLAGS(func, bpf_get_fsverity_digest, KF_TRUSTED_ARGS) > > > -BTF_SET8_END(fsverity_set_ids) > > > +BTF_KFUNCS_END(fsverity_set_ids) > > > > > > static int bpf_get_fsverity_digest_filter(const struct bpf_prog *prog, u32 kfunc_id) > > > { > > > diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c > > > index 51e8b4bee0c8..8cc718f37a9d 100644 > > > --- a/kernel/bpf/btf.c > > > +++ b/kernel/bpf/btf.c > > > @@ -7802,6 +7802,10 @@ int register_btf_kfunc_id_set(enum bpf_prog_type prog_type, > > > { > > > enum btf_kfunc_hook hook; > > > > > > + /* All kfuncs need to be tagged as such in BTF */ > > > + if (WARN_ON(!(kset->set->flags & BTF_SET8_KFUNCS))) > > > + return -EINVAL; > > > > having the warning for module with wrong set8 flags seems wrong to me, > > I think we should trigger the warn only for kernel calls.. by adding > > kset->owner check in the condition above > > Just checking: > > The reasoning is that =m and out-of-tree modules can and should check > return code, right? > > And =y modules or vmlinux-based registrations do not check return code, > so WARN() is necessary? > > If so, I'd agree. right, I was also concerned we could flood console with loading module that just uses wrong set8.. perhaps we could just use WARN_ON_ONCE with no additional checks jirka