Walking a trusted struct path yields a trusted dentry - a live path never carries a NULL dentry - so BPF programs can use it with kfuncs that require trusted arguments. Signed-off-by: Song Liu [justin: carried only the verifier.c hunk of the original patch, trusted instead of trusted-or-null] Signed-off-by: Justin Suess --- kernel/bpf/verifier.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index fd3c0206bd67..24ec4b037de7 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -6300,6 +6300,10 @@ BTF_TYPE_SAFE_TRUSTED(struct scx_sub_detach_args) { struct sched_ext_ops *ops; }; +BTF_TYPE_SAFE_TRUSTED(struct path) { + struct dentry *dentry; +}; + BTF_TYPE_SAFE_TRUSTED_OR_NULL(struct dentry) { struct inode *d_inode; }; @@ -6352,6 +6356,7 @@ static bool type_is_trusted(struct bpf_verifier_env *env, BTF_TYPE_EMIT(BTF_TYPE_SAFE_TRUSTED(struct scx_cpu_release_args)); BTF_TYPE_EMIT(BTF_TYPE_SAFE_TRUSTED(struct scx_sub_attach_args)); BTF_TYPE_EMIT(BTF_TYPE_SAFE_TRUSTED(struct scx_sub_detach_args)); + BTF_TYPE_EMIT(BTF_TYPE_SAFE_TRUSTED(struct path)); return btf_nested_type_is_trusted(&env->log, reg, field_name, btf_id, "__safe_trusted"); } -- 2.55.0