Commit a00ed843 authored by Yonghong Song's avatar Yonghong Song Committed by Alexei Starovoitov

bpf: Always return corresponding btf_type in __get_type_size()

Currently in funciton __get_type_size(), the corresponding
btf_type is returned only in invalid cases. Let us always
return btf_type regardless of valid or invalid cases.
Such a new functionality will be used in subsequent patches.
Signed-off-by: default avatarYonghong Song <yhs@fb.com>
Link: https://lore.kernel.org/r/20220807175116.4179242-1-yhs@fb.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 11b91485
...@@ -5864,26 +5864,25 @@ bool btf_struct_ids_match(struct bpf_verifier_log *log, ...@@ -5864,26 +5864,25 @@ bool btf_struct_ids_match(struct bpf_verifier_log *log,
} }
static int __get_type_size(struct btf *btf, u32 btf_id, static int __get_type_size(struct btf *btf, u32 btf_id,
const struct btf_type **bad_type) const struct btf_type **ret_type)
{ {
const struct btf_type *t; const struct btf_type *t;
*ret_type = btf_type_by_id(btf, 0);
if (!btf_id) if (!btf_id)
/* void */ /* void */
return 0; return 0;
t = btf_type_by_id(btf, btf_id); t = btf_type_by_id(btf, btf_id);
while (t && btf_type_is_modifier(t)) while (t && btf_type_is_modifier(t))
t = btf_type_by_id(btf, t->type); t = btf_type_by_id(btf, t->type);
if (!t) { if (!t)
*bad_type = btf_type_by_id(btf, 0);
return -EINVAL; return -EINVAL;
} *ret_type = t;
if (btf_type_is_ptr(t)) if (btf_type_is_ptr(t))
/* kernel size of pointer. Not BPF's size of pointer*/ /* kernel size of pointer. Not BPF's size of pointer*/
return sizeof(void *); return sizeof(void *);
if (btf_type_is_int(t) || btf_is_any_enum(t)) if (btf_type_is_int(t) || btf_is_any_enum(t))
return t->size; return t->size;
*bad_type = t;
return -EINVAL; return -EINVAL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment