Lines Matching refs:t
223 const struct btf_type *t; member
281 const struct btf_type *t,
294 const struct btf_type *t);
295 void (*seq_show)(const struct btf *btf, const struct btf_type *t,
304 const struct btf_type *t, u32 type_id);
306 static bool btf_type_is_modifier(const struct btf_type *t) in btf_type_is_modifier() argument
318 switch (BTF_INFO_KIND(t->info)) { in btf_type_is_modifier()
329 bool btf_type_is_void(const struct btf_type *t) in btf_type_is_void() argument
331 return t == &btf_void; in btf_type_is_void()
334 static bool btf_type_is_fwd(const struct btf_type *t) in btf_type_is_fwd() argument
336 return BTF_INFO_KIND(t->info) == BTF_KIND_FWD; in btf_type_is_fwd()
339 static bool btf_type_is_func(const struct btf_type *t) in btf_type_is_func() argument
341 return BTF_INFO_KIND(t->info) == BTF_KIND_FUNC; in btf_type_is_func()
344 static bool btf_type_is_func_proto(const struct btf_type *t) in btf_type_is_func_proto() argument
346 return BTF_INFO_KIND(t->info) == BTF_KIND_FUNC_PROTO; in btf_type_is_func_proto()
349 static bool btf_type_nosize(const struct btf_type *t) in btf_type_nosize() argument
351 return btf_type_is_void(t) || btf_type_is_fwd(t) || in btf_type_nosize()
352 btf_type_is_func(t) || btf_type_is_func_proto(t); in btf_type_nosize()
355 static bool btf_type_nosize_or_null(const struct btf_type *t) in btf_type_nosize_or_null() argument
357 return !t || btf_type_nosize(t); in btf_type_nosize_or_null()
363 static bool btf_type_is_struct(const struct btf_type *t) in btf_type_is_struct() argument
365 u8 kind = BTF_INFO_KIND(t->info); in btf_type_is_struct()
370 static bool __btf_type_is_struct(const struct btf_type *t) in __btf_type_is_struct() argument
372 return BTF_INFO_KIND(t->info) == BTF_KIND_STRUCT; in __btf_type_is_struct()
375 static bool btf_type_is_array(const struct btf_type *t) in btf_type_is_array() argument
377 return BTF_INFO_KIND(t->info) == BTF_KIND_ARRAY; in btf_type_is_array()
380 static bool btf_type_is_ptr(const struct btf_type *t) in btf_type_is_ptr() argument
382 return BTF_INFO_KIND(t->info) == BTF_KIND_PTR; in btf_type_is_ptr()
385 static bool btf_type_is_int(const struct btf_type *t) in btf_type_is_int() argument
387 return BTF_INFO_KIND(t->info) == BTF_KIND_INT; in btf_type_is_int()
390 static bool btf_type_is_var(const struct btf_type *t) in btf_type_is_var() argument
392 return BTF_INFO_KIND(t->info) == BTF_KIND_VAR; in btf_type_is_var()
395 static bool btf_type_is_datasec(const struct btf_type *t) in btf_type_is_datasec() argument
397 return BTF_INFO_KIND(t->info) == BTF_KIND_DATASEC; in btf_type_is_datasec()
403 static bool btf_type_is_resolve_source_only(const struct btf_type *t) in btf_type_is_resolve_source_only() argument
405 return btf_type_is_var(t) || in btf_type_is_resolve_source_only()
406 btf_type_is_datasec(t); in btf_type_is_resolve_source_only()
425 static bool btf_type_needs_resolve(const struct btf_type *t) in btf_type_needs_resolve() argument
427 return btf_type_is_modifier(t) || in btf_type_needs_resolve()
428 btf_type_is_ptr(t) || in btf_type_needs_resolve()
429 btf_type_is_struct(t) || in btf_type_needs_resolve()
430 btf_type_is_array(t) || in btf_type_needs_resolve()
431 btf_type_is_var(t) || in btf_type_needs_resolve()
432 btf_type_is_datasec(t); in btf_type_needs_resolve()
436 static bool btf_type_has_size(const struct btf_type *t) in btf_type_has_size() argument
438 switch (BTF_INFO_KIND(t->info)) { in btf_type_has_size()
464 static u16 btf_type_vlen(const struct btf_type *t) in btf_type_vlen() argument
466 return BTF_INFO_VLEN(t->info); in btf_type_vlen()
469 static bool btf_type_kflag(const struct btf_type *t) in btf_type_kflag() argument
471 return BTF_INFO_KFLAG(t->info); in btf_type_kflag()
488 static u32 btf_type_int(const struct btf_type *t) in btf_type_int() argument
490 return *(u32 *)(t + 1); in btf_type_int()
493 static const struct btf_array *btf_type_array(const struct btf_type *t) in btf_type_array() argument
495 return (const struct btf_array *)(t + 1); in btf_type_array()
498 static const struct btf_member *btf_type_member(const struct btf_type *t) in btf_type_member() argument
500 return (const struct btf_member *)(t + 1); in btf_type_member()
503 static const struct btf_enum *btf_type_enum(const struct btf_type *t) in btf_type_enum() argument
505 return (const struct btf_enum *)(t + 1); in btf_type_enum()
508 static const struct btf_var *btf_type_var(const struct btf_type *t) in btf_type_var() argument
510 return (const struct btf_var *)(t + 1); in btf_type_var()
513 static const struct btf_var_secinfo *btf_type_var_secinfo(const struct btf_type *t) in btf_type_var_secinfo() argument
515 return (const struct btf_var_secinfo *)(t + 1); in btf_type_var_secinfo()
518 static const struct btf_kind_operations *btf_type_ops(const struct btf_type *t) in btf_type_ops() argument
520 return kind_ops[BTF_INFO_KIND(t->info)]; in btf_type_ops()
604 static bool btf_type_int_is_regular(const struct btf_type *t) in btf_type_int_is_regular() argument
609 int_data = btf_type_int(t); in btf_type_int_is_regular()
631 const struct btf_type *t; in btf_member_is_reg_int() local
636 t = btf_type_id_size(btf, &id, NULL); in btf_member_is_reg_int()
637 if (!t || !btf_type_is_int(t)) in btf_member_is_reg_int()
640 int_data = btf_type_int(t); in btf_member_is_reg_int()
689 const struct btf_type *t, in __btf_verifier_log_type() argument
694 u8 kind = BTF_INFO_KIND(t->info); in __btf_verifier_log_type()
704 __btf_name_by_offset(btf, t->name_off), in __btf_verifier_log_type()
708 btf_type_ops(t)->log_details(env, t); in __btf_verifier_log_type()
720 #define btf_verifier_log_type(env, t, ...) \ argument
721 __btf_verifier_log_type((env), (t), true, __VA_ARGS__)
722 #define btf_verifier_log_basic(env, t, ...) \ argument
723 __btf_verifier_log_type((env), (t), false, __VA_ARGS__)
817 static int btf_add_type(struct btf_verifier_env *env, struct btf_type *t) in btf_add_type() argument
856 btf->types[++(btf->nr_types)] = t; in btf_add_type()
996 const struct btf_type *t, u32 type_id) in env_stack_push() argument
1009 v->t = t; in env_stack_push()
1014 if (btf_type_is_ptr(t)) in env_stack_push()
1016 else if (btf_type_is_struct(t) || btf_type_is_array(t)) in env_stack_push()
1142 btf_verifier_log_basic(env, v->t, "Unsupported resolve"); in btf_df_resolve()
1146 static void btf_df_seq_show(const struct btf *btf, const struct btf_type *t, in btf_df_seq_show() argument
1150 seq_printf(m, "<unsupported kind:%u>", BTF_INFO_KIND(t->info)); in btf_df_seq_show()
1248 const struct btf_type *t, in btf_int_check_meta() argument
1255 btf_verifier_log_basic(env, t, in btf_int_check_meta()
1261 if (btf_type_vlen(t)) { in btf_int_check_meta()
1262 btf_verifier_log_type(env, t, "vlen != 0"); in btf_int_check_meta()
1266 if (btf_type_kflag(t)) { in btf_int_check_meta()
1267 btf_verifier_log_type(env, t, "Invalid btf_info kind_flag"); in btf_int_check_meta()
1271 int_data = btf_type_int(t); in btf_int_check_meta()
1273 btf_verifier_log_basic(env, t, "Invalid int_data:%x", in btf_int_check_meta()
1281 btf_verifier_log_type(env, t, "nr_bits exceeds %zu", in btf_int_check_meta()
1286 if (BITS_ROUNDUP_BYTES(nr_bits) > t->size) { in btf_int_check_meta()
1287 btf_verifier_log_type(env, t, "nr_bits exceeds type_size"); in btf_int_check_meta()
1302 btf_verifier_log_type(env, t, "Unsupported encoding"); in btf_int_check_meta()
1306 btf_verifier_log_type(env, t, NULL); in btf_int_check_meta()
1312 const struct btf_type *t) in btf_int_log() argument
1314 int int_data = btf_type_int(t); in btf_int_log()
1318 t->size, BTF_INT_OFFSET(int_data), in btf_int_log()
1414 const struct btf_type *t, in btf_int_bits_seq_show() argument
1418 u32 int_data = btf_type_int(t); in btf_int_bits_seq_show()
1432 static void btf_int_seq_show(const struct btf *btf, const struct btf_type *t, in btf_int_seq_show() argument
1436 u32 int_data = btf_type_int(t); in btf_int_seq_show()
1443 btf_int_bits_seq_show(btf, t, data, bits_offset, m); in btf_int_seq_show()
1476 btf_int_bits_seq_show(btf, t, data, bits_offset, m); in btf_int_seq_show()
1566 const struct btf_type *t, in btf_ref_type_check_meta() argument
1569 if (btf_type_vlen(t)) { in btf_ref_type_check_meta()
1570 btf_verifier_log_type(env, t, "vlen != 0"); in btf_ref_type_check_meta()
1574 if (btf_type_kflag(t)) { in btf_ref_type_check_meta()
1575 btf_verifier_log_type(env, t, "Invalid btf_info kind_flag"); in btf_ref_type_check_meta()
1579 if (!BTF_TYPE_ID_VALID(t->type)) { in btf_ref_type_check_meta()
1580 btf_verifier_log_type(env, t, "Invalid type_id"); in btf_ref_type_check_meta()
1587 if (BTF_INFO_KIND(t->info) == BTF_KIND_TYPEDEF) { in btf_ref_type_check_meta()
1588 if (!t->name_off || in btf_ref_type_check_meta()
1589 !btf_name_valid_identifier(env->btf, t->name_off)) { in btf_ref_type_check_meta()
1590 btf_verifier_log_type(env, t, "Invalid name"); in btf_ref_type_check_meta()
1594 if (t->name_off) { in btf_ref_type_check_meta()
1595 btf_verifier_log_type(env, t, "Invalid name"); in btf_ref_type_check_meta()
1600 btf_verifier_log_type(env, t, NULL); in btf_ref_type_check_meta()
1608 const struct btf_type *t = v->t; in btf_modifier_resolve() local
1610 u32 next_type_id = t->type; in btf_modifier_resolve()
1615 btf_verifier_log_type(env, v->t, "Invalid type_id"); in btf_modifier_resolve()
1637 btf_verifier_log_type(env, v->t, "Invalid type_id"); in btf_modifier_resolve()
1651 const struct btf_type *t = v->t; in btf_var_resolve() local
1652 u32 next_type_id = t->type; in btf_var_resolve()
1657 btf_verifier_log_type(env, v->t, "Invalid type_id"); in btf_var_resolve()
1684 btf_verifier_log_type(env, v->t, "Invalid type_id"); in btf_var_resolve()
1697 const struct btf_type *t = v->t; in btf_ptr_resolve() local
1698 u32 next_type_id = t->type; in btf_ptr_resolve()
1703 btf_verifier_log_type(env, v->t, "Invalid type_id"); in btf_ptr_resolve()
1740 btf_verifier_log_type(env, v->t, "Invalid type_id"); in btf_ptr_resolve()
1751 const struct btf_type *t, in btf_modifier_seq_show() argument
1755 t = btf_type_id_resolve(btf, &type_id); in btf_modifier_seq_show()
1757 btf_type_ops(t)->seq_show(btf, t, type_id, data, bits_offset, m); in btf_modifier_seq_show()
1760 static void btf_var_seq_show(const struct btf *btf, const struct btf_type *t, in btf_var_seq_show() argument
1764 t = btf_type_id_resolve(btf, &type_id); in btf_var_seq_show()
1766 btf_type_ops(t)->seq_show(btf, t, type_id, data, bits_offset, m); in btf_var_seq_show()
1769 static void btf_ptr_seq_show(const struct btf *btf, const struct btf_type *t, in btf_ptr_seq_show() argument
1778 const struct btf_type *t) in btf_ref_type_log() argument
1780 btf_verifier_log(env, "type_id=%u", t->type); in btf_ref_type_log()
1802 const struct btf_type *t, in btf_fwd_check_meta() argument
1805 if (btf_type_vlen(t)) { in btf_fwd_check_meta()
1806 btf_verifier_log_type(env, t, "vlen != 0"); in btf_fwd_check_meta()
1810 if (t->type) { in btf_fwd_check_meta()
1811 btf_verifier_log_type(env, t, "type != 0"); in btf_fwd_check_meta()
1816 if (!t->name_off || in btf_fwd_check_meta()
1817 !btf_name_valid_identifier(env->btf, t->name_off)) { in btf_fwd_check_meta()
1818 btf_verifier_log_type(env, t, "Invalid name"); in btf_fwd_check_meta()
1822 btf_verifier_log_type(env, t, NULL); in btf_fwd_check_meta()
1828 const struct btf_type *t) in btf_fwd_type_log() argument
1830 btf_verifier_log(env, "%s", btf_type_kflag(t) ? "union" : "struct"); in btf_fwd_type_log()
1872 const struct btf_type *t, in btf_array_check_meta() argument
1875 const struct btf_array *array = btf_type_array(t); in btf_array_check_meta()
1879 btf_verifier_log_basic(env, t, in btf_array_check_meta()
1886 if (t->name_off) { in btf_array_check_meta()
1887 btf_verifier_log_type(env, t, "Invalid name"); in btf_array_check_meta()
1891 if (btf_type_vlen(t)) { in btf_array_check_meta()
1892 btf_verifier_log_type(env, t, "vlen != 0"); in btf_array_check_meta()
1896 if (btf_type_kflag(t)) { in btf_array_check_meta()
1897 btf_verifier_log_type(env, t, "Invalid btf_info kind_flag"); in btf_array_check_meta()
1901 if (t->size) { in btf_array_check_meta()
1902 btf_verifier_log_type(env, t, "size != 0"); in btf_array_check_meta()
1910 btf_verifier_log_type(env, t, "Invalid elem"); in btf_array_check_meta()
1915 btf_verifier_log_type(env, t, "Invalid index"); in btf_array_check_meta()
1919 btf_verifier_log_type(env, t, NULL); in btf_array_check_meta()
1927 const struct btf_array *array = btf_type_array(v->t); in btf_array_resolve()
1938 btf_verifier_log_type(env, v->t, "Invalid index"); in btf_array_resolve()
1949 btf_verifier_log_type(env, v->t, "Invalid index"); in btf_array_resolve()
1958 btf_verifier_log_type(env, v->t, in btf_array_resolve()
1969 btf_verifier_log_type(env, v->t, "Invalid elem"); in btf_array_resolve()
1974 btf_verifier_log_type(env, v->t, "Invalid array of int"); in btf_array_resolve()
1979 btf_verifier_log_type(env, v->t, in btf_array_resolve()
1990 const struct btf_type *t) in btf_array_log() argument
1992 const struct btf_array *array = btf_type_array(t); in btf_array_log()
1998 static void btf_array_seq_show(const struct btf *btf, const struct btf_type *t, in btf_array_seq_show() argument
2002 const struct btf_array *array = btf_type_array(t); in btf_array_seq_show()
2057 const struct btf_type *t, in btf_struct_check_meta() argument
2060 bool is_union = BTF_INFO_KIND(t->info) == BTF_KIND_UNION; in btf_struct_check_meta()
2064 u32 struct_size = t->size; in btf_struct_check_meta()
2068 meta_needed = btf_type_vlen(t) * sizeof(*member); in btf_struct_check_meta()
2070 btf_verifier_log_basic(env, t, in btf_struct_check_meta()
2077 if (t->name_off && in btf_struct_check_meta()
2078 !btf_name_valid_identifier(env->btf, t->name_off)) { in btf_struct_check_meta()
2079 btf_verifier_log_type(env, t, "Invalid name"); in btf_struct_check_meta()
2083 btf_verifier_log_type(env, t, NULL); in btf_struct_check_meta()
2086 for_each_member(i, t, member) { in btf_struct_check_meta()
2088 btf_verifier_log_member(env, t, member, in btf_struct_check_meta()
2097 btf_verifier_log_member(env, t, member, "Invalid name"); in btf_struct_check_meta()
2102 btf_verifier_log_member(env, t, member, in btf_struct_check_meta()
2107 offset = btf_member_bit_offset(t, member); in btf_struct_check_meta()
2109 btf_verifier_log_member(env, t, member, in btf_struct_check_meta()
2119 btf_verifier_log_member(env, t, member, in btf_struct_check_meta()
2125 btf_verifier_log_member(env, t, member, in btf_struct_check_meta()
2130 btf_verifier_log_member(env, t, member, NULL); in btf_struct_check_meta()
2153 last_member = btf_type_member(v->t) + v->next_member - 1; in btf_struct_resolve()
2161 if (btf_type_kflag(v->t)) in btf_struct_resolve()
2162 err = btf_type_ops(last_member_type)->check_kflag_member(env, v->t, in btf_struct_resolve()
2166 err = btf_type_ops(last_member_type)->check_member(env, v->t, in btf_struct_resolve()
2173 for_each_member_from(i, v->next_member, v->t, member) { in btf_struct_resolve()
2180 btf_verifier_log_member(env, v->t, member, in btf_struct_resolve()
2191 if (btf_type_kflag(v->t)) in btf_struct_resolve()
2192 err = btf_type_ops(member_type)->check_kflag_member(env, v->t, in btf_struct_resolve()
2196 err = btf_type_ops(member_type)->check_member(env, v->t, in btf_struct_resolve()
2209 const struct btf_type *t) in btf_struct_log() argument
2211 btf_verifier_log(env, "size=%u vlen=%u", t->size, btf_type_vlen(t)); in btf_struct_log()
2218 int btf_find_spin_lock(const struct btf *btf, const struct btf_type *t) in btf_find_spin_lock() argument
2223 if (!__btf_type_is_struct(t)) in btf_find_spin_lock()
2226 for_each_member(i, t, member) { in btf_find_spin_lock()
2239 off = btf_member_bit_offset(t, member); in btf_find_spin_lock()
2251 static void btf_struct_seq_show(const struct btf *btf, const struct btf_type *t, in btf_struct_seq_show() argument
2255 const char *seq = BTF_INFO_KIND(t->info) == BTF_KIND_UNION ? "|" : ","; in btf_struct_seq_show()
2260 for_each_member(i, t, member) { in btf_struct_seq_show()
2271 member_offset = btf_member_bit_offset(t, member); in btf_struct_seq_show()
2272 bitfield_size = btf_member_bitfield_size(t, member); in btf_struct_seq_show()
2357 const struct btf_type *t, in btf_enum_check_meta() argument
2360 const struct btf_enum *enums = btf_type_enum(t); in btf_enum_check_meta()
2365 nr_enums = btf_type_vlen(t); in btf_enum_check_meta()
2369 btf_verifier_log_basic(env, t, in btf_enum_check_meta()
2375 if (btf_type_kflag(t)) { in btf_enum_check_meta()
2376 btf_verifier_log_type(env, t, "Invalid btf_info kind_flag"); in btf_enum_check_meta()
2380 if (t->size > 8 || !is_power_of_2(t->size)) { in btf_enum_check_meta()
2381 btf_verifier_log_type(env, t, "Unexpected size"); in btf_enum_check_meta()
2386 if (t->name_off && in btf_enum_check_meta()
2387 !btf_name_valid_identifier(env->btf, t->name_off)) { in btf_enum_check_meta()
2388 btf_verifier_log_type(env, t, "Invalid name"); in btf_enum_check_meta()
2392 btf_verifier_log_type(env, t, NULL); in btf_enum_check_meta()
2404 btf_verifier_log_type(env, t, "Invalid name"); in btf_enum_check_meta()
2418 const struct btf_type *t) in btf_enum_log() argument
2420 btf_verifier_log(env, "size=%u vlen=%u", t->size, btf_type_vlen(t)); in btf_enum_log()
2423 static void btf_enum_seq_show(const struct btf *btf, const struct btf_type *t, in btf_enum_seq_show() argument
2427 const struct btf_enum *enums = btf_type_enum(t); in btf_enum_seq_show()
2428 u32 i, nr_enums = btf_type_vlen(t); in btf_enum_seq_show()
2453 const struct btf_type *t, in btf_func_proto_check_meta() argument
2456 u32 meta_needed = btf_type_vlen(t) * sizeof(struct btf_param); in btf_func_proto_check_meta()
2459 btf_verifier_log_basic(env, t, in btf_func_proto_check_meta()
2465 if (t->name_off) { in btf_func_proto_check_meta()
2466 btf_verifier_log_type(env, t, "Invalid name"); in btf_func_proto_check_meta()
2470 if (btf_type_kflag(t)) { in btf_func_proto_check_meta()
2471 btf_verifier_log_type(env, t, "Invalid btf_info kind_flag"); in btf_func_proto_check_meta()
2475 btf_verifier_log_type(env, t, NULL); in btf_func_proto_check_meta()
2481 const struct btf_type *t) in btf_func_proto_log() argument
2483 const struct btf_param *args = (const struct btf_param *)(t + 1); in btf_func_proto_log()
2484 u16 nr_args = btf_type_vlen(t), i; in btf_func_proto_log()
2486 btf_verifier_log(env, "return=%u args=(", t->type); in btf_func_proto_log()
2540 const struct btf_type *t, in btf_func_check_meta() argument
2543 if (!t->name_off || in btf_func_check_meta()
2544 !btf_name_valid_identifier(env->btf, t->name_off)) { in btf_func_check_meta()
2545 btf_verifier_log_type(env, t, "Invalid name"); in btf_func_check_meta()
2549 if (btf_type_vlen(t)) { in btf_func_check_meta()
2550 btf_verifier_log_type(env, t, "vlen != 0"); in btf_func_check_meta()
2554 if (btf_type_kflag(t)) { in btf_func_check_meta()
2555 btf_verifier_log_type(env, t, "Invalid btf_info kind_flag"); in btf_func_check_meta()
2559 btf_verifier_log_type(env, t, NULL); in btf_func_check_meta()
2574 const struct btf_type *t, in btf_var_check_meta() argument
2581 btf_verifier_log_basic(env, t, in btf_var_check_meta()
2587 if (btf_type_vlen(t)) { in btf_var_check_meta()
2588 btf_verifier_log_type(env, t, "vlen != 0"); in btf_var_check_meta()
2592 if (btf_type_kflag(t)) { in btf_var_check_meta()
2593 btf_verifier_log_type(env, t, "Invalid btf_info kind_flag"); in btf_var_check_meta()
2597 if (!t->name_off || in btf_var_check_meta()
2598 !__btf_name_valid(env->btf, t->name_off, true)) { in btf_var_check_meta()
2599 btf_verifier_log_type(env, t, "Invalid name"); in btf_var_check_meta()
2604 if (!t->type || !BTF_TYPE_ID_VALID(t->type)) { in btf_var_check_meta()
2605 btf_verifier_log_type(env, t, "Invalid type_id"); in btf_var_check_meta()
2609 var = btf_type_var(t); in btf_var_check_meta()
2612 btf_verifier_log_type(env, t, "Linkage not supported"); in btf_var_check_meta()
2616 btf_verifier_log_type(env, t, NULL); in btf_var_check_meta()
2621 static void btf_var_log(struct btf_verifier_env *env, const struct btf_type *t) in btf_var_log() argument
2623 const struct btf_var *var = btf_type_var(t); in btf_var_log()
2625 btf_verifier_log(env, "type_id=%u linkage=%u", t->type, var->linkage); in btf_var_log()
2638 const struct btf_type *t, in btf_datasec_check_meta() argument
2645 meta_needed = btf_type_vlen(t) * sizeof(*vsi); in btf_datasec_check_meta()
2647 btf_verifier_log_basic(env, t, in btf_datasec_check_meta()
2653 if (!btf_type_vlen(t)) { in btf_datasec_check_meta()
2654 btf_verifier_log_type(env, t, "vlen == 0"); in btf_datasec_check_meta()
2658 if (!t->size) { in btf_datasec_check_meta()
2659 btf_verifier_log_type(env, t, "size == 0"); in btf_datasec_check_meta()
2663 if (btf_type_kflag(t)) { in btf_datasec_check_meta()
2664 btf_verifier_log_type(env, t, "Invalid btf_info kind_flag"); in btf_datasec_check_meta()
2668 if (!t->name_off || in btf_datasec_check_meta()
2669 !btf_name_valid_section(env->btf, t->name_off)) { in btf_datasec_check_meta()
2670 btf_verifier_log_type(env, t, "Invalid name"); in btf_datasec_check_meta()
2674 btf_verifier_log_type(env, t, NULL); in btf_datasec_check_meta()
2676 for_each_vsi(i, t, vsi) { in btf_datasec_check_meta()
2679 btf_verifier_log_vsi(env, t, vsi, in btf_datasec_check_meta()
2684 if (vsi->offset < last_vsi_end_off || vsi->offset >= t->size) { in btf_datasec_check_meta()
2685 btf_verifier_log_vsi(env, t, vsi, in btf_datasec_check_meta()
2690 if (!vsi->size || vsi->size > t->size) { in btf_datasec_check_meta()
2691 btf_verifier_log_vsi(env, t, vsi, in btf_datasec_check_meta()
2697 if (last_vsi_end_off > t->size) { in btf_datasec_check_meta()
2698 btf_verifier_log_vsi(env, t, vsi, in btf_datasec_check_meta()
2703 btf_verifier_log_vsi(env, t, vsi, NULL); in btf_datasec_check_meta()
2707 if (t->size < sum) { in btf_datasec_check_meta()
2708 btf_verifier_log_type(env, t, "Invalid btf_info size"); in btf_datasec_check_meta()
2722 for_each_vsi_from(i, v->next_member, v->t, vsi) { in btf_datasec_resolve()
2727 btf_verifier_log_vsi(env, v->t, vsi, in btf_datasec_resolve()
2740 btf_verifier_log_vsi(env, v->t, vsi, "Invalid type"); in btf_datasec_resolve()
2745 btf_verifier_log_vsi(env, v->t, vsi, "Invalid size"); in btf_datasec_resolve()
2755 const struct btf_type *t) in btf_datasec_log() argument
2757 btf_verifier_log(env, "size=%u vlen=%u", t->size, btf_type_vlen(t)); in btf_datasec_log()
2761 const struct btf_type *t, u32 type_id, in btf_datasec_seq_show() argument
2769 seq_printf(m, "section (\"%s\") = {", __btf_name_by_offset(btf, t->name_off)); in btf_datasec_seq_show()
2770 for_each_vsi(i, t, vsi) { in btf_datasec_seq_show()
2790 const struct btf_type *t) in btf_func_proto_check() argument
2799 args = (const struct btf_param *)(t + 1); in btf_func_proto_check()
2800 nr_args = btf_type_vlen(t); in btf_func_proto_check()
2803 if (t->type) { in btf_func_proto_check()
2804 u32 ret_type_id = t->type; in btf_func_proto_check()
2808 btf_verifier_log_type(env, t, "Invalid return type"); in btf_func_proto_check()
2821 btf_verifier_log_type(env, t, "Invalid return type"); in btf_func_proto_check()
2832 btf_verifier_log_type(env, t, "Invalid arg#%u", in btf_func_proto_check()
2847 btf_verifier_log_type(env, t, "Invalid arg#%u", i + 1); in btf_func_proto_check()
2855 btf_verifier_log_type(env, t, in btf_func_proto_check()
2869 btf_verifier_log_type(env, t, "Invalid arg#%u", i + 1); in btf_func_proto_check()
2879 const struct btf_type *t) in btf_func_check() argument
2887 proto_type = btf_type_by_id(btf, t->type); in btf_func_check()
2890 btf_verifier_log_type(env, t, "Invalid type_id"); in btf_func_check()
2898 btf_verifier_log_type(env, t, "Invalid arg#%u", i + 1); in btf_func_check()
2925 const struct btf_type *t, in btf_check_meta() argument
2931 if (meta_left < sizeof(*t)) { in btf_check_meta()
2933 env->log_type_id, meta_left, sizeof(*t)); in btf_check_meta()
2936 meta_left -= sizeof(*t); in btf_check_meta()
2938 if (t->info & ~BTF_INFO_MASK) { in btf_check_meta()
2940 env->log_type_id, t->info); in btf_check_meta()
2944 if (BTF_INFO_KIND(t->info) > BTF_KIND_MAX || in btf_check_meta()
2945 BTF_INFO_KIND(t->info) == BTF_KIND_UNKN) { in btf_check_meta()
2947 env->log_type_id, BTF_INFO_KIND(t->info)); in btf_check_meta()
2951 if (!btf_name_offset_valid(env->btf, t->name_off)) { in btf_check_meta()
2953 env->log_type_id, t->name_off); in btf_check_meta()
2957 var_meta_size = btf_type_ops(t)->check_meta(env, t, meta_left); in btf_check_meta()
2978 struct btf_type *t = cur; in btf_check_all_metas() local
2981 meta_size = btf_check_meta(env, t, end - cur); in btf_check_all_metas()
2985 btf_add_type(env, t); in btf_check_all_metas()
2994 const struct btf_type *t, in btf_resolve_valid() argument
3002 if (btf_type_is_struct(t) || btf_type_is_datasec(t)) in btf_resolve_valid()
3006 if (btf_type_is_modifier(t) || btf_type_is_ptr(t) || in btf_resolve_valid()
3007 btf_type_is_var(t)) { in btf_resolve_valid()
3008 t = btf_type_id_resolve(btf, &type_id); in btf_resolve_valid()
3009 return t && in btf_resolve_valid()
3010 !btf_type_is_modifier(t) && in btf_resolve_valid()
3011 !btf_type_is_var(t) && in btf_resolve_valid()
3012 !btf_type_is_datasec(t); in btf_resolve_valid()
3015 if (btf_type_is_array(t)) { in btf_resolve_valid()
3016 const struct btf_array *array = btf_type_array(t); in btf_resolve_valid()
3031 const struct btf_type *t, u32 type_id) in btf_resolve() argument
3038 env_stack_push(env, t, type_id); in btf_resolve()
3041 err = btf_type_ops(v->t)->resolve(env, v); in btf_resolve()
3046 btf_verifier_log_type(env, t, in btf_resolve()
3050 btf_verifier_log_type(env, t, "Loop detected"); in btf_resolve()
3054 if (!err && !btf_resolve_valid(env, t, type_id)) { in btf_resolve()
3055 btf_verifier_log_type(env, t, "Invalid resolve state"); in btf_resolve()
3075 const struct btf_type *t = btf_type_by_id(btf, type_id); in btf_check_all_types() local
3078 if (btf_type_needs_resolve(t) && in btf_check_all_types()
3080 err = btf_resolve(env, t, type_id); in btf_check_all_types()
3085 if (btf_type_is_func_proto(t)) { in btf_check_all_types()
3086 err = btf_func_proto_check(env, t); in btf_check_all_types()
3091 if (btf_type_is_func(t)) { in btf_check_all_types()
3092 err = btf_func_check(env, t); in btf_check_all_types()
3373 const struct btf_type *t = btf_type_by_id(btf, type_id); in btf_type_seq_show() local
3375 btf_type_ops(t)->seq_show(btf, t, type_id, obj, 0, m); in btf_type_seq_show()