函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:fs\exec.c Create Date:2022-07-29 10:33:48
Last Modify:2020-03-12 14:18:49 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:'copy_strings()' copies argument/environment strings from the old* processes's memory to the new process's stack. The call to get_user_pages()* ensures the destination page is created and not swapped out.

函数原型:static int copy_strings(int argc, struct user_arg_ptr argv, struct linux_binprm *bprm)

返回类型:int

参数:

类型参数名称
intargc
struct user_arg_ptrargv
struct linux_binprm *bprm
502  struct page * kmapped_page = NULL
503  char * kaddr = NULL
504  kpos等于0
507 argc自减大于0循环
508  __userstr
512  ret等于负EFAULT
513  str等于get_user_arg_ptr(argv, argc)
514  如果是错误则转到:out
517  len等于用户字符串长度
518  如果非len则转到:out
521  ret等于负E2BIG
522  如果非valid_arg_len(bprm, len)则转到:out
526  pos等于p
527  str加等于len
528  p减等于len
530  如果p小于argmin则转到:out
534 len大于0循环
539  转到:out
541  cond_resched()
543  offset等于pos取模PAGE_SIZE
544  如果offset恒等于0则offset等于PAGE_SIZE
547  bytes_to_copy等于offset
548  如果bytes_to_copy大于lenbytes_to_copy等于len
551  offset减等于bytes_to_copy
552  pos减等于bytes_to_copy
553  str减等于bytes_to_copy
554  len减等于bytes_to_copy
556  如果非kmapped_pagekpos不等于pos按位与PAGE_MASK的值则
559  page等于get_arg_page(bprm, pos, 1)
560  如果非page
561  ret等于负E2BIG
562  转到:out
565  如果kmapped_page
570  kmapped_page等于page
571  kaddr等于kmap(kmapped_page)
572  kpos等于pos按位与PAGE_MASK
576  ret等于负EFAULT
577  转到:out
581  ret等于0
582  out :
583  如果kmapped_page
584  flush_kernel_dcache_page(kmapped_page)
585  kunmap(kmapped_page)
586  put_arg_page(kmapped_page)
588  返回:ret
调用者
名称描述
copy_strings_kernelLike copy_strings, but get argv and its values from kernel memory.
__do_execve_filesys_execve() executes a new program.