Skip to content

Commit

Permalink
bpf: Switch btf_parse_vmlinux to btf_find_by_name_kind
Browse files Browse the repository at this point in the history
btf_parse_vmlinux() implements manual search for struct bpf_ctx_convert
since at the time of implementing btf_find_by_name_kind() was not
available.

Later btf_find_by_name_kind() was introduced in 27ae799 ("bpf:
Introduce BPF_PROG_TYPE_STRUCT_OPS"). It provides similar search
functionality and can be leveraged in btf_parse_vmlinux(). Do it.

Signed-off-by: Andrey Ignatov <[email protected]>
Signed-off-by: Daniel Borkmann <[email protected]>
Acked-by: Andrii Nakryiko <[email protected]>
Acked-by: John Fastabend <[email protected]>
Acked-by: Martin KaFai Lau <[email protected]>
Link: https://lore.kernel.org/bpf/6e12d5c3e8a3d552925913ef73a695dd1bb27800.1592600985.git.rdna@fb.com
  • Loading branch information
rdna authored and borkmann committed Jun 22, 2020
1 parent bb8dc26 commit a2d0d62
Showing 1 changed file with 6 additions and 17 deletions.
23 changes: 6 additions & 17 deletions kernel/bpf/btf.c
Original file line number Diff line number Diff line change
Expand Up @@ -3591,7 +3591,7 @@ struct btf *btf_parse_vmlinux(void)
struct btf_verifier_env *env = NULL;
struct bpf_verifier_log *log;
struct btf *btf = NULL;
int err, i;
int err, btf_id;

env = kzalloc(sizeof(*env), GFP_KERNEL | __GFP_NOWARN);
if (!env)
Expand Down Expand Up @@ -3625,24 +3625,13 @@ struct btf *btf_parse_vmlinux(void)
goto errout;

/* find struct bpf_ctx_convert for type checking later */
for (i = 1; i <= btf->nr_types; i++) {
const struct btf_type *t;
const char *tname;

t = btf_type_by_id(btf, i);
if (!__btf_type_is_struct(t))
continue;
tname = __btf_name_by_offset(btf, t->name_off);
if (!strcmp(tname, "bpf_ctx_convert")) {
/* btf_parse_vmlinux() runs under bpf_verifier_lock */
bpf_ctx_convert.t = t;
break;
}
}
if (i > btf->nr_types) {
err = -ENOENT;
btf_id = btf_find_by_name_kind(btf, "bpf_ctx_convert", BTF_KIND_STRUCT);
if (btf_id < 0) {
err = btf_id;
goto errout;
}
/* btf_parse_vmlinux() runs under bpf_verifier_lock */
bpf_ctx_convert.t = btf_type_by_id(btf, btf_id);

bpf_struct_ops_init(btf, log);

Expand Down

0 comments on commit a2d0d62

Please sign in to comment.