bpf: Always return corresponding btf_type in __get_type_size()
authorYonghong Song <yhs@fb.com>
Sun, 7 Aug 2022 17:51:16 +0000 (10:51 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 9 Aug 2022 17:30:45 +0000 (10:30 -0700)
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>
kernel/bpf/btf.c

index d3e4c86..903719b 100644 (file)
@@ -5864,26 +5864,25 @@ again:
 }
 
 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;
 }