函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:kernel\bpf\btf.c Create Date:2022-07-27 14:38:09
Last Modify:2020-03-12 14:18:49 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:btf_parse

函数原型:static struct btf *btf_parse(void __user *btf_data, u32 btf_data_size, u32 log_level, char __user *log_ubuf, u32 log_size)

返回类型:struct btf

参数:

类型参数名称
void __user *btf_data
u32btf_data_size
u32log_level
char __user *log_ubuf
u32log_size
3364  struct btf_verifier_env * env = NULL
3366  struct btf * btf = NULL
3370  如果btf_data_size大于16MB for 64k structs and each has 16 members and* a few MB spaces for the string section.* The hard limit is S32_MAX.则返回:错误号
3373  env等于分配内存并置零
3374  如果非env则返回:错误号
3377  log等于log
3378  如果log_levellog_ubuflog_size
3382  level等于log_level
3383  ubuf等于log_ubuf
3384  len_total等于log_size
3387  如果len_total小于128或len_total大于UINT_MAX右移8位或非level或非ubuf
3389  err等于负EINVAL
3390  转到:errout
3394  btf等于分配内存并置零
3395  如果非btf
3396  err等于负ENOMEM
3397  转到:errout
3399  btf等于btf
3401  data等于kvmalloc(btf_data_size, GFP_KERNEL | DOC: Action modifiers* Action modifiers* ~~~~~~~~~~~~~~~~* %__GFP_NOWARN suppresses allocation failure reports.* %__GFP_COMP address compound page metadata.* %__GFP_ZERO returns a zeroed page on success.)
3402  如果非data
3403  err等于负ENOMEM
3404  转到:errout
3407  data等于data
3408  data_size等于btf_data_size
3410  如果copy_from_user(data, btf_data, btf_data_size)则
3411  err等于负EFAULT
3412  转到:errout
3415  err等于btf_parse_hdr(env)
3416  如果err则转到:errout
3419  nohdr_data等于datahdr_len
3421  err等于btf_parse_str_sec(env)
3422  如果err则转到:errout
3425  err等于btf_parse_type_sec(env)
3426  如果err则转到:errout
3429  如果levelbpf_verifier_log_full(log)则
3430  err等于负ENOSPC
3431  转到:errout
3434  btf_verifier_env_free(env)
3435  _set - set a refcount's value*@r: the refcount*@n: value to which the refcount will be set
3436  返回:btf
3438  errout :
3439  btf_verifier_env_free(env)
3440  如果btfbtf_free(btf)
3442  返回:错误号
调用者
名称描述
btf_new_fd