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: Yonghong Song <yhs@fb.com> Link: https://lore.kernel.org/r/20220807175116.4179242-1-yhs@fb.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
11b9148590
commit
a00ed84301
@ -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,
|
||||
const struct btf_type **bad_type)
|
||||
const struct btf_type **ret_type)
|
||||
{
|
||||
const struct btf_type *t;
|
||||
|
||||
*ret_type = btf_type_by_id(btf, 0);
|
||||
if (!btf_id)
|
||||
/* void */
|
||||
return 0;
|
||||
t = btf_type_by_id(btf, btf_id);
|
||||
while (t && btf_type_is_modifier(t))
|
||||
t = btf_type_by_id(btf, t->type);
|
||||
if (!t) {
|
||||
*bad_type = btf_type_by_id(btf, 0);
|
||||
if (!t)
|
||||
return -EINVAL;
|
||||
}
|
||||
*ret_type = t;
|
||||
if (btf_type_is_ptr(t))
|
||||
/* kernel size of pointer. Not BPF's size of pointer*/
|
||||
return sizeof(void *);
|
||||
if (btf_type_is_int(t) || btf_is_any_enum(t))
|
||||
return t->size;
|
||||
*bad_type = t;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user