libbpf: Allow use of feature cache for non-token cases

Allow bpf object feat_cache assignment in BPF selftests
to simulate missing features via inclusion of libbpf_internal.h
and use of bpf_object_set_feat_cache() and bpf_object__sanitize_btf() to
test BTF sanitization for cases where missing features are simulated.

Signed-off-by: Alan Maguire <alan.maguire@oracle.com>
Link: https://lore.kernel.org/r/20260408165735.843763-2-alan.maguire@oracle.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
Alan Maguire authored and Andrii Nakryiko committed 2026-05-30 20:45:51 -07:00
1 parent dd92bef7f6
commit 63cfece8d9
2 files changed
+12 -3

No files matched your search

+10 -2
View File
@@ -3145,7 +3145,7 @@ static bool btf_needs_sanitization(struct bpf_object *obj)
!has_layout;
}
static struct btf *bpf_object__sanitize_btf(struct bpf_object *obj, struct btf *orig_btf)
struct btf *bpf_object__sanitize_btf(struct bpf_object *obj, struct btf *orig_btf)
{
bool has_func_global = kernel_supports(obj, FEAT_BTF_GLOBAL_FUNC);
bool has_datasec = kernel_supports(obj, FEAT_BTF_DATASEC);
@@ -5203,12 +5203,20 @@ bool kernel_supports(const struct bpf_object *obj, enum kern_feature_id feat_id)
*/
return true;
if (obj->token_fd)
if (obj->feat_cache)
return feat_supported(obj->feat_cache, feat_id);
return feat_supported(NULL, feat_id);
}
/* Used in testing to simulate missing features. */
void bpf_object_set_feat_cache(struct bpf_object *obj, struct kern_feature_cache *cache)
{
if (obj->feat_cache)
free(obj->feat_cache);
obj->feat_cache = cache;
}
static bool map_is_reuse_compat(const struct bpf_map *map, int map_fd)
{
struct bpf_map_info map_info;