Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

bpf: add support for fixed-size memory pointer returns for kfuncs

Support direct fixed-size (and for now, read-only) memory access when
kfunc's return type is a pointer to non-struct type. Calculate type size
and let BPF program access that many bytes directly. This is crucial for
numbers iterator.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/r/20230302235015.2044271-13-andrii@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>

authored by

Andrii Nakryiko and committed by
Alexei Starovoitov
f4b4eee6 a461f5ad

+8
+8
kernel/bpf/verifier.c
··· 10337 10337 } 10338 10338 } else if (!__btf_type_is_struct(ptr_type)) { 10339 10339 if (!meta.r0_size) { 10340 + __u32 sz; 10341 + 10342 + if (!IS_ERR(btf_resolve_size(desc_btf, ptr_type, &sz))) { 10343 + meta.r0_size = sz; 10344 + meta.r0_rdonly = true; 10345 + } 10346 + } 10347 + if (!meta.r0_size) { 10340 10348 ptr_type_name = btf_name_by_offset(desc_btf, 10341 10349 ptr_type->name_off); 10342 10350 verbose(env,