Function report

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:kernel\bpf\btf.c Create Date:2022-07-28 13:18:08
Last Modify:2020-03-12 14:18:49 Copyright©Brick
home page Tree
Annotation kernel can get tool activityDownload SCCTChinese

Name:btf_int_check_kflag_member

Proto:static int btf_int_check_kflag_member(struct btf_verifier_env *env, const struct btf_type *struct_type, const struct btf_member *member, const struct btf_type *member_type)

Type:int

Parameter:

TypeParameterName
struct btf_verifier_env *env
const struct btf_type *struct_type
const struct btf_member *member
const struct btf_type *member_type
1271  int_data = btf_type_int(member_type)
1272  struct_size = size
1276  If Not Regular int is not a bit field and it must be either* u8/u16/u32/u64 or __int128. Then
1277  btf_verifier_log_member(env, struct_type, member, "Invalid member base type")
1279  Return -EINVAL
1283  nr_bits = If the struct/union type info kind_flag is set, the* following two macros are used to access bitfield_size* and bit_offset from btf_member.offset.(If the type info kind_flag is set, the btf_member offset* contains both member bitfield size and bit offset. The* bitfield size is set for bitfield members. If the type* info kind_flag is not set, the offset contains only bit* offset.)
1284  struct_bits_off = BTF_MEMBER_BIT_OFFSET(If the type info kind_flag is set, the btf_member offset* contains both member bitfield size and bit offset. The* bitfield size is set for bitfield members. If the type* info kind_flag is not set, the offset contains only bit* offset.)
1285  nr_int_data_bits = BTF_INT_BITS(int_data)
1286  If Not nr_bits Then
1291  btf_verifier_log_member(env, struct_type, member, "Invalid member offset")
1293  Return -EINVAL
1296  nr_bits = nr_int_data_bits
1297  Else if nr_bits > nr_int_data_bits Then
1298  btf_verifier_log_member(env, struct_type, member, "Invalid member bitfield_size")
1300  Return -EINVAL
1303  bytes_offset = BITS_ROUNDDOWN_BYTES(struct_bits_off)
1304  nr_copy_bits = nr_bits + BITS_PER_BYTE_MASKED(struct_bits_off)
1305  If nr_copy_bits > BTF verification:* To verify BTF data, two passes are needed.* Pass #1* ~~~~~~~* The first pass is to collect all btf_type objects to* an array: "btf->types".* Depending on the C type that a btf_type is describing, Then
1306  btf_verifier_log_member(env, struct_type, member, "nr_copy_bits exceeds 128")
1308  Return -EINVAL
1311  If struct_size < bytes_offset || struct_size - bytes_offset < BITS_ROUNDUP_BYTES(nr_copy_bits) Then
1313  btf_verifier_log_member(env, struct_type, member, "Member exceeds struct_size")
1315  Return -EINVAL
1318  Return 0