函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

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

函数名称:String length checking wrapper

函数原型:static int traceprobe_parse_probe_arg_body(char *arg, ssize_t *size, struct probe_arg *parg, unsigned int flags, int offset)

返回类型:int

参数:

类型参数名称
char *arg
ssize_t *size
struct probe_arg *parg
unsigned intflags
intoffset
546  struct fetch_insn * code, * scode, * tmp = NULL
550  len等于strlen - Find the length of a string*@s: The string to be sized
551  如果len大于MAX_ARGSTR_LEN
552  trace_probe_log_err(offset, ARG_TOO_LONG)
553  返回:负EINVAL
554  否则如果len恒等于0则
555  trace_probe_log_err(offset, NO_ARG_BODY)
556  返回:负EINVAL
559  Command of this argument 等于kstrdup(arg, GFP_KERNEL)
560  如果非 Command of this argument 则返回:负ENOMEM
563  t等于strchr - Find the first occurrence of the character c in the string s.*@s: the string to be searched*@c: the character to search for
564  如果t
565  t等于'\0'
566  t2等于strchr - Find the first occurrence of the character c in the string s.*@s: the string to be searched*@c: the character to search for
567  如果t2
568  t2自加等于'\0'
570  如果非t3
575  否则如果t3[1]不等于'\0'则
578  返回:负EINVAL
580  t3等于'\0'
584  返回:负EINVAL
586  如果 Array count 大于MAX_ARRAY_LEN
589  返回:负EINVAL
598  如果字符串比较恒等于0或字符串指定长度比较恒等于0则
600  如果 Array count t字符串比较则返回:负EINVAL
602  Type of this argument 等于find_fetch_type("string")
603  否则 Type of this argument 等于find_fetch_type(t)
605  如果非 Type of this argument
606  trace_probe_log_err(offset + (t ? (t - arg) : 0), BAD_TYPE)
607  返回:负EINVAL
609  Offset from argument entry 等于size
610  size加等于Byte size of type 乘如果 Array count 否则1
612  如果 Array count
613  len等于strlen - Find the length of a string*@s: The string to be sized加6
614  Format string if needed 等于开辟内存
615  如果非 Format string if needed 则返回:负ENOMEM
617  snprintf - Format a string and place it in a buffer*@buf: The buffer to place the result into*@size: The size of the buffer, including the trailing null space*@fmt: The format string to use*@
621  code等于tmp等于分配数组内存并置零
622  如果非code则返回:负ENOMEM
624  op等于FETCH_OP_END
626  ret等于Recursive argument parser
628  如果ret则转到:fail
632  如果非字符串比较或非字符串比较
637  trace_probe_log_err(offset + (t ? (t - arg) : 0), BAD_STRING)
639  ret等于负EINVAL
640  转到:fail
642  如果op恒等于 Immediate : .immediate op恒等于 Current comm Array count
650  code自加
651  如果op不等于FETCH_OP_NOP
653  ret等于负EINVAL
654  转到:fail
658  如果非字符串比较op恒等于 User-space Dereference: .offset op等于 User String: .offset, .size
661  否则op等于 String: .offset, .size
663  size等于Byte size of type
664  Dynamic array (string) is used = true
665  否则如果op恒等于 Dereference: .offset
666  op等于 Mem: .offset, .size
667  size等于Byte size of type
668  否则如果op恒等于 User-space Dereference: .offset
669  op等于 Mem: .offset, .size
670  size等于Byte size of type
671  否则
672  code自加
673  如果op不等于FETCH_OP_NOP
675  ret等于负EINVAL
676  转到:fail
678  op等于 Raw: .size
679  size等于Byte size of type
681  scode等于code
683  如果(t != NULL)则
684  ret等于Bitfield type needs to be parsed into a fetch function
685  如果ret
687  转到:fail
691  如果 Array count
695  trace_probe_log_err(offset + (t ? (t - arg) : 0), BAD_STRING)
697  ret等于负EINVAL
698  转到:fail
700  code自加
701  如果op不等于FETCH_OP_NOP
703  ret等于负EINVAL
704  转到:fail
706  op等于 Array: .param = loop count
707  param等于 Array count
709  code自加
710  op等于FETCH_OP_END
713  code等于分配数组内存并置零
714  如果非coderet等于负ENOMEM
716  否则内存复制(code, tmp, code的长度 * (code - tmp + 1))
719  fail :
720  如果ret
721 code小于tmpch + deref*N + store + mod + end <= 16, this allows N=12, enough 循环如果op恒等于 Unresolved Symbol holder op恒等于 Allocated data: .data
724  kfree(data)
726  kfree(tmp)
728  返回:ret
调用者
名称描述
traceprobe_parse_probe_arg