diff options
| author | Alexei Starovoitov <ast@kernel.org> | 2018-06-02 11:22:37 -0700 |
|---|---|---|
| committer | Alexei Starovoitov <ast@kernel.org> | 2018-06-02 11:22:37 -0700 |
| commit | 25c1013e0464340aeb090a11c6d0b154bc52afd7 (patch) | |
| tree | e567188ab587107f05d7faebe771de2e50ff241a /kernel | |
| parent | b4b21a05b8fe7288087691e993c913a41fd6eb4b (diff) | |
| parent | 8175383f2320dbc1b4e803d857ed499ed3e76199 (diff) | |
Merge branch 'btf-fixes'
Martin KaFai Lau says:
====================
====================
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/bpf/btf.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c index 3d20aa1f4b54..8653ab004c73 100644 --- a/kernel/bpf/btf.c +++ b/kernel/bpf/btf.c @@ -1286,8 +1286,27 @@ static struct btf_kind_operations ptr_ops = { .seq_show = btf_ptr_seq_show, }; +static s32 btf_fwd_check_meta(struct btf_verifier_env *env, + const struct btf_type *t, + u32 meta_left) +{ + if (btf_type_vlen(t)) { + btf_verifier_log_type(env, t, "vlen != 0"); + return -EINVAL; + } + + if (t->type) { + btf_verifier_log_type(env, t, "type != 0"); + return -EINVAL; + } + + btf_verifier_log_type(env, t, NULL); + + return 0; +} + static struct btf_kind_operations fwd_ops = { - .check_meta = btf_ref_type_check_meta, + .check_meta = btf_fwd_check_meta, .resolve = btf_df_resolve, .check_member = btf_df_check_member, .log_details = btf_ref_type_log, @@ -1342,6 +1361,11 @@ static s32 btf_array_check_meta(struct btf_verifier_env *env, return -EINVAL; } + if (t->size) { + btf_verifier_log_type(env, t, "size != 0"); + return -EINVAL; + } + /* Array elem type and index type cannot be in type void, * so !array->type and !array->index_type are not allowed. */ |
