diff options
author | Jiri Olsa <jolsa@kernel.org> | 2020-08-25 21:21:16 +0200 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2020-08-26 00:37:41 +0200 |
commit | dafe58fc1917a96c657a0f56a12f262e5d9fb324 (patch) | |
tree | c46799d9c81e5e9622d8b7d19d6e46ad33a1e1de /kernel | |
parent | bpf: Add type_id pointer as argument to __btf_resolve_size (diff) | |
download | linux-dafe58fc1917a96c657a0f56a12f262e5d9fb324.tar.xz linux-dafe58fc1917a96c657a0f56a12f262e5d9fb324.zip |
bpf: Remove recursion call in btf_struct_access
Andrii suggested we can simply jump to again label
instead of making recursion call.
Suggested-by: Andrii Nakryiko <andriin@fb.com>
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Andrii Nakryiko <andriin@fb.com>
Link: https://lore.kernel.org/bpf/20200825192124.710397-7-jolsa@kernel.org
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/bpf/btf.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c index ee0e2a5e6c88..4488c5b03941 100644 --- a/kernel/bpf/btf.c +++ b/kernel/bpf/btf.c @@ -3931,14 +3931,13 @@ again: /* Only allow structure for now, can be relaxed for * other types later. */ - elem_type = btf_type_skip_modifiers(btf_vmlinux, - array_elem->type, NULL); - if (!btf_type_is_struct(elem_type)) + t = btf_type_skip_modifiers(btf_vmlinux, array_elem->type, + NULL); + if (!btf_type_is_struct(t)) goto error; - off = (off - moff) % elem_type->size; - return btf_struct_access(log, elem_type, off, size, atype, - next_btf_id); + off = (off - moff) % t->size; + goto again; error: bpf_log(log, "access beyond struct %s at off %u size %u\n", |