函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:kernel\fork.c Create Date:2022-07-27 09:58:08
Last Modify:2020-03-17 11:04:53 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:创建进程

函数原型:static __latent_entropy struct task_struct *copy_process(struct pid *pid, int trace, int node, struct kernel_clone_args *args)

返回类型:struct task_struct

参数:

类型参数名称
struct pid *pid任务标志
inttrace
intnode
struct kernel_clone_args *args
1830  pidfd等于负1
1833  struct file * pidfile = NULL
1834  clone_flags等于flags
1840  如果clone_flags按位与在新的namespace启动子进程按位或共享文件系统的值的值恒等于在新的namespace启动子进程按位或共享文件系统的值则返回:错误号
1843  如果clone_flags按位与新用户空间按位或共享文件系统的值的值恒等于新用户空间按位或共享文件系统的值则返回:错误号
1850  如果clone_flags按位与属于同一个线程组且非clone_flags按位与共享信号处理的值则返回:错误号
1858  如果clone_flags按位与共享信号处理且非clone_flags按位与共享虚拟内存的值则返回:错误号
1867  如果clone_flags按位与新进程与创建它的进程是“兄弟”而不是“父子”flags按位与r init: ignore fatal signals 则返回:错误号
1875  如果clone_flags按位与属于同一个线程组
1876  如果clone_flags按位与新用户空间按位或新进程空间的值或task_active_pid_ns(当前进程)不等于pid_ns_for_children则返回:错误号
1882  如果clone_flags按位与set if a pidfd should be placed in parent
1888  如果clone_flags按位与Unused, ignored 按位或属于同一个线程组的值则返回:错误号
1898  sigemptyset( & signal)
1899  INIT_HLIST_NODE( & node)
1901  spin_lock_irq( & siglock)
1902  如果非clone_flags按位与属于同一个线程组的值则hlist_add_head( & node, & multiprocess)
1904  recalc_sigpending()
1905  spin_unlock_irq( & siglock)
1906  retval等于负ERESTARTNOINTR
1907  如果signal_pending(当前进程)则转到:fork_out
1910  retval等于负ENOMEM
1911  p等于复制进程并设置栈
1912  如果非p则转到:fork_out
1921  设置子进程tid = (clone_flags & 设置子进程tid) ? child_tid : NULL
1925  清除子进程tid = (clone_flags & 清除子进程tid) ? child_tid : NULL
1927  ftrace_graph_init_task(p)
1929  进程互斥锁初始化
1935  retval等于负EAGAIN
1936  如果atomic_read( & processes)大于等于task_rlimit(p, RLIMIT_NPROC)则
1938  如果真实用户身份不等于INIT_USER且非操作权限检查且非操作权限检查则转到:bad_fork_free
1942  flags与等于超出限制的反
1944  retval等于copy_creds(p, clone_flags)
1945  如果retval小于0则转到:bad_fork_free
1953  retval等于负EAGAIN
1954  如果活跃进程数大于等于活跃进程限制数则转到:bad_fork_cleanup_count
1957  初始化延迟记录
1958  任务标志与等于使用超级用户权限按位或进程处于工作队列中按位或I am an IDLE thread 的值的反
1959  任务标志或等于已调度未运行
1960  初始化链表头
1961  初始化链表头
1962  rcu_copy_process(p)
1963  完成量 = NULL
1964  spin_lock_init( & Protection against (de-)allocation: mm, files, fs, tty, keyrings, mems_allowed, mempolicy: )
1966  初始化信号发送
1968  用户计时等于系统计时等于通用计时等于0
1972  prev_cputime_init( & 进程耗时)
1981  memset( & rss_stat, 0, rss_stat的长度)
1984  默认空闲时间等于timer_slack_ns
1990  初始化I/O记录
1991  清除累计
1993  posix_cputimers_init( & Empty if CONFIG_POSIX_CPUTIMERS=n )
1995  异步I/O请求 = NULL
1996  audit_set_context(p, NULL)
1997  cgroup_fork(p)
1999  Protected by alloc_lock: 等于mpol_dup( Protected by alloc_lock: )
2000  如果是错误
2001  retval等于错误
2002  Protected by alloc_lock: = NULL
2003  转到:bad_fork_cleanup_threadgroup_lock
2027  pagefault_disabled等于0
2042  retval等于sched_fork(clone_flags, p)
2043  如果retval则转到:bad_fork_cleanup_policy
2046  retval等于perf_event_init_task(p)
2047  如果retval则转到:bad_fork_cleanup_policy
2049  retval等于安全审计
2050  如果retval则转到:bad_fork_cleanup_perf
2053  shm_init_task(p)
2054  retval等于security_task_alloc(p, clone_flags)
2055  如果retval则转到:bad_fork_cleanup_audit
2057  retval等于重置信号量
2058  如果retval则转到:bad_fork_cleanup_security
2060  retval等于复制打开文件信息
2061  如果retval则转到:bad_fork_cleanup_semundo
2063  retval等于复制文件系统
2064  如果retval则转到:bad_fork_cleanup_files
2066  retval等于复制信号句柄
2067  如果retval则转到:bad_fork_cleanup_fs
2069  retval等于复制信号
2070  如果retval则转到:bad_fork_cleanup_sighand
2072  retval等于复制内存
2073  如果retval则转到:bad_fork_cleanup_signal
2075  retval等于he namespaces access rules are:* 1. only current task is allowed to change tsk->nsproxy pointer or* any pointer on the nsproxy itself. Current must hold the task_lock* when changing tsk->nsproxy.* 2
2076  如果retval则转到:bad_fork_cleanup_mm
2078  retval等于复制I/O
2079  如果retval则转到:bad_fork_cleanup_namespaces
2081  retval等于Architectures that haven't opted into copy_thread_tls get the tls argument* via pt_regs, so ignore the tls argument passed via C.
2083  如果retval则转到:bad_fork_cleanup_io
2086  stackleak_task_init(p)
2088  如果任务标志不等于init_struct_pid
2089  任务标志等于alloc_pid(pid_ns_for_children, set_tid, Number of elements in *set_tid )
2091  如果是错误
2092  retval等于错误
2093  转到:bad_fork_cleanup_thread
2102  如果clone_flags按位与set if a pidfd should be placed in parent
2103  retval等于get_unused_fd_flags(O_RDWR | O_CLOEXEC)
2104  如果retval小于0则转到:bad_fork_free_pid
2107  pidfd等于retval
2109  pidfile等于anon_inode_getfile("[pidfd]", & pidfd_fops, 任务标志, O_RDWR | O_CLOEXEC)
2111  如果是错误
2113  retval等于错误
2114  转到:bad_fork_free_pid
2116  get_pid(任务标志)
2118  retval等于put_user - Write a simple value into user space(pidfd, pidfd)
2119  如果retval则转到:bad_fork_put_pidfd
2124  堆栈堵塞 = NULL
2126  futex_init_task(p)
2131  如果clone_flags按位与共享虚拟内存按位或父进程被挂起,直至子进程释放虚拟内存资源的值的值恒等于共享虚拟内存sas_ss_reset(p)
2138  user_disable_single_step(p)
2139  清除线程指定标志
2141  清除线程指定标志
2143  clear_tsk_latency_tracing(p)
2146  进程ID等于取进程id
2147  如果clone_flags按位与属于同一个线程组
2148  进程退出时发出的信号等于负1
2149  线程组主管等于group_leader
2150  线程组ID等于tgid
2151  否则
2152  如果clone_flags按位与新进程与创建它的进程是“兄弟”而不是“父子”进程退出时发出的信号等于exit_signal
2154  否则进程退出时发出的信号等于exit_signal
2156  线程组主管等于p
2157  线程组ID等于进程ID
2160  赃页数等于0
2161  赃页阀值等于128右移PAGE_SHIFT determines the page size 减10位
2162  开始写暂停时间等于0
2164  父进程终止时发出的信号等于0
2165  初始化链表头
2166  回调队列 = NULL
2168  开始摘除线程组
2175  retval等于cgroup_can_fork(p)
2176  如果retval则转到:bad_fork_cgroup_threadgroup_change_end
2187  进程创建时间戳等于ktime_get_ns()
2188  Boot based time in nsecs: 等于ktime_get_boottime_ns()
2194  write_lock_irq( & tasklist_lock)
2197  如果clone_flags按位与新进程与创建它的进程是“兄弟”而不是“父子”按位或属于同一个线程组的值则
2198  真正的父进程等于real_parent
2199  线程组跟踪等于parent_exec_id
2200  否则
2201  真正的父进程等于当前进程
2202  线程组跟踪等于self_exec_id
2205  klp_copy_process(p)
2207  加自旋锁
2213  复制安全计算
2215  rseq_fork(p, clone_flags)
2218  如果此条件成立可能性小(为编译器优化)(!(pid_allocated & PIDNS_ADDING))则
2219  retval等于负ENOMEM
2220  转到:bad_fork_cancel_cgroup
2224  如果fatal_signal_pending(当前进程)则
2225  retval等于负EINTR
2226  转到:bad_fork_cancel_cgroup
2230  如果pidfilefd_install(pidfd, pidfile)
2233  init_task_pid_links(p)
2234  如果此条件成立可能性大(为编译器优化)(进程ID)则
2235  调试跟踪初始化
2237  初始化进程标志
2238  如果thread_group_leader(p)则
2243  如果是资源回收器
2247  signal等于signal
2248  tty等于取终端设备
2262  否则
2263  nr_threads自加
2264  atomic_inc( & live)
2272  hese helpers must be called with the tasklist_lock write-held.
2273  活跃进程数自加
2275  总计创建次数自加
2276  hlist_del_init( & node)
2277  自旋锁解锁
2278  syscall_tracepoint_update(p)
2279  write_unlock_irq( & tasklist_lock)
2281  关联进程与proc文件系统
2282  cgroup_post_fork(p)
2283  摘除线程组完成
2284  perf_event_fork(p)
2286  trace_task_newtask(p, clone_flags)
2287  uprobe_copy_process(p, clone_flags)
2289  返回:p
2291  bad_fork_cancel_cgroup :
2292  自旋锁解锁
2293  write_unlock_irq( & tasklist_lock)
2294  cgroup_cancel_fork(p)
2295  bad_fork_cgroup_threadgroup_change_end :
2296  摘除线程组完成
2297  bad_fork_put_pidfd :
2298  如果clone_flags按位与set if a pidfd should be placed in parent
2299  fput(pidfile)
2300  put_unused_fd(pidfd)
2302  bad_fork_free_pid :
2303  如果任务标志不等于init_struct_pidfree_pid(任务标志)
2305  bad_fork_cleanup_thread :
2306  exit_thread(p)
2307  bad_fork_cleanup_io :
2308  如果异步I/O请求exit_io_context(p)
2310  bad_fork_cleanup_namespaces :
2311  exit_task_namespaces(p)
2312  bad_fork_cleanup_mm :
2313  如果内存信息
2314  mm_clear_owner(内存信息, p)
2315  Decrement the use count and release all resources for an mm.
2317  bad_fork_cleanup_signal :
2318  如果非clone_flags按位与属于同一个线程组的值则free_signal_struct(信号)
2320  bad_fork_cleanup_sighand :
2321  __cleanup_sighand(sighand)
2322  bad_fork_cleanup_fs :
2323  exit_fs(p)
2324  bad_fork_cleanup_files :
2325  exit_files(p)
2326  bad_fork_cleanup_semundo :
2327  exit_sem(p)
2328  bad_fork_cleanup_security :
2329  security_task_free(p)
2330  bad_fork_cleanup_audit :
2331  audit_free(p)
2332  bad_fork_cleanup_perf :
2333  perf_event_free_task(p)
2334  bad_fork_cleanup_policy :
2335  lockdep_free_task(p)
2337  mpol_put( Protected by alloc_lock: )
2338  bad_fork_cleanup_threadgroup_lock :
2340  delayacct_tsk_free(p)
2341  bad_fork_cleanup_count :
2342  atomic_dec( & processes)
2343  exit_creds(p)
2344  bad_fork_free :
2345  任务状态等于TASK_DEAD
2346  put_task_stack(p)
2347  delayed_free_task(p)
2348  fork_out :
2349  spin_lock_irq( & siglock)
2350  hlist_del_init( & node)
2351  spin_unlock_irq( & siglock)
2352  返回:错误号
调用者
名称描述
fork_idle
_do_fork分裂进程