bpf: Change btf_record_find enum parameter to field_mask
authorDave Marchevsky <davemarchevsky@fb.com>
Thu, 9 Mar 2023 18:01:08 +0000 (10:01 -0800)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 10 Mar 2023 20:16:37 +0000 (12:16 -0800)
btf_record_find's 3rd parameter can be multiple enum btf_field_type's
masked together. The function is called with BPF_KPTR in two places in
verifier.c, so it works with masked values already.

Signed-off-by: Dave Marchevsky <davemarchevsky@fb.com>
Link: https://lore.kernel.org/r/20230309180111.1618459-4-davemarchevsky@fb.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
include/linux/bpf.h
kernel/bpf/syscall.c

index e64ff1e89fb2a3b912a7c59fcc3e75424604cf9e..3a38db315f7f6c9657bfac423e9b18abfa596155 100644 (file)
@@ -1925,7 +1925,7 @@ void bpf_prog_free_id(struct bpf_prog *prog);
 void bpf_map_free_id(struct bpf_map *map);
 
 struct btf_field *btf_record_find(const struct btf_record *rec,
-                                 u32 offset, enum btf_field_type type);
+                                 u32 offset, u32 field_mask);
 void btf_record_free(struct btf_record *rec);
 void bpf_map_free_record(struct bpf_map *map);
 struct btf_record *btf_record_dup(const struct btf_record *rec);
index f406dfa137924a1da1613dc3415d0eb5fe90b071..cc4b7684910cb3d2ee529aad83c0fc55311048ce 100644 (file)
@@ -520,14 +520,14 @@ static int btf_field_cmp(const void *a, const void *b)
 }
 
 struct btf_field *btf_record_find(const struct btf_record *rec, u32 offset,
-                                 enum btf_field_type type)
+                                 u32 field_mask)
 {
        struct btf_field *field;
 
-       if (IS_ERR_OR_NULL(rec) || !(rec->field_mask & type))
+       if (IS_ERR_OR_NULL(rec) || !(rec->field_mask & field_mask))
                return NULL;
        field = bsearch(&offset, rec->fields, rec->cnt, sizeof(rec->fields[0]), btf_field_cmp);
-       if (!field || !(field->type & type))
+       if (!field || !(field->type & field_mask))
                return NULL;
        return field;
 }