Branch data Line data Source code
1 : : // SPDX-License-Identifier: GPL-2.0-only
2 : : /*
3 : : * linux/kernel/fork.c
4 : : *
5 : : * Copyright (C) 1991, 1992 Linus Torvalds
6 : : */
7 : :
8 : : /*
9 : : * 'fork.c' contains the help-routines for the 'fork' system call
10 : : * (see also entry.S and others).
11 : : * Fork is rather simple, once you get the hang of it, but the memory
12 : : * management can be a bitch. See 'mm/memory.c': 'copy_page_range()'
13 : : */
14 : :
15 : : #include <linux/anon_inodes.h>
16 : : #include <linux/slab.h>
17 : : #include <linux/sched/autogroup.h>
18 : : #include <linux/sched/mm.h>
19 : : #include <linux/sched/coredump.h>
20 : : #include <linux/sched/user.h>
21 : : #include <linux/sched/numa_balancing.h>
22 : : #include <linux/sched/stat.h>
23 : : #include <linux/sched/task.h>
24 : : #include <linux/sched/task_stack.h>
25 : : #include <linux/sched/cputime.h>
26 : : #include <linux/seq_file.h>
27 : : #include <linux/rtmutex.h>
28 : : #include <linux/init.h>
29 : : #include <linux/unistd.h>
30 : : #include <linux/module.h>
31 : : #include <linux/vmalloc.h>
32 : : #include <linux/completion.h>
33 : : #include <linux/personality.h>
34 : : #include <linux/mempolicy.h>
35 : : #include <linux/sem.h>
36 : : #include <linux/file.h>
37 : : #include <linux/fdtable.h>
38 : : #include <linux/iocontext.h>
39 : : #include <linux/key.h>
40 : : #include <linux/binfmts.h>
41 : : #include <linux/mman.h>
42 : : #include <linux/mmu_notifier.h>
43 : : #include <linux/hmm.h>
44 : : #include <linux/fs.h>
45 : : #include <linux/mm.h>
46 : : #include <linux/vmacache.h>
47 : : #include <linux/nsproxy.h>
48 : : #include <linux/capability.h>
49 : : #include <linux/cpu.h>
50 : : #include <linux/cgroup.h>
51 : : #include <linux/security.h>
52 : : #include <linux/hugetlb.h>
53 : : #include <linux/seccomp.h>
54 : : #include <linux/swap.h>
55 : : #include <linux/syscalls.h>
56 : : #include <linux/jiffies.h>
57 : : #include <linux/futex.h>
58 : : #include <linux/compat.h>
59 : : #include <linux/kthread.h>
60 : : #include <linux/task_io_accounting_ops.h>
61 : : #include <linux/rcupdate.h>
62 : : #include <linux/ptrace.h>
63 : : #include <linux/mount.h>
64 : : #include <linux/audit.h>
65 : : #include <linux/memcontrol.h>
66 : : #include <linux/ftrace.h>
67 : : #include <linux/proc_fs.h>
68 : : #include <linux/profile.h>
69 : : #include <linux/rmap.h>
70 : : #include <linux/ksm.h>
71 : : #include <linux/acct.h>
72 : : #include <linux/userfaultfd_k.h>
73 : : #include <linux/tsacct_kern.h>
74 : : #include <linux/cn_proc.h>
75 : : #include <linux/freezer.h>
76 : : #include <linux/delayacct.h>
77 : : #include <linux/taskstats_kern.h>
78 : : #include <linux/random.h>
79 : : #include <linux/tty.h>
80 : : #include <linux/blkdev.h>
81 : : #include <linux/fs_struct.h>
82 : : #include <linux/magic.h>
83 : : #include <linux/perf_event.h>
84 : : #include <linux/posix-timers.h>
85 : : #include <linux/user-return-notifier.h>
86 : : #include <linux/oom.h>
87 : : #include <linux/khugepaged.h>
88 : : #include <linux/signalfd.h>
89 : : #include <linux/uprobes.h>
90 : : #include <linux/aio.h>
91 : : #include <linux/compiler.h>
92 : : #include <linux/sysctl.h>
93 : : #include <linux/kcov.h>
94 : : #include <linux/livepatch.h>
95 : : #include <linux/thread_info.h>
96 : : #include <linux/stackleak.h>
97 : :
98 : : #include <asm/pgtable.h>
99 : : #include <asm/pgalloc.h>
100 : : #include <linux/uaccess.h>
101 : : #include <asm/mmu_context.h>
102 : : #include <asm/cacheflush.h>
103 : : #include <asm/tlbflush.h>
104 : :
105 : : #include <trace/events/sched.h>
106 : :
107 : : #define CREATE_TRACE_POINTS
108 : : #include <trace/events/task.h>
109 : :
110 : : /*
111 : : * Minimum number of threads to boot the kernel
112 : : */
113 : : #define MIN_THREADS 20
114 : :
115 : : /*
116 : : * Maximum number of threads
117 : : */
118 : : #define MAX_THREADS FUTEX_TID_MASK
119 : :
120 : : /*
121 : : * Protected counters by write_lock_irq(&tasklist_lock)
122 : : */
123 : : unsigned long total_forks; /* Handle normal Linux uptimes. */
124 : : int nr_threads; /* The idle threads do not count.. */
125 : :
126 : : static int max_threads; /* tunable limit on nr_threads */
127 : :
128 : : #define NAMED_ARRAY_INDEX(x) [x] = __stringify(x)
129 : :
130 : : static const char * const resident_page_types[] = {
131 : : NAMED_ARRAY_INDEX(MM_FILEPAGES),
132 : : NAMED_ARRAY_INDEX(MM_ANONPAGES),
133 : : NAMED_ARRAY_INDEX(MM_SWAPENTS),
134 : : NAMED_ARRAY_INDEX(MM_SHMEMPAGES),
135 : : };
136 : :
137 : : DEFINE_PER_CPU(unsigned long, process_counts) = 0;
138 : :
139 : : __cacheline_aligned DEFINE_RWLOCK(tasklist_lock); /* outer */
140 : :
141 : : #ifdef CONFIG_PROVE_RCU
142 : : int lockdep_tasklist_lock_is_held(void)
143 : : {
144 : : return lockdep_is_held(&tasklist_lock);
145 : : }
146 : : EXPORT_SYMBOL_GPL(lockdep_tasklist_lock_is_held);
147 : : #endif /* #ifdef CONFIG_PROVE_RCU */
148 : :
149 : 21566 : int nr_processes(void)
150 : : {
151 : : int cpu;
152 : : int total = 0;
153 : :
154 [ + + ]: 129388 : for_each_possible_cpu(cpu)
155 : 86256 : total += per_cpu(process_counts, cpu);
156 : :
157 : 21566 : return total;
158 : : }
159 : :
160 : 281230 : void __weak arch_release_task_struct(struct task_struct *tsk)
161 : : {
162 : 281230 : }
163 : :
164 : : #ifndef CONFIG_ARCH_TASK_STRUCT_ALLOCATOR
165 : : static struct kmem_cache *task_struct_cachep;
166 : :
167 : : static inline struct task_struct *alloc_task_struct_node(int node)
168 : : {
169 : 355938 : return kmem_cache_alloc_node(task_struct_cachep, GFP_KERNEL, node);
170 : : }
171 : :
172 : : static inline void free_task_struct(struct task_struct *tsk)
173 : : {
174 : 281196 : kmem_cache_free(task_struct_cachep, tsk);
175 : : }
176 : : #endif
177 : :
178 : : #ifndef CONFIG_ARCH_THREAD_STACK_ALLOCATOR
179 : :
180 : : /*
181 : : * Allocate pages if THREAD_SIZE is >= PAGE_SIZE, otherwise use a
182 : : * kmemcache based allocator.
183 : : */
184 : : # if THREAD_SIZE >= PAGE_SIZE || defined(CONFIG_VMAP_STACK)
185 : :
186 : : #ifdef CONFIG_VMAP_STACK
187 : : /*
188 : : * vmalloc() is a bit slow, and calling vfree() enough times will force a TLB
189 : : * flush. Try to minimize the number of calls by caching stacks.
190 : : */
191 : : #define NR_CACHED_STACKS 2
192 : : static DEFINE_PER_CPU(struct vm_struct *, cached_stacks[NR_CACHED_STACKS]);
193 : :
194 : : static int free_vm_stack_cache(unsigned int cpu)
195 : : {
196 : : struct vm_struct **cached_vm_stacks = per_cpu_ptr(cached_stacks, cpu);
197 : : int i;
198 : :
199 : : for (i = 0; i < NR_CACHED_STACKS; i++) {
200 : : struct vm_struct *vm_stack = cached_vm_stacks[i];
201 : :
202 : : if (!vm_stack)
203 : : continue;
204 : :
205 : : vfree(vm_stack->addr);
206 : : cached_vm_stacks[i] = NULL;
207 : : }
208 : :
209 : : return 0;
210 : : }
211 : : #endif
212 : :
213 : 355940 : static unsigned long *alloc_thread_stack_node(struct task_struct *tsk, int node)
214 : : {
215 : : #ifdef CONFIG_VMAP_STACK
216 : : void *stack;
217 : : int i;
218 : :
219 : : for (i = 0; i < NR_CACHED_STACKS; i++) {
220 : : struct vm_struct *s;
221 : :
222 : : s = this_cpu_xchg(cached_stacks[i], NULL);
223 : :
224 : : if (!s)
225 : : continue;
226 : :
227 : : /* Clear stale pointers from reused stack. */
228 : : memset(s->addr, 0, THREAD_SIZE);
229 : :
230 : : tsk->stack_vm_area = s;
231 : : tsk->stack = s->addr;
232 : : return s->addr;
233 : : }
234 : :
235 : : /*
236 : : * Allocated stacks are cached and later reused by new threads,
237 : : * so memcg accounting is performed manually on assigning/releasing
238 : : * stacks to tasks. Drop __GFP_ACCOUNT.
239 : : */
240 : : stack = __vmalloc_node_range(THREAD_SIZE, THREAD_ALIGN,
241 : : VMALLOC_START, VMALLOC_END,
242 : : THREADINFO_GFP & ~__GFP_ACCOUNT,
243 : : PAGE_KERNEL,
244 : : 0, node, __builtin_return_address(0));
245 : :
246 : : /*
247 : : * We can't call find_vm_area() in interrupt context, and
248 : : * free_thread_stack() can be called in interrupt context,
249 : : * so cache the vm_struct.
250 : : */
251 : : if (stack) {
252 : : tsk->stack_vm_area = find_vm_area(stack);
253 : : tsk->stack = stack;
254 : : }
255 : : return stack;
256 : : #else
257 : : struct page *page = alloc_pages_node(node, THREADINFO_GFP,
258 : : THREAD_SIZE_ORDER);
259 : :
260 [ + + ]: 355940 : if (likely(page)) {
261 : 355934 : tsk->stack = page_address(page);
262 : 355934 : return tsk->stack;
263 : : }
264 : : return NULL;
265 : : #endif
266 : : }
267 : :
268 : 281222 : static inline void free_thread_stack(struct task_struct *tsk)
269 : : {
270 : : #ifdef CONFIG_VMAP_STACK
271 : : struct vm_struct *vm = task_stack_vm_area(tsk);
272 : :
273 : : if (vm) {
274 : : int i;
275 : :
276 : : for (i = 0; i < THREAD_SIZE / PAGE_SIZE; i++) {
277 : : mod_memcg_page_state(vm->pages[i],
278 : : MEMCG_KERNEL_STACK_KB,
279 : : -(int)(PAGE_SIZE / 1024));
280 : :
281 : : memcg_kmem_uncharge(vm->pages[i], 0);
282 : : }
283 : :
284 : : for (i = 0; i < NR_CACHED_STACKS; i++) {
285 : : if (this_cpu_cmpxchg(cached_stacks[i],
286 : : NULL, tsk->stack_vm_area) != NULL)
287 : : continue;
288 : :
289 : : return;
290 : : }
291 : :
292 : : vfree_atomic(tsk->stack);
293 : : return;
294 : : }
295 : : #endif
296 : :
297 : 281222 : __free_pages(virt_to_page(tsk->stack), THREAD_SIZE_ORDER);
298 : 281234 : }
299 : : # else
300 : : static struct kmem_cache *thread_stack_cache;
301 : :
302 : : static unsigned long *alloc_thread_stack_node(struct task_struct *tsk,
303 : : int node)
304 : : {
305 : : unsigned long *stack;
306 : : stack = kmem_cache_alloc_node(thread_stack_cache, THREADINFO_GFP, node);
307 : : tsk->stack = stack;
308 : : return stack;
309 : : }
310 : :
311 : : static void free_thread_stack(struct task_struct *tsk)
312 : : {
313 : : kmem_cache_free(thread_stack_cache, tsk->stack);
314 : : }
315 : :
316 : : void thread_stack_cache_init(void)
317 : : {
318 : : thread_stack_cache = kmem_cache_create_usercopy("thread_stack",
319 : : THREAD_SIZE, THREAD_SIZE, 0, 0,
320 : : THREAD_SIZE, NULL);
321 : : BUG_ON(thread_stack_cache == NULL);
322 : : }
323 : : # endif
324 : : #endif
325 : :
326 : : /* SLAB cache for signal_struct structures (tsk->signal) */
327 : : static struct kmem_cache *signal_cachep;
328 : :
329 : : /* SLAB cache for sighand_struct structures (tsk->sighand) */
330 : : struct kmem_cache *sighand_cachep;
331 : :
332 : : /* SLAB cache for files_struct structures (tsk->files) */
333 : : struct kmem_cache *files_cachep;
334 : :
335 : : /* SLAB cache for fs_struct structures (tsk->fs) */
336 : : struct kmem_cache *fs_cachep;
337 : :
338 : : /* SLAB cache for vm_area_struct structures */
339 : : static struct kmem_cache *vm_area_cachep;
340 : :
341 : : /* SLAB cache for mm_struct structures (tsk->mm) */
342 : : static struct kmem_cache *mm_cachep;
343 : :
344 : 8023376 : struct vm_area_struct *vm_area_alloc(struct mm_struct *mm)
345 : : {
346 : : struct vm_area_struct *vma;
347 : :
348 : 8023376 : vma = kmem_cache_alloc(vm_area_cachep, GFP_KERNEL);
349 [ + + ]: 8023510 : if (vma)
350 : : vma_init(vma, mm);
351 : 8023510 : return vma;
352 : : }
353 : :
354 : 27622546 : struct vm_area_struct *vm_area_dup(struct vm_area_struct *orig)
355 : : {
356 : 27622546 : struct vm_area_struct *new = kmem_cache_alloc(vm_area_cachep, GFP_KERNEL);
357 : :
358 [ + + ]: 27622454 : if (new) {
359 : 27622382 : *new = *orig;
360 : 27622382 : INIT_LIST_HEAD(&new->anon_vma_chain);
361 : : }
362 : 27622454 : return new;
363 : : }
364 : :
365 : 32948466 : void vm_area_free(struct vm_area_struct *vma)
366 : : {
367 : 32948446 : kmem_cache_free(vm_area_cachep, vma);
368 : 32948612 : }
369 : :
370 : 637090 : static void account_kernel_stack(struct task_struct *tsk, int account)
371 : : {
372 : 637090 : void *stack = task_stack_page(tsk);
373 : : struct vm_struct *vm = task_stack_vm_area(tsk);
374 : :
375 : : BUILD_BUG_ON(IS_ENABLED(CONFIG_VMAP_STACK) && PAGE_SIZE % 1024 != 0);
376 : :
377 : : if (vm) {
378 : : int i;
379 : :
380 : : BUG_ON(vm->nr_pages != THREAD_SIZE / PAGE_SIZE);
381 : :
382 : : for (i = 0; i < THREAD_SIZE / PAGE_SIZE; i++) {
383 : : mod_zone_page_state(page_zone(vm->pages[i]),
384 : : NR_KERNEL_STACK_KB,
385 : : PAGE_SIZE / 1024 * account);
386 : : }
387 : : } else {
388 : : /*
389 : : * All stack pages are in the same zone and belong to the
390 : : * same memcg.
391 : : */
392 : 637090 : struct page *first_page = virt_to_page(stack);
393 : :
394 : 637090 : mod_zone_page_state(page_zone(first_page), NR_KERNEL_STACK_KB,
395 : 637090 : THREAD_SIZE / 1024 * account);
396 : :
397 : 637192 : mod_memcg_obj_state(stack, MEMCG_KERNEL_STACK_KB,
398 : : account * (THREAD_SIZE / 1024));
399 : : }
400 : 637180 : }
401 : :
402 : : static int memcg_charge_kernel_stack(struct task_struct *tsk)
403 : : {
404 : : #ifdef CONFIG_VMAP_STACK
405 : : struct vm_struct *vm = task_stack_vm_area(tsk);
406 : : int ret;
407 : :
408 : : if (vm) {
409 : : int i;
410 : :
411 : : for (i = 0; i < THREAD_SIZE / PAGE_SIZE; i++) {
412 : : /*
413 : : * If memcg_kmem_charge() fails, page->mem_cgroup
414 : : * pointer is NULL, and both memcg_kmem_uncharge()
415 : : * and mod_memcg_page_state() in free_thread_stack()
416 : : * will ignore this page. So it's safe.
417 : : */
418 : : ret = memcg_kmem_charge(vm->pages[i], GFP_KERNEL, 0);
419 : : if (ret)
420 : : return ret;
421 : :
422 : : mod_memcg_page_state(vm->pages[i],
423 : : MEMCG_KERNEL_STACK_KB,
424 : : PAGE_SIZE / 1024);
425 : : }
426 : : }
427 : : #endif
428 : : return 0;
429 : : }
430 : :
431 : 281240 : static void release_task_stack(struct task_struct *tsk)
432 : : {
433 [ - + + - ]: 281240 : if (WARN_ON(tsk->state != TASK_DEAD))
434 : 281216 : return; /* Better to leak the stack than to free prematurely */
435 : :
436 : 281200 : account_kernel_stack(tsk, -1);
437 : 281234 : free_thread_stack(tsk);
438 : 281216 : tsk->stack = NULL;
439 : : #ifdef CONFIG_VMAP_STACK
440 : : tsk->stack_vm_area = NULL;
441 : : #endif
442 : : }
443 : :
444 : : #ifdef CONFIG_THREAD_INFO_IN_TASK
445 : : void put_task_stack(struct task_struct *tsk)
446 : : {
447 : : if (refcount_dec_and_test(&tsk->stack_refcount))
448 : : release_task_stack(tsk);
449 : : }
450 : : #endif
451 : :
452 : 281232 : void free_task(struct task_struct *tsk)
453 : : {
454 : : #ifndef CONFIG_THREAD_INFO_IN_TASK
455 : : /*
456 : : * The task is finally done with both the stack and thread_info,
457 : : * so free both.
458 : : */
459 : 281232 : release_task_stack(tsk);
460 : : #else
461 : : /*
462 : : * If the task had a separate stack allocation, it should be gone
463 : : * by now.
464 : : */
465 : : WARN_ON_ONCE(refcount_read(&tsk->stack_refcount) != 0);
466 : : #endif
467 : : rt_mutex_debug_task_free(tsk);
468 : 281190 : ftrace_graph_exit_task(tsk);
469 : 281214 : put_seccomp_filter(tsk);
470 : 281206 : arch_release_task_struct(tsk);
471 [ + + ]: 281198 : if (tsk->flags & PF_KTHREAD)
472 : 8480 : free_kthread_struct(tsk);
473 : : free_task_struct(tsk);
474 : 281238 : }
475 : : EXPORT_SYMBOL(free_task);
476 : :
477 : : #ifdef CONFIG_MMU
478 : 275148 : static __latent_entropy int dup_mmap(struct mm_struct *mm,
479 : : struct mm_struct *oldmm)
480 : : {
481 : : struct vm_area_struct *mpnt, *tmp, *prev, **pprev;
482 : : struct rb_node **rb_link, *rb_parent;
483 : : int retval;
484 : : unsigned long charge;
485 : 275148 : LIST_HEAD(uf);
486 : :
487 : : uprobe_start_dup_mmap();
488 [ + + ]: 275148 : if (down_write_killable(&oldmm->mmap_sem)) {
489 : : retval = -EINTR;
490 : : goto fail_uprobe_end;
491 : : }
492 : 275154 : flush_cache_dup_mm(oldmm);
493 : : uprobe_dup_mmap(oldmm, mm);
494 : : /*
495 : : * Not linked in yet - no deadlock potential:
496 : : */
497 : 275156 : down_write_nested(&mm->mmap_sem, SINGLE_DEPTH_NESTING);
498 : :
499 : : /* No ordering required: file already has been exposed. */
500 : 275156 : RCU_INIT_POINTER(mm->exe_file, get_mm_exe_file(oldmm));
501 : :
502 : 275144 : mm->total_vm = oldmm->total_vm;
503 : 275144 : mm->data_vm = oldmm->data_vm;
504 : 275144 : mm->exec_vm = oldmm->exec_vm;
505 : 275144 : mm->stack_vm = oldmm->stack_vm;
506 : :
507 : 275144 : rb_link = &mm->mm_rb.rb_node;
508 : : rb_parent = NULL;
509 : 275144 : pprev = &mm->mmap;
510 : : retval = ksm_fork(mm, oldmm);
511 : : if (retval)
512 : : goto out;
513 : : retval = khugepaged_fork(mm, oldmm);
514 : : if (retval)
515 : : goto out;
516 : :
517 : : prev = NULL;
518 [ + + ]: 20374916 : for (mpnt = oldmm->mmap; mpnt; mpnt = mpnt->vm_next) {
519 : : struct file *file;
520 : :
521 [ + + ]: 20099782 : if (mpnt->vm_flags & VM_DONTCOPY) {
522 : 68 : vm_stat_account(mm, mpnt->vm_flags, -vma_pages(mpnt));
523 : 0 : continue;
524 : : }
525 : : charge = 0;
526 : : /*
527 : : * Don't duplicate many vmas if we've been oom-killed (for
528 : : * example)
529 : : */
530 [ + + ]: 40199508 : if (fatal_signal_pending(current)) {
531 : : retval = -EINTR;
532 : : goto out;
533 : : }
534 [ + + ]: 20099724 : if (mpnt->vm_flags & VM_ACCOUNT) {
535 : : unsigned long len = vma_pages(mpnt);
536 : :
537 [ + + ]: 10591208 : if (security_vm_enough_memory_mm(oldmm, len)) /* sic */
538 : : goto fail_nomem;
539 : : charge = len;
540 : : }
541 : 20099764 : tmp = vm_area_dup(mpnt);
542 [ + + ]: 20099830 : if (!tmp)
543 : : goto fail_nomem;
544 : : retval = vma_dup_policy(mpnt, tmp);
545 : : if (retval)
546 : : goto fail_nomem_policy;
547 : 20099774 : tmp->vm_mm = mm;
548 : : retval = dup_userfaultfd(tmp, &uf);
549 : : if (retval)
550 : : goto fail_nomem_anon_vma_fork;
551 [ - + ]: 20099774 : if (tmp->vm_flags & VM_WIPEONFORK) {
552 : : /* VM_WIPEONFORK gets a clean slate in the child. */
553 : 0 : tmp->anon_vma = NULL;
554 [ + - ]: 46 : if (anon_vma_prepare(tmp))
555 : : goto fail_nomem_anon_vma_fork;
556 [ + + ]: 20099774 : } else if (anon_vma_fork(tmp, mpnt))
557 : : goto fail_nomem_anon_vma_fork;
558 : 20099486 : tmp->vm_flags &= ~(VM_LOCKED | VM_LOCKONFAULT);
559 : 20099486 : tmp->vm_next = tmp->vm_prev = NULL;
560 : 20099486 : file = tmp->vm_file;
561 [ + + ]: 20099486 : if (file) {
562 : : struct inode *inode = file_inode(file);
563 : 17065476 : struct address_space *mapping = file->f_mapping;
564 : :
565 : : get_file(file);
566 [ + + ]: 17065780 : if (tmp->vm_flags & VM_DENYWRITE)
567 : 1650514 : atomic_dec(&inode->i_writecount);
568 : : i_mmap_lock_write(mapping);
569 [ + + ]: 17065788 : if (tmp->vm_flags & VM_SHARED)
570 : 3236 : atomic_inc(&mapping->i_mmap_writable);
571 : : flush_dcache_mmap_lock(mapping);
572 : : /* insert tmp into the share list, just after mpnt */
573 : 17065848 : vma_interval_tree_insert_after(tmp, mpnt,
574 : : &mapping->i_mmap);
575 : : flush_dcache_mmap_unlock(mapping);
576 : : i_mmap_unlock_write(mapping);
577 : : }
578 : :
579 : : /*
580 : : * Clear hugetlb-related page reserves for children. This only
581 : : * affects MAP_PRIVATE mappings. Faults generated by the child
582 : : * are not guaranteed to succeed, even if read-only
583 : : */
584 : : if (is_vm_hugetlb_page(tmp))
585 : : reset_vma_resv_huge_pages(tmp);
586 : :
587 : : /*
588 : : * Link in the new vma and copy the page table entries.
589 : : */
590 : 20099858 : *pprev = tmp;
591 : 20099858 : pprev = &tmp->vm_next;
592 : 20099858 : tmp->vm_prev = prev;
593 : : prev = tmp;
594 : :
595 : 20099858 : __vma_link_rb(mm, tmp, rb_link, rb_parent);
596 : 20099788 : rb_link = &tmp->vm_rb.rb_right;
597 : 20099788 : rb_parent = &tmp->vm_rb;
598 : :
599 : 20099788 : mm->map_count++;
600 [ + + ]: 20099788 : if (!(tmp->vm_flags & VM_WIPEONFORK))
601 : 20099840 : retval = copy_page_range(mm, oldmm, mpnt);
602 : :
603 [ + + + + ]: 20099772 : if (tmp->vm_ops && tmp->vm_ops->open)
604 : 2428 : tmp->vm_ops->open(tmp);
605 : :
606 [ + - ]: 20099772 : if (retval)
607 : : goto out;
608 : : }
609 : : /* a new mm has just been created */
610 : : retval = arch_dup_mmap(oldmm, mm);
611 : : out:
612 : 275164 : up_write(&mm->mmap_sem);
613 : 275156 : flush_tlb_mm(oldmm);
614 : 275156 : up_write(&oldmm->mmap_sem);
615 : : dup_userfaultfd_complete(&uf);
616 : : fail_uprobe_end:
617 : : uprobe_end_dup_mmap();
618 : 275158 : return retval;
619 : : fail_nomem_anon_vma_fork:
620 : : mpol_put(vma_policy(tmp));
621 : : fail_nomem_policy:
622 : : vm_area_free(tmp);
623 : : fail_nomem:
624 : : retval = -ENOMEM;
625 : 108 : vm_unacct_memory(charge);
626 : : goto out;
627 : : }
628 : :
629 : : static inline int mm_alloc_pgd(struct mm_struct *mm)
630 : : {
631 : 513932 : mm->pgd = pgd_alloc(mm);
632 [ + - ]: 513930 : if (unlikely(!mm->pgd))
633 : : return -ENOMEM;
634 : : return 0;
635 : : }
636 : :
637 : : static inline void mm_free_pgd(struct mm_struct *mm)
638 : : {
639 : 494958 : pgd_free(mm, mm->pgd);
640 : : }
641 : : #else
642 : : static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
643 : : {
644 : : down_write(&oldmm->mmap_sem);
645 : : RCU_INIT_POINTER(mm->exe_file, get_mm_exe_file(oldmm));
646 : : up_write(&oldmm->mmap_sem);
647 : : return 0;
648 : : }
649 : : #define mm_alloc_pgd(mm) (0)
650 : : #define mm_free_pgd(mm)
651 : : #endif /* CONFIG_MMU */
652 : :
653 : 494952 : static void check_mm(struct mm_struct *mm)
654 : : {
655 : : int i;
656 : :
657 : : BUILD_BUG_ON_MSG(ARRAY_SIZE(resident_page_types) != NR_MM_COUNTERS,
658 : : "Please make sure 'struct resident_page_types[]' is updated as well");
659 : :
660 [ + + ]: 2474756 : for (i = 0; i < NR_MM_COUNTERS; i++) {
661 : 1979808 : long x = atomic_long_read(&mm->rss_stat.count[i]);
662 : :
663 [ - + ]: 1979808 : if (unlikely(x))
664 : 0 : pr_alert("BUG: Bad rss-counter state mm:%p type:%s val:%ld\n",
665 : : mm, resident_page_types[i], x);
666 : : }
667 : :
668 [ - + ]: 494948 : if (mm_pgtables_bytes(mm))
669 : 0 : pr_alert("BUG: non-zero pgtables_bytes on freeing mm: %ld\n",
670 : : mm_pgtables_bytes(mm));
671 : :
672 : : #if defined(CONFIG_TRANSPARENT_HUGEPAGE) && !USE_SPLIT_PMD_PTLOCKS
673 : : VM_BUG_ON_MM(mm->pmd_huge_pte, mm);
674 : : #endif
675 : 494948 : }
676 : :
677 : : #define allocate_mm() (kmem_cache_alloc(mm_cachep, GFP_KERNEL))
678 : : #define free_mm(mm) (kmem_cache_free(mm_cachep, (mm)))
679 : :
680 : : /*
681 : : * Called when the last reference to the mm
682 : : * is dropped: either by a lazy thread or by
683 : : * mmput. Free the page directory and the mm.
684 : : */
685 : 494960 : void __mmdrop(struct mm_struct *mm)
686 : : {
687 [ - + ]: 494960 : BUG_ON(mm == &init_mm);
688 [ - + # # ]: 494960 : WARN_ON_ONCE(mm == current->mm);
689 [ - + # # ]: 494958 : WARN_ON_ONCE(mm == current->active_mm);
690 : : mm_free_pgd(mm);
691 : : destroy_context(mm);
692 : : mmu_notifier_mm_destroy(mm);
693 : 494960 : check_mm(mm);
694 : 494950 : put_user_ns(mm->user_ns);
695 : 494946 : free_mm(mm);
696 : 494962 : }
697 : : EXPORT_SYMBOL_GPL(__mmdrop);
698 : :
699 : 0 : static void mmdrop_async_fn(struct work_struct *work)
700 : : {
701 : : struct mm_struct *mm;
702 : :
703 : 0 : mm = container_of(work, struct mm_struct, async_put_work);
704 : 0 : __mmdrop(mm);
705 : 0 : }
706 : :
707 : 0 : static void mmdrop_async(struct mm_struct *mm)
708 : : {
709 [ # # ]: 0 : if (unlikely(atomic_dec_and_test(&mm->mm_count))) {
710 : 0 : INIT_WORK(&mm->async_put_work, mmdrop_async_fn);
711 : 0 : schedule_work(&mm->async_put_work);
712 : : }
713 : 0 : }
714 : :
715 : 272274 : static inline void free_signal_struct(struct signal_struct *sig)
716 : : {
717 : : taskstats_tgid_free(sig);
718 : 272274 : sched_autogroup_exit(sig);
719 : : /*
720 : : * __mmdrop is not safe to call from softirq context on x86 due to
721 : : * pgd_dtor so postpone it to the async context
722 : : */
723 [ - + ]: 272324 : if (sig->oom_mm)
724 : 0 : mmdrop_async(sig->oom_mm);
725 : 272324 : kmem_cache_free(signal_cachep, sig);
726 : 272316 : }
727 : :
728 : 281256 : static inline void put_signal_struct(struct signal_struct *sig)
729 : : {
730 [ + + ]: 281256 : if (refcount_dec_and_test(&sig->sigcnt))
731 : 272272 : free_signal_struct(sig);
732 : 281306 : }
733 : :
734 : 281242 : void __put_task_struct(struct task_struct *tsk)
735 : : {
736 [ - + ]: 281242 : WARN_ON(!tsk->exit_state);
737 [ - + ]: 281238 : WARN_ON(refcount_read(&tsk->usage));
738 [ - + ]: 281238 : WARN_ON(tsk == current);
739 : :
740 : 281238 : cgroup_free(tsk);
741 : : task_numa_free(tsk, true);
742 : 281244 : security_task_free(tsk);
743 : 281256 : exit_creds(tsk);
744 : : delayacct_tsk_free(tsk);
745 : 281382 : put_signal_struct(tsk->signal);
746 : :
747 [ + + ]: 281244 : if (!profile_handoff_task(tsk))
748 : 281256 : free_task(tsk);
749 : 281250 : }
750 : : EXPORT_SYMBOL_GPL(__put_task_struct);
751 : :
752 : 404 : void __init __weak arch_task_cache_init(void) { }
753 : :
754 : : /*
755 : : * set_max_threads
756 : : */
757 : 404 : static void set_max_threads(unsigned int max_threads_suggested)
758 : : {
759 : : u64 threads;
760 : : unsigned long nr_pages = totalram_pages();
761 : :
762 : : /*
763 : : * The number of threads shall be limited such that the thread
764 : : * structures may only consume a small part of the available memory.
765 : : */
766 [ + - ]: 808 : if (fls64(nr_pages) + fls64(PAGE_SIZE) > 64)
767 : : threads = MAX_THREADS;
768 : : else
769 : 404 : threads = div64_u64((u64) nr_pages * (u64) PAGE_SIZE,
770 : : (u64) THREAD_SIZE * 8UL);
771 : :
772 [ - + ]: 404 : if (threads > max_threads_suggested)
773 : : threads = max_threads_suggested;
774 : :
775 : 404 : max_threads = clamp_t(u64, threads, MIN_THREADS, MAX_THREADS);
776 : 404 : }
777 : :
778 : : #ifdef CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT
779 : : /* Initialized by the architecture: */
780 : : int arch_task_struct_size __read_mostly;
781 : : #endif
782 : :
783 : : #ifndef CONFIG_ARCH_TASK_STRUCT_ALLOCATOR
784 : : static void task_struct_whitelist(unsigned long *offset, unsigned long *size)
785 : : {
786 : : /* Fetch thread_struct whitelist for the architecture. */
787 : : arch_thread_struct_whitelist(offset, size);
788 : :
789 : : /*
790 : : * Handle zero-sized whitelist or empty thread_struct, otherwise
791 : : * adjust offset to position of thread_struct in task_struct.
792 : : */
793 : : if (unlikely(*size == 0))
794 : : *offset = 0;
795 : : else
796 : : *offset += offsetof(struct task_struct, thread);
797 : : }
798 : : #endif /* CONFIG_ARCH_TASK_STRUCT_ALLOCATOR */
799 : :
800 : 404 : void __init fork_init(void)
801 : : {
802 : : int i;
803 : : #ifndef CONFIG_ARCH_TASK_STRUCT_ALLOCATOR
804 : : #ifndef ARCH_MIN_TASKALIGN
805 : : #define ARCH_MIN_TASKALIGN 0
806 : : #endif
807 : : int align = max_t(int, L1_CACHE_BYTES, ARCH_MIN_TASKALIGN);
808 : : unsigned long useroffset, usersize;
809 : :
810 : : /* create a slab on which task_structs can be allocated */
811 : : task_struct_whitelist(&useroffset, &usersize);
812 : 404 : task_struct_cachep = kmem_cache_create_usercopy("task_struct",
813 : : arch_task_struct_size, align,
814 : : SLAB_PANIC|SLAB_ACCOUNT,
815 : : useroffset, usersize, NULL);
816 : : #endif
817 : :
818 : : /* do the arch specific task caches init */
819 : 404 : arch_task_cache_init();
820 : :
821 : 404 : set_max_threads(MAX_THREADS);
822 : :
823 : 404 : init_task.signal->rlim[RLIMIT_NPROC].rlim_cur = max_threads/2;
824 : 404 : init_task.signal->rlim[RLIMIT_NPROC].rlim_max = max_threads/2;
825 : 404 : init_task.signal->rlim[RLIMIT_SIGPENDING] =
826 : 404 : init_task.signal->rlim[RLIMIT_NPROC];
827 : :
828 [ + + ]: 4040 : for (i = 0; i < UCOUNT_COUNTS; i++) {
829 : 3636 : init_user_ns.ucount_max[i] = max_threads/2;
830 : : }
831 : :
832 : : #ifdef CONFIG_VMAP_STACK
833 : : cpuhp_setup_state(CPUHP_BP_PREPARE_DYN, "fork:vm_stack_cache",
834 : : NULL, free_vm_stack_cache);
835 : : #endif
836 : :
837 : : lockdep_init_task(&init_task);
838 : : uprobes_init();
839 : 404 : }
840 : :
841 : 355938 : int __weak arch_dup_task_struct(struct task_struct *dst,
842 : : struct task_struct *src)
843 : : {
844 : 355938 : *dst = *src;
845 : 355938 : return 0;
846 : : }
847 : :
848 : 404 : void set_task_stack_end_magic(struct task_struct *tsk)
849 : : {
850 : : unsigned long *stackend;
851 : :
852 : : stackend = end_of_stack(tsk);
853 : 356342 : *stackend = STACK_END_MAGIC; /* for overflow detection */
854 : 404 : }
855 : :
856 : 355938 : static struct task_struct *dup_task_struct(struct task_struct *orig, int node)
857 : : {
858 : : struct task_struct *tsk;
859 : : unsigned long *stack;
860 : : struct vm_struct *stack_vm_area __maybe_unused;
861 : : int err;
862 : :
863 [ + + ]: 355938 : if (node == NUMA_NO_NODE)
864 : 354728 : node = tsk_fork_get_node(orig);
865 : : tsk = alloc_task_struct_node(node);
866 [ + - ]: 355940 : if (!tsk)
867 : : return NULL;
868 : :
869 : 355940 : stack = alloc_thread_stack_node(tsk, node);
870 [ + + ]: 355938 : if (!stack)
871 : : goto free_tsk;
872 : :
873 : : if (memcg_charge_kernel_stack(tsk))
874 : : goto free_stack;
875 : :
876 : : stack_vm_area = task_stack_vm_area(tsk);
877 : :
878 : 355936 : err = arch_dup_task_struct(tsk, orig);
879 : :
880 : : /*
881 : : * arch_dup_task_struct() clobbers the stack-related fields. Make
882 : : * sure they're properly initialized before using any stack-related
883 : : * functions again.
884 : : */
885 : 355938 : tsk->stack = stack;
886 : : #ifdef CONFIG_VMAP_STACK
887 : : tsk->stack_vm_area = stack_vm_area;
888 : : #endif
889 : : #ifdef CONFIG_THREAD_INFO_IN_TASK
890 : : refcount_set(&tsk->stack_refcount, 1);
891 : : #endif
892 : :
893 [ + - ]: 355938 : if (err)
894 : : goto free_stack;
895 : :
896 : : #ifdef CONFIG_SECCOMP
897 : : /*
898 : : * We must handle setting up seccomp filters once we're under
899 : : * the sighand lock in case orig has changed between now and
900 : : * then. Until then, filter must be NULL to avoid messing up
901 : : * the usage counts on the error path calling free_task.
902 : : */
903 : 355938 : tsk->seccomp.filter = NULL;
904 : : #endif
905 : :
906 : : setup_thread_stack(tsk, orig);
907 : : clear_user_return_notifier(tsk);
908 : : clear_tsk_need_resched(tsk);
909 : : set_task_stack_end_magic(tsk);
910 : :
911 : : #ifdef CONFIG_STACKPROTECTOR
912 : 355940 : tsk->stack_canary = get_random_canary();
913 : : #endif
914 [ + - ]: 355940 : if (orig->cpus_ptr == &orig->cpus_mask)
915 : 355940 : tsk->cpus_ptr = &tsk->cpus_mask;
916 : :
917 : : /*
918 : : * One for the user space visible state that goes away when reaped.
919 : : * One for the scheduler.
920 : : */
921 : : refcount_set(&tsk->rcu_users, 2);
922 : : /* One for the rcu users */
923 : : refcount_set(&tsk->usage, 1);
924 : : #ifdef CONFIG_BLK_DEV_IO_TRACE
925 : 355940 : tsk->btrace_seq = 0;
926 : : #endif
927 : 355940 : tsk->splice_pipe = NULL;
928 : 355940 : tsk->task_frag.page = NULL;
929 : 355940 : tsk->wake_q.next = NULL;
930 : :
931 : 355940 : account_kernel_stack(tsk, 1);
932 : :
933 : : kcov_task_init(tsk);
934 : :
935 : : #ifdef CONFIG_FAULT_INJECTION
936 : : tsk->fail_nth = 0;
937 : : #endif
938 : :
939 : : #ifdef CONFIG_BLK_CGROUP
940 : 355936 : tsk->throttle_queue = NULL;
941 : 355936 : tsk->use_memdelay = 0;
942 : : #endif
943 : :
944 : : #ifdef CONFIG_MEMCG
945 : 355936 : tsk->active_memcg = NULL;
946 : : #endif
947 : 355936 : return tsk;
948 : :
949 : : free_stack:
950 : 0 : free_thread_stack(tsk);
951 : : free_tsk:
952 : : free_task_struct(tsk);
953 : 0 : return NULL;
954 : : }
955 : :
956 : : __cacheline_aligned_in_smp DEFINE_SPINLOCK(mmlist_lock);
957 : :
958 : : static unsigned long default_dump_filter = MMF_DUMP_FILTER_DEFAULT;
959 : :
960 : 0 : static int __init coredump_filter_setup(char *s)
961 : : {
962 : 0 : default_dump_filter =
963 : 0 : (simple_strtoul(s, NULL, 0) << MMF_DUMP_FILTER_SHIFT) &
964 : : MMF_DUMP_FILTER_MASK;
965 : 0 : return 1;
966 : : }
967 : :
968 : : __setup("coredump_filter=", coredump_filter_setup);
969 : :
970 : : #include <linux/init_task.h>
971 : :
972 : : static void mm_init_aio(struct mm_struct *mm)
973 : : {
974 : : #ifdef CONFIG_AIO
975 : 513932 : spin_lock_init(&mm->ioctx_lock);
976 : 513932 : mm->ioctx_table = NULL;
977 : : #endif
978 : : }
979 : :
980 : : static __always_inline void mm_clear_owner(struct mm_struct *mm,
981 : : struct task_struct *p)
982 : : {
983 : : #ifdef CONFIG_MEMCG
984 [ # # ]: 0 : if (mm->owner == p)
985 : : WRITE_ONCE(mm->owner, NULL);
986 : : #endif
987 : : }
988 : :
989 : : static void mm_init_owner(struct mm_struct *mm, struct task_struct *p)
990 : : {
991 : : #ifdef CONFIG_MEMCG
992 : 513934 : mm->owner = p;
993 : : #endif
994 : : }
995 : :
996 : : static void mm_init_uprobes_state(struct mm_struct *mm)
997 : : {
998 : : #ifdef CONFIG_UPROBES
999 : : mm->uprobes_state.xol_area = NULL;
1000 : : #endif
1001 : : }
1002 : :
1003 : 513942 : static struct mm_struct *mm_init(struct mm_struct *mm, struct task_struct *p,
1004 : : struct user_namespace *user_ns)
1005 : : {
1006 : 513942 : mm->mmap = NULL;
1007 : 513942 : mm->mm_rb = RB_ROOT;
1008 : 513942 : mm->vmacache_seqnum = 0;
1009 : : atomic_set(&mm->mm_users, 1);
1010 : : atomic_set(&mm->mm_count, 1);
1011 : 513942 : init_rwsem(&mm->mmap_sem);
1012 : 513934 : INIT_LIST_HEAD(&mm->mmlist);
1013 : 513934 : mm->core_state = NULL;
1014 : : mm_pgtables_bytes_init(mm);
1015 : 513934 : mm->map_count = 0;
1016 : 513934 : mm->locked_vm = 0;
1017 : 513934 : atomic64_set(&mm->pinned_vm, 0);
1018 : 513932 : memset(&mm->rss_stat, 0, sizeof(mm->rss_stat));
1019 : 513932 : spin_lock_init(&mm->page_table_lock);
1020 : 513932 : spin_lock_init(&mm->arg_lock);
1021 : : mm_init_cpumask(mm);
1022 : : mm_init_aio(mm);
1023 : : mm_init_owner(mm, p);
1024 : : RCU_INIT_POINTER(mm->exe_file, NULL);
1025 : : mmu_notifier_mm_init(mm);
1026 : : init_tlb_flush_pending(mm);
1027 : : #if defined(CONFIG_TRANSPARENT_HUGEPAGE) && !USE_SPLIT_PMD_PTLOCKS
1028 : : mm->pmd_huge_pte = NULL;
1029 : : #endif
1030 : : mm_init_uprobes_state(mm);
1031 : :
1032 [ + + ]: 513932 : if (current->mm) {
1033 : 509084 : mm->flags = current->mm->flags & MMF_INIT_MASK;
1034 : 509084 : mm->def_flags = current->mm->def_flags & VM_INIT_DEF_MASK;
1035 : : } else {
1036 : 4848 : mm->flags = default_dump_filter;
1037 : 4848 : mm->def_flags = 0;
1038 : : }
1039 : :
1040 [ + - ]: 513930 : if (mm_alloc_pgd(mm))
1041 : : goto fail_nopgd;
1042 : :
1043 : : if (init_new_context(p, mm))
1044 : : goto fail_nocontext;
1045 : :
1046 : 513928 : mm->user_ns = get_user_ns(user_ns);
1047 : 513944 : return mm;
1048 : :
1049 : : fail_nocontext:
1050 : : mm_free_pgd(mm);
1051 : : fail_nopgd:
1052 : 0 : free_mm(mm);
1053 : 0 : return NULL;
1054 : : }
1055 : :
1056 : : /*
1057 : : * Allocate and initialize an mm_struct.
1058 : : */
1059 : 238778 : struct mm_struct *mm_alloc(void)
1060 : : {
1061 : : struct mm_struct *mm;
1062 : :
1063 : 238778 : mm = allocate_mm();
1064 [ + + ]: 238790 : if (!mm)
1065 : : return NULL;
1066 : :
1067 : 238790 : memset(mm, 0, sizeof(*mm));
1068 : 238790 : return mm_init(mm, current, current_user_ns());
1069 : : }
1070 : :
1071 : 495320 : static inline void __mmput(struct mm_struct *mm)
1072 : : {
1073 : : VM_BUG_ON(atomic_read(&mm->mm_users));
1074 : :
1075 : : uprobe_clear_state(mm);
1076 : 495320 : exit_aio(mm);
1077 : : ksm_exit(mm);
1078 : : khugepaged_exit(mm); /* must run before exit_mmap */
1079 : 495322 : exit_mmap(mm);
1080 : : mm_put_huge_zero_page(mm);
1081 : 495352 : set_mm_exe_file(mm, NULL);
1082 [ - + ]: 990700 : if (!list_empty(&mm->mmlist)) {
1083 : : spin_lock(&mmlist_lock);
1084 : : list_del(&mm->mmlist);
1085 : : spin_unlock(&mmlist_lock);
1086 : : }
1087 [ + - ]: 495342 : if (mm->binfmt)
1088 : 495342 : module_put(mm->binfmt->module);
1089 : 495350 : mmdrop(mm);
1090 : 495350 : }
1091 : :
1092 : : /*
1093 : : * Decrement the use count and release all resources for an mm.
1094 : : */
1095 : 742780 : void mmput(struct mm_struct *mm)
1096 : : {
1097 : 742780 : might_sleep();
1098 : :
1099 [ + + ]: 1485512 : if (atomic_dec_and_test(&mm->mm_users))
1100 : 495324 : __mmput(mm);
1101 : 742770 : }
1102 : : EXPORT_SYMBOL_GPL(mmput);
1103 : :
1104 : : #ifdef CONFIG_MMU
1105 : 0 : static void mmput_async_fn(struct work_struct *work)
1106 : : {
1107 : 0 : struct mm_struct *mm = container_of(work, struct mm_struct,
1108 : : async_put_work);
1109 : :
1110 : 0 : __mmput(mm);
1111 : 0 : }
1112 : :
1113 : 0 : void mmput_async(struct mm_struct *mm)
1114 : : {
1115 [ # # ]: 0 : if (atomic_dec_and_test(&mm->mm_users)) {
1116 : 0 : INIT_WORK(&mm->async_put_work, mmput_async_fn);
1117 : 0 : schedule_work(&mm->async_put_work);
1118 : : }
1119 : 0 : }
1120 : : #endif
1121 : :
1122 : : /**
1123 : : * set_mm_exe_file - change a reference to the mm's executable file
1124 : : *
1125 : : * This changes mm's executable file (shown as symlink /proc/[pid]/exe).
1126 : : *
1127 : : * Main users are mmput() and sys_execve(). Callers prevent concurrent
1128 : : * invocations: in mmput() nobody alive left, in execve task is single
1129 : : * threaded. sys_prctl(PR_SET_MM_MAP/EXE_FILE) also needs to set the
1130 : : * mm->exe_file, but does so without using set_mm_exe_file() in order
1131 : : * to do avoid the need for any locks.
1132 : : */
1133 : 734132 : void set_mm_exe_file(struct mm_struct *mm, struct file *new_exe_file)
1134 : : {
1135 : : struct file *old_exe_file;
1136 : :
1137 : : /*
1138 : : * It is safe to dereference the exe_file without RCU as
1139 : : * this function is only called if nobody else can access
1140 : : * this mm -- see comment above for justification.
1141 : : */
1142 : : old_exe_file = rcu_dereference_raw(mm->exe_file);
1143 : :
1144 [ + + ]: 734132 : if (new_exe_file)
1145 : : get_file(new_exe_file);
1146 : 734140 : rcu_assign_pointer(mm->exe_file, new_exe_file);
1147 [ + + ]: 734138 : if (old_exe_file)
1148 : 495352 : fput(old_exe_file);
1149 : 734138 : }
1150 : :
1151 : : /**
1152 : : * get_mm_exe_file - acquire a reference to the mm's executable file
1153 : : *
1154 : : * Returns %NULL if mm has no associated executable file.
1155 : : * User must release file via fput().
1156 : : */
1157 : 550324 : struct file *get_mm_exe_file(struct mm_struct *mm)
1158 : : {
1159 : : struct file *exe_file;
1160 : :
1161 : : rcu_read_lock();
1162 : : exe_file = rcu_dereference(mm->exe_file);
1163 [ + + - + ]: 1100624 : if (exe_file && !get_file_rcu(exe_file))
1164 : : exe_file = NULL;
1165 : : rcu_read_unlock();
1166 : 550318 : return exe_file;
1167 : : }
1168 : : EXPORT_SYMBOL(get_mm_exe_file);
1169 : :
1170 : : /**
1171 : : * get_task_exe_file - acquire a reference to the task's executable file
1172 : : *
1173 : : * Returns %NULL if task's mm (if any) has no associated executable file or
1174 : : * this is a kernel thread with borrowed mm (see the comment above get_task_mm).
1175 : : * User must release file via fput().
1176 : : */
1177 : 276310 : struct file *get_task_exe_file(struct task_struct *task)
1178 : : {
1179 : : struct file *exe_file = NULL;
1180 : : struct mm_struct *mm;
1181 : :
1182 : : task_lock(task);
1183 : 276316 : mm = task->mm;
1184 [ + + ]: 276316 : if (mm) {
1185 [ + + ]: 275188 : if (!(task->flags & PF_KTHREAD))
1186 : 275154 : exe_file = get_mm_exe_file(mm);
1187 : : }
1188 : : task_unlock(task);
1189 : 276274 : return exe_file;
1190 : : }
1191 : : EXPORT_SYMBOL(get_task_exe_file);
1192 : :
1193 : : /**
1194 : : * get_task_mm - acquire a reference to the task's mm
1195 : : *
1196 : : * Returns %NULL if the task has no mm. Checks PF_KTHREAD (meaning
1197 : : * this kernel workthread has transiently adopted a user mm with use_mm,
1198 : : * to do its AIO) is not set and if so returns a reference to it, after
1199 : : * bumping up the use count. User must release the mm via mmput()
1200 : : * after use. Typically used by /proc and ptrace.
1201 : : */
1202 : 227014 : struct mm_struct *get_task_mm(struct task_struct *task)
1203 : : {
1204 : : struct mm_struct *mm;
1205 : :
1206 : : task_lock(task);
1207 : 227012 : mm = task->mm;
1208 [ + + ]: 227012 : if (mm) {
1209 [ + + ]: 198550 : if (task->flags & PF_KTHREAD)
1210 : : mm = NULL;
1211 : : else
1212 : : mmget(mm);
1213 : : }
1214 : : task_unlock(task);
1215 : 227014 : return mm;
1216 : : }
1217 : : EXPORT_SYMBOL_GPL(get_task_mm);
1218 : :
1219 : 28692 : struct mm_struct *mm_access(struct task_struct *task, unsigned int mode)
1220 : : {
1221 : : struct mm_struct *mm;
1222 : : int err;
1223 : :
1224 : 28692 : err = mutex_lock_killable(&task->signal->cred_guard_mutex);
1225 [ - + ]: 28692 : if (err)
1226 : 0 : return ERR_PTR(err);
1227 : :
1228 : 28692 : mm = get_task_mm(task);
1229 [ + - + + : 70728 : if (mm && mm != current->mm &&
+ + ]
1230 : 13344 : !ptrace_may_access(task, mode)) {
1231 : 404 : mmput(mm);
1232 : : mm = ERR_PTR(-EACCES);
1233 : : }
1234 : 28692 : mutex_unlock(&task->signal->cred_guard_mutex);
1235 : :
1236 : 28692 : return mm;
1237 : : }
1238 : :
1239 : 11654 : static void complete_vfork_done(struct task_struct *tsk)
1240 : : {
1241 : : struct completion *vfork;
1242 : :
1243 : : task_lock(tsk);
1244 : 11660 : vfork = tsk->vfork_done;
1245 [ + + ]: 11660 : if (likely(vfork)) {
1246 : 11654 : tsk->vfork_done = NULL;
1247 : 11654 : complete(vfork);
1248 : : }
1249 : : task_unlock(tsk);
1250 : 11656 : }
1251 : :
1252 : 3178 : static int wait_for_vfork_done(struct task_struct *child,
1253 : : struct completion *vfork)
1254 : : {
1255 : : int killed;
1256 : :
1257 : : freezer_do_not_count();
1258 : 3178 : cgroup_enter_frozen();
1259 : 3178 : killed = wait_for_completion_killable(vfork);
1260 : 3178 : cgroup_leave_frozen(false);
1261 : 3178 : freezer_count();
1262 : :
1263 [ - + ]: 3178 : if (killed) {
1264 : : task_lock(child);
1265 : 0 : child->vfork_done = NULL;
1266 : : task_unlock(child);
1267 : : }
1268 : :
1269 : 3178 : put_task_struct(child);
1270 : 3178 : return killed;
1271 : : }
1272 : :
1273 : : /* Please note the differences between mmput and mm_release.
1274 : : * mmput is called whenever we stop holding onto a mm_struct,
1275 : : * error success whatever.
1276 : : *
1277 : : * mm_release is called after a mm_struct has been removed
1278 : : * from the current process.
1279 : : *
1280 : : * This difference is important for error handling, when we
1281 : : * only half set up a mm_struct for a new process and need to restore
1282 : : * the old one. Because we mmput the new mm_struct before
1283 : : * restoring the old one. . .
1284 : : * Eric Biederman 10 January 1998
1285 : : */
1286 : 520760 : static void mm_release(struct task_struct *tsk, struct mm_struct *mm)
1287 : : {
1288 : : uprobe_free_utask(tsk);
1289 : :
1290 : : /* Get rid of any cached register state */
1291 : : deactivate_mm(tsk, mm);
1292 : :
1293 : : /*
1294 : : * Signal userspace if we're not exiting with a core dump
1295 : : * because we want to leave the value intact for debugging
1296 : : * purposes.
1297 : : */
1298 [ + + ]: 520760 : if (tsk->clear_child_tid) {
1299 [ + + + + ]: 839764 : if (!(tsk->signal->flags & SIGNAL_GROUP_COREDUMP) &&
1300 : 419876 : atomic_read(&mm->mm_users) > 1) {
1301 : : /*
1302 : : * We don't check the error code - if userspace has
1303 : : * not set up a proper pointer then tough luck.
1304 : : */
1305 : 9092 : put_user(0, tsk->clear_child_tid);
1306 : 9092 : do_futex(tsk->clear_child_tid, FUTEX_WAKE,
1307 : : 1, NULL, NULL, 0, 0);
1308 : : }
1309 : 419882 : tsk->clear_child_tid = NULL;
1310 : : }
1311 : :
1312 : : /*
1313 : : * All done, finally we can wake up parent and return this mm to him.
1314 : : * Also kthread_stop() uses this completion for synchronization.
1315 : : */
1316 [ + + ]: 520754 : if (tsk->vfork_done)
1317 : 11660 : complete_vfork_done(tsk);
1318 : 520740 : }
1319 : :
1320 : 282000 : void exit_mm_release(struct task_struct *tsk, struct mm_struct *mm)
1321 : : {
1322 : 282000 : futex_exit_release(tsk);
1323 : 282010 : mm_release(tsk, mm);
1324 : 282020 : }
1325 : :
1326 : 238774 : void exec_mm_release(struct task_struct *tsk, struct mm_struct *mm)
1327 : : {
1328 : 238774 : futex_exec_release(tsk);
1329 : 238780 : mm_release(tsk, mm);
1330 : 238770 : }
1331 : :
1332 : : /**
1333 : : * dup_mm() - duplicates an existing mm structure
1334 : : * @tsk: the task_struct with which the new mm will be associated.
1335 : : * @oldmm: the mm to duplicate.
1336 : : *
1337 : : * Allocates a new mm structure and duplicates the provided @oldmm structure
1338 : : * content into it.
1339 : : *
1340 : : * Return: the duplicated mm or NULL on failure.
1341 : : */
1342 : 275142 : static struct mm_struct *dup_mm(struct task_struct *tsk,
1343 : : struct mm_struct *oldmm)
1344 : : {
1345 : : struct mm_struct *mm;
1346 : : int err;
1347 : :
1348 : 275142 : mm = allocate_mm();
1349 [ + - ]: 275156 : if (!mm)
1350 : : goto fail_nomem;
1351 : :
1352 : 275156 : memcpy(mm, oldmm, sizeof(*mm));
1353 : :
1354 [ + + ]: 275156 : if (!mm_init(mm, tsk, mm->user_ns))
1355 : : goto fail_nomem;
1356 : :
1357 : 275148 : err = dup_mmap(mm, oldmm);
1358 [ + + ]: 275156 : if (err)
1359 : : goto free_pt;
1360 : :
1361 : 275154 : mm->hiwater_rss = get_mm_rss(mm);
1362 : 275154 : mm->hiwater_vm = mm->total_vm;
1363 : :
1364 [ + - + - ]: 275154 : if (mm->binfmt && !try_module_get(mm->binfmt->module))
1365 : : goto free_pt;
1366 : :
1367 : 275154 : return mm;
1368 : :
1369 : : free_pt:
1370 : : /* don't put binfmt in mmput, we haven't got module yet */
1371 : 2 : mm->binfmt = NULL;
1372 : : mm_init_owner(mm, NULL);
1373 : 2 : mmput(mm);
1374 : :
1375 : : fail_nomem:
1376 : : return NULL;
1377 : : }
1378 : :
1379 : 355922 : static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
1380 : : {
1381 : : struct mm_struct *mm, *oldmm;
1382 : : int retval;
1383 : :
1384 : 355922 : tsk->min_flt = tsk->maj_flt = 0;
1385 : 355922 : tsk->nvcsw = tsk->nivcsw = 0;
1386 : : #ifdef CONFIG_DETECT_HUNG_TASK
1387 : 355922 : tsk->last_switch_count = tsk->nvcsw + tsk->nivcsw;
1388 : 355922 : tsk->last_switch_time = 0;
1389 : : #endif
1390 : :
1391 : 355922 : tsk->mm = NULL;
1392 : 355922 : tsk->active_mm = NULL;
1393 : :
1394 : : /*
1395 : : * Are we cloning a kernel thread?
1396 : : *
1397 : : * We need to steal a active VM for that..
1398 : : */
1399 : 355922 : oldmm = current->mm;
1400 [ + + ]: 355922 : if (!oldmm)
1401 : : return 0;
1402 : :
1403 : : /* initialize the new vmacache entries */
1404 : : vmacache_flush(tsk);
1405 : :
1406 [ + + ]: 311640 : if (clone_flags & CLONE_VM) {
1407 : : mmget(oldmm);
1408 : : mm = oldmm;
1409 : 36494 : goto good_mm;
1410 : : }
1411 : :
1412 : : retval = -ENOMEM;
1413 : 275148 : mm = dup_mm(tsk, current->mm);
1414 [ + - ]: 275156 : if (!mm)
1415 : : goto fail_nomem;
1416 : :
1417 : : good_mm:
1418 : 311650 : tsk->mm = mm;
1419 : 311650 : tsk->active_mm = mm;
1420 : 311650 : return 0;
1421 : :
1422 : : fail_nomem:
1423 : : return retval;
1424 : : }
1425 : :
1426 : 355940 : static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)
1427 : : {
1428 : 355940 : struct fs_struct *fs = current->fs;
1429 [ + + ]: 355940 : if (clone_flags & CLONE_FS) {
1430 : : /* tsk->fs is already what we want */
1431 : : spin_lock(&fs->lock);
1432 [ - + ]: 71948 : if (fs->in_exec) {
1433 : : spin_unlock(&fs->lock);
1434 : 0 : return -EAGAIN;
1435 : : }
1436 : 71948 : fs->users++;
1437 : : spin_unlock(&fs->lock);
1438 : 71950 : return 0;
1439 : : }
1440 : 283990 : tsk->fs = copy_fs_struct(fs);
1441 [ + - ]: 283984 : if (!tsk->fs)
1442 : : return -ENOMEM;
1443 : 283988 : return 0;
1444 : : }
1445 : :
1446 : 355926 : static int copy_files(unsigned long clone_flags, struct task_struct *tsk)
1447 : : {
1448 : : struct files_struct *oldf, *newf;
1449 : 355926 : int error = 0;
1450 : :
1451 : : /*
1452 : : * A background process may not have any files ...
1453 : : */
1454 : 355926 : oldf = current->files;
1455 [ + + ]: 355926 : if (!oldf)
1456 : : goto out;
1457 : :
1458 [ + + ]: 355916 : if (clone_flags & CLONE_FILES) {
1459 : 71546 : atomic_inc(&oldf->count);
1460 : : goto out;
1461 : : }
1462 : :
1463 : 284370 : newf = dup_fd(oldf, &error);
1464 [ + + ]: 284392 : if (!newf)
1465 : : goto out;
1466 : :
1467 : 284388 : tsk->files = newf;
1468 : 284388 : error = 0;
1469 : : out:
1470 : 355948 : return error;
1471 : : }
1472 : :
1473 : 355940 : static int copy_io(unsigned long clone_flags, struct task_struct *tsk)
1474 : : {
1475 : : #ifdef CONFIG_BLOCK
1476 : 355940 : struct io_context *ioc = current->io_context;
1477 : : struct io_context *new_ioc;
1478 : :
1479 [ + + ]: 355940 : if (!ioc)
1480 : : return 0;
1481 : : /*
1482 : : * Share io context with parent, if CLONE_IO is set
1483 : : */
1484 [ - + ]: 233440 : if (clone_flags & CLONE_IO) {
1485 : 0 : ioc_task_link(ioc);
1486 : 0 : tsk->io_context = ioc;
1487 [ - + ]: 233440 : } else if (ioprio_valid(ioc->ioprio)) {
1488 : 0 : new_ioc = get_task_io_context(tsk, GFP_KERNEL, NUMA_NO_NODE);
1489 [ # # ]: 0 : if (unlikely(!new_ioc))
1490 : : return -ENOMEM;
1491 : :
1492 : 0 : new_ioc->ioprio = ioc->ioprio;
1493 : 0 : put_io_context(new_ioc);
1494 : : }
1495 : : #endif
1496 : : return 0;
1497 : : }
1498 : :
1499 : 355936 : static int copy_sighand(unsigned long clone_flags, struct task_struct *tsk)
1500 : : {
1501 : : struct sighand_struct *sig;
1502 : :
1503 [ + + ]: 355936 : if (clone_flags & CLONE_SIGHAND) {
1504 : 33316 : refcount_inc(¤t->sighand->count);
1505 : 33316 : return 0;
1506 : : }
1507 : 322620 : sig = kmem_cache_alloc(sighand_cachep, GFP_KERNEL);
1508 : 322624 : rcu_assign_pointer(tsk->sighand, sig);
1509 [ + + ]: 322618 : if (!sig)
1510 : : return -ENOMEM;
1511 : :
1512 : : refcount_set(&sig->count, 1);
1513 : 322612 : spin_lock_irq(¤t->sighand->siglock);
1514 : 645244 : memcpy(sig->action, current->sighand->action, sizeof(sig->action));
1515 : 322622 : spin_unlock_irq(¤t->sighand->siglock);
1516 : 322612 : return 0;
1517 : : }
1518 : :
1519 : 282024 : void __cleanup_sighand(struct sighand_struct *sighand)
1520 : : {
1521 [ + + ]: 282024 : if (refcount_dec_and_test(&sighand->count)) {
1522 : 273072 : signalfd_cleanup(sighand);
1523 : : /*
1524 : : * sighand_cachep is SLAB_TYPESAFE_BY_RCU so we can free it
1525 : : * without an RCU grace period, see __lock_task_sighand().
1526 : : */
1527 : 273072 : kmem_cache_free(sighand_cachep, sighand);
1528 : : }
1529 : 282024 : }
1530 : :
1531 : : /*
1532 : : * Initialize POSIX timer handling for a thread group.
1533 : : */
1534 : : static void posix_cpu_timers_init_group(struct signal_struct *sig)
1535 : : {
1536 : 322610 : struct posix_cputimers *pct = &sig->posix_cputimers;
1537 : : unsigned long cpu_limit;
1538 : :
1539 : : cpu_limit = READ_ONCE(sig->rlim[RLIMIT_CPU].rlim_cur);
1540 : 322610 : posix_cputimers_group_init(pct, cpu_limit);
1541 : : }
1542 : :
1543 : 355926 : static int copy_signal(unsigned long clone_flags, struct task_struct *tsk)
1544 : : {
1545 : : struct signal_struct *sig;
1546 : :
1547 [ + + ]: 355926 : if (clone_flags & CLONE_THREAD)
1548 : : return 0;
1549 : :
1550 : 322608 : sig = kmem_cache_zalloc(signal_cachep, GFP_KERNEL);
1551 : 322622 : tsk->signal = sig;
1552 [ + - ]: 322622 : if (!sig)
1553 : : return -ENOMEM;
1554 : :
1555 : 322622 : sig->nr_threads = 1;
1556 : : atomic_set(&sig->live, 1);
1557 : : refcount_set(&sig->sigcnt, 1);
1558 : :
1559 : : /* list_add(thread_node, thread_head) without INIT_LIST_HEAD() */
1560 : 322622 : sig->thread_head = (struct list_head)LIST_HEAD_INIT(tsk->thread_node);
1561 : 322622 : tsk->thread_node = (struct list_head)LIST_HEAD_INIT(sig->thread_head);
1562 : :
1563 : 322622 : init_waitqueue_head(&sig->wait_chldexit);
1564 : 322614 : sig->curr_target = tsk;
1565 : : init_sigpending(&sig->shared_pending);
1566 : 322614 : INIT_HLIST_HEAD(&sig->multiprocess);
1567 : 322614 : seqlock_init(&sig->stats_lock);
1568 : : prev_cputime_init(&sig->prev_cputime);
1569 : :
1570 : : #ifdef CONFIG_POSIX_TIMERS
1571 : 322614 : INIT_LIST_HEAD(&sig->posix_timers);
1572 : 322614 : hrtimer_init(&sig->real_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
1573 : 322608 : sig->real_timer.function = it_real_fn;
1574 : : #endif
1575 : :
1576 : 322608 : task_lock(current->group_leader);
1577 : 645236 : memcpy(sig->rlim, current->signal->rlim, sizeof sig->rlim);
1578 : 322618 : task_unlock(current->group_leader);
1579 : :
1580 : : posix_cpu_timers_init_group(sig);
1581 : :
1582 : 322622 : tty_audit_fork(sig);
1583 : 322622 : sched_autogroup_fork(sig);
1584 : :
1585 : 322622 : sig->oom_score_adj = current->signal->oom_score_adj;
1586 : 322622 : sig->oom_score_adj_min = current->signal->oom_score_adj_min;
1587 : :
1588 : 322622 : mutex_init(&sig->cred_guard_mutex);
1589 : :
1590 : 322618 : return 0;
1591 : : }
1592 : :
1593 : 355940 : static void copy_seccomp(struct task_struct *p)
1594 : : {
1595 : : #ifdef CONFIG_SECCOMP
1596 : : /*
1597 : : * Must be called with sighand->lock held, which is common to
1598 : : * all threads in the group. Holding cred_guard_mutex is not
1599 : : * needed because this new task is not yet running and cannot
1600 : : * be racing exec.
1601 : : */
1602 [ - + ]: 711880 : assert_spin_locked(¤t->sighand->siglock);
1603 : :
1604 : : /* Ref-count the new filter user, and assign it. */
1605 : 355940 : get_seccomp_filter(current);
1606 : 355940 : p->seccomp = current->seccomp;
1607 : :
1608 : : /*
1609 : : * Explicitly enable no_new_privs here in case it got set
1610 : : * between the task_struct being duplicated and holding the
1611 : : * sighand lock. The seccomp state and nnp must be in sync.
1612 : : */
1613 [ + + ]: 711880 : if (task_no_new_privs(current))
1614 : : task_set_no_new_privs(p);
1615 : :
1616 : : /*
1617 : : * If the parent gained a seccomp mode after copying thread
1618 : : * flags and between before we held the sighand lock, we have
1619 : : * to manually enable the seccomp thread flag here.
1620 : : */
1621 [ + + ]: 355940 : if (p->seccomp.mode != SECCOMP_MODE_DISABLED)
1622 : : set_tsk_thread_flag(p, TIF_SECCOMP);
1623 : : #endif
1624 : 355940 : }
1625 : :
1626 : 308000 : SYSCALL_DEFINE1(set_tid_address, int __user *, tidptr)
1627 : : {
1628 : 154000 : current->clear_child_tid = tidptr;
1629 : :
1630 : 308000 : return task_pid_vnr(current);
1631 : : }
1632 : :
1633 : : static void rt_mutex_init_task(struct task_struct *p)
1634 : : {
1635 : 355922 : raw_spin_lock_init(&p->pi_lock);
1636 : : #ifdef CONFIG_RT_MUTEXES
1637 : 355922 : p->pi_waiters = RB_ROOT_CACHED;
1638 : 355922 : p->pi_top_task = NULL;
1639 : 355922 : p->pi_blocked_on = NULL;
1640 : : #endif
1641 : : }
1642 : :
1643 : : static inline void init_task_pid_links(struct task_struct *task)
1644 : : {
1645 : : enum pid_type type;
1646 : :
1647 [ + + ]: 1423760 : for (type = PIDTYPE_PID; type < PIDTYPE_MAX; ++type) {
1648 : : INIT_HLIST_NODE(&task->pid_links[type]);
1649 : : }
1650 : : }
1651 : :
1652 : : static inline void
1653 : : init_task_pid(struct task_struct *task, enum pid_type type, struct pid *pid)
1654 : : {
1655 [ + + ]: 4848 : if (type == PIDTYPE_PID)
1656 : 355940 : task->thread_pid = pid;
1657 : : else
1658 : 967872 : task->signal->pids[type] = pid;
1659 : : }
1660 : :
1661 : : static inline void rcu_copy_process(struct task_struct *p)
1662 : : {
1663 : : #ifdef CONFIG_PREEMPT_RCU
1664 : : p->rcu_read_lock_nesting = 0;
1665 : : p->rcu_read_unlock_special.s = 0;
1666 : : p->rcu_blocked_node = NULL;
1667 : : INIT_LIST_HEAD(&p->rcu_node_entry);
1668 : : #endif /* #ifdef CONFIG_PREEMPT_RCU */
1669 : : #ifdef CONFIG_TASKS_RCU
1670 : : p->rcu_tasks_holdout = false;
1671 : : INIT_LIST_HEAD(&p->rcu_tasks_holdout_list);
1672 : : p->rcu_tasks_idle_cpu = -1;
1673 : : #endif /* #ifdef CONFIG_TASKS_RCU */
1674 : : }
1675 : :
1676 : 0 : struct pid *pidfd_pid(const struct file *file)
1677 : : {
1678 [ # # ]: 0 : if (file->f_op == &pidfd_fops)
1679 : 0 : return file->private_data;
1680 : :
1681 : : return ERR_PTR(-EBADF);
1682 : : }
1683 : :
1684 : 0 : static int pidfd_release(struct inode *inode, struct file *file)
1685 : : {
1686 : 0 : struct pid *pid = file->private_data;
1687 : :
1688 : 0 : file->private_data = NULL;
1689 : 0 : put_pid(pid);
1690 : 0 : return 0;
1691 : : }
1692 : :
1693 : : #ifdef CONFIG_PROC_FS
1694 : 0 : static void pidfd_show_fdinfo(struct seq_file *m, struct file *f)
1695 : : {
1696 : 0 : struct pid_namespace *ns = proc_pid_ns(file_inode(m->file));
1697 : 0 : struct pid *pid = f->private_data;
1698 : :
1699 : 0 : seq_put_decimal_ull(m, "Pid:\t", pid_nr_ns(pid, ns));
1700 : 0 : seq_putc(m, '\n');
1701 : 0 : }
1702 : : #endif
1703 : :
1704 : : /*
1705 : : * Poll support for process exit notification.
1706 : : */
1707 : 0 : static __poll_t pidfd_poll(struct file *file, struct poll_table_struct *pts)
1708 : : {
1709 : : struct task_struct *task;
1710 : 0 : struct pid *pid = file->private_data;
1711 : : __poll_t poll_flags = 0;
1712 : :
1713 : 0 : poll_wait(file, &pid->wait_pidfd, pts);
1714 : :
1715 : : rcu_read_lock();
1716 : 0 : task = pid_task(pid, PIDTYPE_PID);
1717 : : /*
1718 : : * Inform pollers only when the whole thread group exits.
1719 : : * If the thread group leader exits before all other threads in the
1720 : : * group, then poll(2) should block, similar to the wait(2) family.
1721 : : */
1722 [ # # # # : 0 : if (!task || (task->exit_state && thread_group_empty(task)))
# # ]
1723 : : poll_flags = EPOLLIN | EPOLLRDNORM;
1724 : : rcu_read_unlock();
1725 : :
1726 : 0 : return poll_flags;
1727 : : }
1728 : :
1729 : : const struct file_operations pidfd_fops = {
1730 : : .release = pidfd_release,
1731 : : .poll = pidfd_poll,
1732 : : #ifdef CONFIG_PROC_FS
1733 : : .show_fdinfo = pidfd_show_fdinfo,
1734 : : #endif
1735 : : };
1736 : :
1737 : 0 : static void __delayed_free_task(struct rcu_head *rhp)
1738 : : {
1739 : 0 : struct task_struct *tsk = container_of(rhp, struct task_struct, rcu);
1740 : :
1741 : 0 : free_task(tsk);
1742 : 0 : }
1743 : :
1744 : : static __always_inline void delayed_free_task(struct task_struct *tsk)
1745 : : {
1746 : : if (IS_ENABLED(CONFIG_MEMCG))
1747 : 0 : call_rcu(&tsk->rcu, __delayed_free_task);
1748 : : else
1749 : : free_task(tsk);
1750 : : }
1751 : :
1752 : : /*
1753 : : * This creates a new process as a copy of the old one,
1754 : : * but does not actually start it yet.
1755 : : *
1756 : : * It copies the registers, and all the appropriate
1757 : : * parts of the process environment (as per the clone
1758 : : * flags). The actual kick-off is left to the caller.
1759 : : */
1760 : 355942 : static __latent_entropy struct task_struct *copy_process(
1761 : : struct pid *pid,
1762 : : int trace,
1763 : : int node,
1764 : : struct kernel_clone_args *args)
1765 : : {
1766 : : int pidfd = -1, retval;
1767 : : struct task_struct *p;
1768 : : struct multiprocess_signals delayed;
1769 : : struct file *pidfile = NULL;
1770 : 355942 : u64 clone_flags = args->flags;
1771 : :
1772 : : /*
1773 : : * Don't allow sharing the root directory with processes in a different
1774 : : * namespace
1775 : : */
1776 [ + + ]: 355942 : if ((clone_flags & (CLONE_NEWNS|CLONE_FS)) == (CLONE_NEWNS|CLONE_FS))
1777 : : return ERR_PTR(-EINVAL);
1778 : :
1779 [ + + ]: 355940 : if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS))
1780 : : return ERR_PTR(-EINVAL);
1781 : :
1782 : : /*
1783 : : * Thread groups must share signals as well, and detached threads
1784 : : * can only be started up within the thread group.
1785 : : */
1786 [ + + + - ]: 355938 : if ((clone_flags & CLONE_THREAD) && !(clone_flags & CLONE_SIGHAND))
1787 : : return ERR_PTR(-EINVAL);
1788 : :
1789 : : /*
1790 : : * Shared signal handlers imply shared VM. By way of the above,
1791 : : * thread groups also imply shared VM. Blocking this case allows
1792 : : * for various simplifications in other code.
1793 : : */
1794 [ + + + - ]: 355942 : if ((clone_flags & CLONE_SIGHAND) && !(clone_flags & CLONE_VM))
1795 : : return ERR_PTR(-EINVAL);
1796 : :
1797 : : /*
1798 : : * Siblings of global init remain as zombies on exit since they are
1799 : : * not reaped by their parent (swapper). To solve this and to avoid
1800 : : * multi-rooted process trees, prevent global and container-inits
1801 : : * from creating siblings.
1802 : : */
1803 [ - + # # ]: 355942 : if ((clone_flags & CLONE_PARENT) &&
1804 : 0 : current->signal->flags & SIGNAL_UNKILLABLE)
1805 : : return ERR_PTR(-EINVAL);
1806 : :
1807 : : /*
1808 : : * If the new process will be in a different pid or user namespace
1809 : : * do not allow it to share a thread group with the forking task.
1810 : : */
1811 [ + + ]: 355942 : if (clone_flags & CLONE_THREAD) {
1812 [ + - + - ]: 66632 : if ((clone_flags & (CLONE_NEWUSER | CLONE_NEWPID)) ||
1813 : 33316 : (task_active_pid_ns(current) !=
1814 : 33316 : current->nsproxy->pid_ns_for_children))
1815 : : return ERR_PTR(-EINVAL);
1816 : : }
1817 : :
1818 [ - + ]: 355942 : if (clone_flags & CLONE_PIDFD) {
1819 : : /*
1820 : : * - CLONE_DETACHED is blocked so that we can potentially
1821 : : * reuse it later for CLONE_PIDFD.
1822 : : * - CLONE_THREAD is blocked until someone really needs it.
1823 : : */
1824 [ # # ]: 0 : if (clone_flags & (CLONE_DETACHED | CLONE_THREAD))
1825 : : return ERR_PTR(-EINVAL);
1826 : : }
1827 : :
1828 : : /*
1829 : : * Force any signals received before this point to be delivered
1830 : : * before the fork happens. Collect up signals sent to multiple
1831 : : * processes that happen during the fork and delay them so that
1832 : : * they appear to happen after the fork.
1833 : : */
1834 : : sigemptyset(&delayed.signal);
1835 : : INIT_HLIST_NODE(&delayed.node);
1836 : :
1837 : 355942 : spin_lock_irq(¤t->sighand->siglock);
1838 [ + + ]: 355940 : if (!(clone_flags & CLONE_THREAD))
1839 : 322624 : hlist_add_head(&delayed.node, ¤t->signal->multiprocess);
1840 : 355940 : recalc_sigpending();
1841 : 355934 : spin_unlock_irq(¤t->sighand->siglock);
1842 : : retval = -ERESTARTNOINTR;
1843 [ + + ]: 711884 : if (signal_pending(current))
1844 : : goto fork_out;
1845 : :
1846 : : retval = -ENOMEM;
1847 : 355936 : p = dup_task_struct(current, node);
1848 [ + - ]: 355932 : if (!p)
1849 : : goto fork_out;
1850 : :
1851 : : /*
1852 : : * This _must_ happen before we call free_task(), i.e. before we jump
1853 : : * to any of the bad_fork_* labels. This is to avoid freeing
1854 : : * p->set_child_tid which is (ab)used as a kthread's data pointer for
1855 : : * kernel threads (PF_KTHREAD).
1856 : : */
1857 [ + + ]: 355932 : p->set_child_tid = (clone_flags & CLONE_CHILD_SETTID) ? args->child_tid : NULL;
1858 : : /*
1859 : : * Clear TID on mm_release()?
1860 : : */
1861 [ + + ]: 355932 : p->clear_child_tid = (clone_flags & CLONE_CHILD_CLEARTID) ? args->child_tid : NULL;
1862 : :
1863 : 355932 : ftrace_graph_init_task(p);
1864 : :
1865 : : rt_mutex_init_task(p);
1866 : :
1867 : : #ifdef CONFIG_PROVE_LOCKING
1868 : : DEBUG_LOCKS_WARN_ON(!p->hardirqs_enabled);
1869 : : DEBUG_LOCKS_WARN_ON(!p->softirqs_enabled);
1870 : : #endif
1871 : : retval = -EAGAIN;
1872 [ - + ]: 711844 : if (atomic_read(&p->real_cred->user->processes) >=
1873 : : task_rlimit(p, RLIMIT_NPROC)) {
1874 [ # # # # ]: 0 : if (p->real_cred->user != INIT_USER &&
1875 [ # # ]: 0 : !capable(CAP_SYS_RESOURCE) && !capable(CAP_SYS_ADMIN))
1876 : : goto bad_fork_free;
1877 : : }
1878 : 355922 : current->flags &= ~PF_NPROC_EXCEEDED;
1879 : :
1880 : 355922 : retval = copy_creds(p, clone_flags);
1881 [ + - ]: 355938 : if (retval < 0)
1882 : : goto bad_fork_free;
1883 : :
1884 : : /*
1885 : : * If multiple threads are within copy_process(), then this check
1886 : : * triggers too late. This doesn't hurt, the check is only there
1887 : : * to stop root fork bombs.
1888 : : */
1889 : : retval = -EAGAIN;
1890 [ + + ]: 355940 : if (nr_threads >= max_threads)
1891 : : goto bad_fork_cleanup_count;
1892 : :
1893 : : delayacct_tsk_init(p); /* Must remain after dup_task_struct() */
1894 : 355938 : p->flags &= ~(PF_SUPERPRIV | PF_WQ_WORKER | PF_IDLE);
1895 : 355938 : p->flags |= PF_FORKNOEXEC;
1896 : 355938 : INIT_LIST_HEAD(&p->children);
1897 : 355938 : INIT_LIST_HEAD(&p->sibling);
1898 : : rcu_copy_process(p);
1899 : 355938 : p->vfork_done = NULL;
1900 : 355938 : spin_lock_init(&p->alloc_lock);
1901 : :
1902 : : init_sigpending(&p->pending);
1903 : :
1904 : 355938 : p->utime = p->stime = p->gtime = 0;
1905 : : #ifdef CONFIG_ARCH_HAS_SCALED_CPUTIME
1906 : : p->utimescaled = p->stimescaled = 0;
1907 : : #endif
1908 : : prev_cputime_init(&p->prev_cputime);
1909 : :
1910 : : #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
1911 : : seqcount_init(&p->vtime.seqcount);
1912 : : p->vtime.starttime = 0;
1913 : : p->vtime.state = VTIME_INACTIVE;
1914 : : #endif
1915 : :
1916 : : #if defined(SPLIT_RSS_COUNTING)
1917 : 355938 : memset(&p->rss_stat, 0, sizeof(p->rss_stat));
1918 : : #endif
1919 : :
1920 : 355938 : p->default_timer_slack_ns = current->timer_slack_ns;
1921 : :
1922 : : #ifdef CONFIG_PSI
1923 : : p->psi_flags = 0;
1924 : : #endif
1925 : :
1926 : 355938 : task_io_accounting_init(&p->ioac);
1927 : 355938 : acct_clear_integrals(p);
1928 : :
1929 : 355926 : posix_cputimers_init(&p->posix_cputimers);
1930 : :
1931 : 355926 : p->io_context = NULL;
1932 : : audit_set_context(p, NULL);
1933 : 355926 : cgroup_fork(p);
1934 : : #ifdef CONFIG_NUMA
1935 : : p->mempolicy = mpol_dup(p->mempolicy);
1936 : : if (IS_ERR(p->mempolicy)) {
1937 : : retval = PTR_ERR(p->mempolicy);
1938 : : p->mempolicy = NULL;
1939 : : goto bad_fork_cleanup_threadgroup_lock;
1940 : : }
1941 : : #endif
1942 : : #ifdef CONFIG_CPUSETS
1943 : 355926 : p->cpuset_mem_spread_rotor = NUMA_NO_NODE;
1944 : 355926 : p->cpuset_slab_spread_rotor = NUMA_NO_NODE;
1945 : : seqcount_init(&p->mems_allowed_seq);
1946 : : #endif
1947 : : #ifdef CONFIG_TRACE_IRQFLAGS
1948 : 355926 : p->irq_events = 0;
1949 : 355926 : p->hardirqs_enabled = 0;
1950 : 355926 : p->hardirq_enable_ip = 0;
1951 : 355926 : p->hardirq_enable_event = 0;
1952 : 355926 : p->hardirq_disable_ip = _THIS_IP_;
1953 : 355926 : p->hardirq_disable_event = 0;
1954 : 355926 : p->softirqs_enabled = 1;
1955 : 355926 : p->softirq_enable_ip = _THIS_IP_;
1956 : 355926 : p->softirq_enable_event = 0;
1957 : 355926 : p->softirq_disable_ip = 0;
1958 : 355926 : p->softirq_disable_event = 0;
1959 : 355926 : p->hardirq_context = 0;
1960 : 355926 : p->softirq_context = 0;
1961 : : #endif
1962 : :
1963 : 355926 : p->pagefault_disabled = 0;
1964 : :
1965 : : #ifdef CONFIG_LOCKDEP
1966 : : lockdep_init_task(p);
1967 : : #endif
1968 : :
1969 : : #ifdef CONFIG_DEBUG_MUTEXES
1970 : : p->blocked_on = NULL; /* not blocked yet */
1971 : : #endif
1972 : : #ifdef CONFIG_BCACHE
1973 : : p->sequential_io = 0;
1974 : : p->sequential_io_avg = 0;
1975 : : #endif
1976 : :
1977 : : /* Perform scheduler related setup. Assign this task to a CPU. */
1978 : 355926 : retval = sched_fork(clone_flags, p);
1979 [ + - ]: 355928 : if (retval)
1980 : : goto bad_fork_cleanup_policy;
1981 : :
1982 : 355940 : retval = perf_event_init_task(p);
1983 [ + + ]: 355938 : if (retval)
1984 : : goto bad_fork_cleanup_policy;
1985 : 355938 : retval = audit_alloc(p);
1986 [ + + ]: 355938 : if (retval)
1987 : : goto bad_fork_cleanup_perf;
1988 : : /* copy all the process information */
1989 : 355936 : shm_init_task(p);
1990 : 355936 : retval = security_task_alloc(p, clone_flags);
1991 [ + + ]: 355938 : if (retval)
1992 : : goto bad_fork_cleanup_audit;
1993 : 355932 : retval = copy_semundo(clone_flags, p);
1994 [ + + ]: 355938 : if (retval)
1995 : : goto bad_fork_cleanup_security;
1996 : 355920 : retval = copy_files(clone_flags, p);
1997 [ + + ]: 355938 : if (retval)
1998 : : goto bad_fork_cleanup_semundo;
1999 : 355934 : retval = copy_fs(clone_flags, p);
2000 [ + + ]: 355938 : if (retval)
2001 : : goto bad_fork_cleanup_files;
2002 : 355934 : retval = copy_sighand(clone_flags, p);
2003 [ + + ]: 355932 : if (retval)
2004 : : goto bad_fork_cleanup_fs;
2005 : 355930 : retval = copy_signal(clone_flags, p);
2006 [ + + ]: 355932 : if (retval)
2007 : : goto bad_fork_cleanup_sighand;
2008 : 355928 : retval = copy_mm(clone_flags, p);
2009 [ + - ]: 355938 : if (retval)
2010 : : goto bad_fork_cleanup_signal;
2011 : 355938 : retval = copy_namespaces(clone_flags, p);
2012 [ + + ]: 355940 : if (retval)
2013 : : goto bad_fork_cleanup_mm;
2014 : 355938 : retval = copy_io(clone_flags, p);
2015 [ + - ]: 355940 : if (retval)
2016 : : goto bad_fork_cleanup_namespaces;
2017 : 355940 : retval = copy_thread_tls(clone_flags, args->stack, args->stack_size, p,
2018 : : args->tls);
2019 [ + - ]: 355940 : if (retval)
2020 : : goto bad_fork_cleanup_io;
2021 : :
2022 : : stackleak_task_init(p);
2023 : :
2024 [ + + ]: 355940 : if (pid != &init_struct_pid) {
2025 : 354720 : pid = alloc_pid(p->nsproxy->pid_ns_for_children);
2026 [ - + ]: 354728 : if (IS_ERR(pid)) {
2027 : : retval = PTR_ERR(pid);
2028 : 0 : goto bad_fork_cleanup_thread;
2029 : : }
2030 : : }
2031 : :
2032 : : /*
2033 : : * This has to happen after we've potentially unshared the file
2034 : : * descriptor table (so that the pidfd doesn't leak into the child
2035 : : * if the fd table isn't shared).
2036 : : */
2037 [ - + ]: 355948 : if (clone_flags & CLONE_PIDFD) {
2038 : 0 : retval = get_unused_fd_flags(O_RDWR | O_CLOEXEC);
2039 [ # # ]: 0 : if (retval < 0)
2040 : : goto bad_fork_free_pid;
2041 : :
2042 : : pidfd = retval;
2043 : :
2044 : 0 : pidfile = anon_inode_getfile("[pidfd]", &pidfd_fops, pid,
2045 : : O_RDWR | O_CLOEXEC);
2046 [ # # ]: 0 : if (IS_ERR(pidfile)) {
2047 : 0 : put_unused_fd(pidfd);
2048 : : retval = PTR_ERR(pidfile);
2049 : 0 : goto bad_fork_free_pid;
2050 : : }
2051 : : get_pid(pid); /* held by pidfile now */
2052 : :
2053 : 0 : retval = put_user(pidfd, args->pidfd);
2054 [ # # ]: 0 : if (retval)
2055 : : goto bad_fork_put_pidfd;
2056 : : }
2057 : :
2058 : : #ifdef CONFIG_BLOCK
2059 : 355948 : p->plug = NULL;
2060 : : #endif
2061 : : futex_init_task(p);
2062 : :
2063 : : /*
2064 : : * sigaltstack should be cleared when sharing the same VM
2065 : : */
2066 [ + + ]: 355938 : if ((clone_flags & (CLONE_VM|CLONE_VFORK)) == CLONE_VM)
2067 : : sas_ss_reset(p);
2068 : :
2069 : : /*
2070 : : * Syscall tracing and stepping should be turned off in the
2071 : : * child regardless of CLONE_PTRACE.
2072 : : */
2073 : : user_disable_single_step(p);
2074 : : clear_tsk_thread_flag(p, TIF_SYSCALL_TRACE);
2075 : : #ifdef TIF_SYSCALL_EMU
2076 : : clear_tsk_thread_flag(p, TIF_SYSCALL_EMU);
2077 : : #endif
2078 : 355940 : clear_tsk_latency_tracing(p);
2079 : :
2080 : : /* ok, now we should be set up.. */
2081 : 355940 : p->pid = pid_nr(pid);
2082 [ + + ]: 355940 : if (clone_flags & CLONE_THREAD) {
2083 : 33316 : p->exit_signal = -1;
2084 : 33316 : p->group_leader = current->group_leader;
2085 : 33316 : p->tgid = current->tgid;
2086 : : } else {
2087 [ - + ]: 322624 : if (clone_flags & CLONE_PARENT)
2088 : 0 : p->exit_signal = current->group_leader->exit_signal;
2089 : : else
2090 : 322624 : p->exit_signal = args->exit_signal;
2091 : 322624 : p->group_leader = p;
2092 : 322624 : p->tgid = p->pid;
2093 : : }
2094 : :
2095 : 355940 : p->nr_dirtied = 0;
2096 : 355940 : p->nr_dirtied_pause = 128 >> (PAGE_SHIFT - 10);
2097 : 355940 : p->dirty_paused_when = 0;
2098 : :
2099 : 355940 : p->pdeath_signal = 0;
2100 : 355940 : INIT_LIST_HEAD(&p->thread_group);
2101 : 355940 : p->task_works = NULL;
2102 : :
2103 : : cgroup_threadgroup_change_begin(current);
2104 : : /*
2105 : : * Ensure that the cgroup subsystem policies allow the new process to be
2106 : : * forked. It should be noted the the new process's css_set can be changed
2107 : : * between here and cgroup_post_fork() if an organisation operation is in
2108 : : * progress.
2109 : : */
2110 : 355938 : retval = cgroup_can_fork(p);
2111 [ + - ]: 355936 : if (retval)
2112 : : goto bad_fork_cgroup_threadgroup_change_end;
2113 : :
2114 : : /*
2115 : : * From this point on we must avoid any synchronous user-space
2116 : : * communication until we take the tasklist-lock. In particular, we do
2117 : : * not want user-space to be able to predict the process start-time by
2118 : : * stalling fork(2) after we recorded the start_time but before it is
2119 : : * visible to the system.
2120 : : */
2121 : :
2122 : 355938 : p->start_time = ktime_get_ns();
2123 : 355938 : p->real_start_time = ktime_get_boottime_ns();
2124 : :
2125 : : /*
2126 : : * Make it visible to the rest of the system, but dont wake it up yet.
2127 : : * Need tasklist lock for parent etc handling!
2128 : : */
2129 : 355938 : write_lock_irq(&tasklist_lock);
2130 : :
2131 : : /* CLONE_PARENT re-uses the old parent */
2132 [ + + ]: 355940 : if (clone_flags & (CLONE_PARENT|CLONE_THREAD)) {
2133 : 33316 : p->real_parent = current->real_parent;
2134 : 33316 : p->parent_exec_id = current->parent_exec_id;
2135 : : } else {
2136 : 322624 : p->real_parent = current;
2137 : 322624 : p->parent_exec_id = current->self_exec_id;
2138 : : }
2139 : :
2140 : : klp_copy_process(p);
2141 : :
2142 : 355940 : spin_lock(¤t->sighand->siglock);
2143 : :
2144 : : /*
2145 : : * Copy seccomp details explicitly here, in case they were changed
2146 : : * before holding sighand lock.
2147 : : */
2148 : 355940 : copy_seccomp(p);
2149 : :
2150 : : rseq_fork(p, clone_flags);
2151 : :
2152 : : /* Don't start children in a dying pid namespace */
2153 [ + - ]: 355940 : if (unlikely(!(ns_of_pid(pid)->pid_allocated & PIDNS_ADDING))) {
2154 : : retval = -ENOMEM;
2155 : : goto bad_fork_cancel_cgroup;
2156 : : }
2157 : :
2158 : : /* Let kill terminate clone/fork in the middle */
2159 [ + - ]: 711880 : if (fatal_signal_pending(current)) {
2160 : : retval = -EINTR;
2161 : : goto bad_fork_cancel_cgroup;
2162 : : }
2163 : :
2164 : : /* past the last point of failure */
2165 [ - + ]: 355940 : if (pidfile)
2166 : 0 : fd_install(pidfd, pidfile);
2167 : :
2168 : : init_task_pid_links(p);
2169 [ + + ]: 355940 : if (likely(p->pid)) {
2170 [ + - + - ]: 354728 : ptrace_init_task(p, (clone_flags & CLONE_PTRACE) || trace);
2171 : :
2172 : : init_task_pid(p, PIDTYPE_PID, pid);
2173 [ + + ]: 354728 : if (thread_group_leader(p)) {
2174 : : init_task_pid(p, PIDTYPE_TGID, pid);
2175 : 321412 : init_task_pid(p, PIDTYPE_PGID, task_pgrp(current));
2176 : 321412 : init_task_pid(p, PIDTYPE_SID, task_session(current));
2177 : :
2178 [ + + ]: 321412 : if (is_child_reaper(pid)) {
2179 : 404 : ns_of_pid(pid)->child_reaper = p;
2180 : 404 : p->signal->flags |= SIGNAL_UNKILLABLE;
2181 : : }
2182 : 321412 : p->signal->shared_pending.signal = delayed.signal;
2183 : 642824 : p->signal->tty = tty_kref_get(current->signal->tty);
2184 : : /*
2185 : : * Inherit has_child_subreaper flag under the same
2186 : : * tasklist_lock with adding child to the process tree
2187 : : * for propagate_has_child_subreaper optimization.
2188 : : */
2189 : 321412 : p->signal->has_child_subreaper = p->real_parent->signal->has_child_subreaper ||
2190 : : p->real_parent->signal->is_child_subreaper;
2191 : 321412 : list_add_tail(&p->sibling, &p->real_parent->children);
2192 : 321412 : list_add_tail_rcu(&p->tasks, &init_task.tasks);
2193 : 321412 : attach_pid(p, PIDTYPE_TGID);
2194 : 321412 : attach_pid(p, PIDTYPE_PGID);
2195 : 321412 : attach_pid(p, PIDTYPE_SID);
2196 : 642824 : __this_cpu_inc(process_counts);
2197 : : } else {
2198 : 33316 : current->signal->nr_threads++;
2199 : 33316 : atomic_inc(¤t->signal->live);
2200 : 33316 : refcount_inc(¤t->signal->sigcnt);
2201 : 33316 : task_join_group_stop(p);
2202 : 33316 : list_add_tail_rcu(&p->thread_group,
2203 : 33316 : &p->group_leader->thread_group);
2204 : 66632 : list_add_tail_rcu(&p->thread_node,
2205 : 33316 : &p->signal->thread_head);
2206 : : }
2207 : 354728 : attach_pid(p, PIDTYPE_PID);
2208 : 354728 : nr_threads++;
2209 : : }
2210 : 355940 : total_forks++;
2211 : : hlist_del_init(&delayed.node);
2212 : 355940 : spin_unlock(¤t->sighand->siglock);
2213 : 355940 : syscall_tracepoint_update(p);
2214 : 355940 : write_unlock_irq(&tasklist_lock);
2215 : :
2216 : : proc_fork_connector(p);
2217 : 355940 : cgroup_post_fork(p);
2218 : : cgroup_threadgroup_change_end(current);
2219 : 355940 : perf_event_fork(p);
2220 : :
2221 : 355930 : trace_task_newtask(p, clone_flags);
2222 : : uprobe_copy_process(p, clone_flags);
2223 : :
2224 : 355938 : return p;
2225 : :
2226 : : bad_fork_cancel_cgroup:
2227 : 0 : spin_unlock(¤t->sighand->siglock);
2228 : 0 : write_unlock_irq(&tasklist_lock);
2229 : 0 : cgroup_cancel_fork(p);
2230 : : bad_fork_cgroup_threadgroup_change_end:
2231 : : cgroup_threadgroup_change_end(current);
2232 : : bad_fork_put_pidfd:
2233 [ # # ]: 0 : if (clone_flags & CLONE_PIDFD) {
2234 : 0 : fput(pidfile);
2235 : 0 : put_unused_fd(pidfd);
2236 : : }
2237 : : bad_fork_free_pid:
2238 [ # # ]: 0 : if (pid != &init_struct_pid)
2239 : 0 : free_pid(pid);
2240 : : bad_fork_cleanup_thread:
2241 : 0 : exit_thread(p);
2242 : : bad_fork_cleanup_io:
2243 [ # # ]: 0 : if (p->io_context)
2244 : 0 : exit_io_context(p);
2245 : : bad_fork_cleanup_namespaces:
2246 : 0 : exit_task_namespaces(p);
2247 : : bad_fork_cleanup_mm:
2248 [ # # ]: 0 : if (p->mm) {
2249 : : mm_clear_owner(p->mm, p);
2250 : 0 : mmput(p->mm);
2251 : : }
2252 : : bad_fork_cleanup_signal:
2253 [ # # ]: 0 : if (!(clone_flags & CLONE_THREAD))
2254 : 0 : free_signal_struct(p->signal);
2255 : : bad_fork_cleanup_sighand:
2256 : 4 : __cleanup_sighand(p->sighand);
2257 : : bad_fork_cleanup_fs:
2258 : 2 : exit_fs(p); /* blocking */
2259 : : bad_fork_cleanup_files:
2260 : 4 : exit_files(p); /* blocking */
2261 : : bad_fork_cleanup_semundo:
2262 : 6 : exit_sem(p);
2263 : : bad_fork_cleanup_security:
2264 : 18 : security_task_free(p);
2265 : : bad_fork_cleanup_audit:
2266 : : audit_free(p);
2267 : : bad_fork_cleanup_perf:
2268 : 4 : perf_event_free_task(p);
2269 : : bad_fork_cleanup_policy:
2270 : : lockdep_free_task(p);
2271 : : #ifdef CONFIG_NUMA
2272 : : mpol_put(p->mempolicy);
2273 : : bad_fork_cleanup_threadgroup_lock:
2274 : : #endif
2275 : : delayacct_tsk_free(p);
2276 : : bad_fork_cleanup_count:
2277 : 2 : atomic_dec(&p->cred->user->processes);
2278 : 0 : exit_creds(p);
2279 : : bad_fork_free:
2280 : 0 : p->state = TASK_DEAD;
2281 : : put_task_stack(p);
2282 : : delayed_free_task(p);
2283 : : fork_out:
2284 : 6 : spin_lock_irq(¤t->sighand->siglock);
2285 : : hlist_del_init(&delayed.node);
2286 : 2 : spin_unlock_irq(¤t->sighand->siglock);
2287 : 2 : return ERR_PTR(retval);
2288 : : }
2289 : :
2290 : : static inline void init_idle_pids(struct task_struct *idle)
2291 : : {
2292 : : enum pid_type type;
2293 : :
2294 [ + + ]: 4848 : for (type = PIDTYPE_PID; type < PIDTYPE_MAX; ++type) {
2295 : : INIT_HLIST_NODE(&idle->pid_links[type]); /* not really needed */
2296 : : init_task_pid(idle, type, &init_struct_pid);
2297 : : }
2298 : : }
2299 : :
2300 : 1212 : struct task_struct *fork_idle(int cpu)
2301 : : {
2302 : : struct task_struct *task;
2303 : 1212 : struct kernel_clone_args args = {
2304 : : .flags = CLONE_VM,
2305 : : };
2306 : :
2307 : 1212 : task = copy_process(&init_struct_pid, 0, cpu_to_node(cpu), &args);
2308 [ + - ]: 1212 : if (!IS_ERR(task)) {
2309 : : init_idle_pids(task);
2310 : 1212 : init_idle(task, cpu);
2311 : : }
2312 : :
2313 : 1212 : return task;
2314 : : }
2315 : :
2316 : 0 : struct mm_struct *copy_init_mm(void)
2317 : : {
2318 : 0 : return dup_mm(NULL, &init_mm);
2319 : : }
2320 : :
2321 : : /*
2322 : : * Ok, this is the main fork-routine.
2323 : : *
2324 : : * It copies the process, and if successful kick-starts
2325 : : * it and waits for it to finish using the VM if required.
2326 : : *
2327 : : * args->exit_signal is expected to be checked for sanity by the caller.
2328 : : */
2329 : 354726 : long _do_fork(struct kernel_clone_args *args)
2330 : : {
2331 : 354726 : u64 clone_flags = args->flags;
2332 : : struct completion vfork;
2333 : : struct pid *pid;
2334 : : struct task_struct *p;
2335 : : int trace = 0;
2336 : : long nr;
2337 : :
2338 : : /*
2339 : : * Determine whether and which event to report to ptracer. When
2340 : : * called from kernel_thread or CLONE_UNTRACED is explicitly
2341 : : * requested, no event is reported; otherwise, report if the event
2342 : : * for the type of forking is enabled.
2343 : : */
2344 [ + + ]: 354726 : if (!(clone_flags & CLONE_UNTRACED)) {
2345 [ + + ]: 311650 : if (clone_flags & CLONE_VFORK)
2346 : : trace = PTRACE_EVENT_VFORK;
2347 [ + + ]: 308474 : else if (args->exit_signal != SIGCHLD)
2348 : : trace = PTRACE_EVENT_CLONE;
2349 : : else
2350 : : trace = PTRACE_EVENT_FORK;
2351 : :
2352 [ + - ]: 623300 : if (likely(!ptrace_event_enabled(current, trace)))
2353 : : trace = 0;
2354 : : }
2355 : :
2356 : 354726 : p = copy_process(NULL, trace, NUMA_NO_NODE, args);
2357 : : add_latent_entropy();
2358 : :
2359 [ + + ]: 354718 : if (IS_ERR(p))
2360 : 2 : return PTR_ERR(p);
2361 : :
2362 : : /*
2363 : : * Do this prior waking up the new thread - the thread pointer
2364 : : * might get invalid after that point, if the thread exits quickly.
2365 : : */
2366 : 354716 : trace_sched_process_fork(current, p);
2367 : :
2368 : 354716 : pid = get_task_pid(p, PIDTYPE_PID);
2369 : 354716 : nr = pid_vnr(pid);
2370 : :
2371 [ + + ]: 354728 : if (clone_flags & CLONE_PARENT_SETTID)
2372 : 69868 : put_user(nr, args->parent_tid);
2373 : :
2374 [ + + ]: 354718 : if (clone_flags & CLONE_VFORK) {
2375 : 3178 : p->vfork_done = &vfork;
2376 : : init_completion(&vfork);
2377 : : get_task_struct(p);
2378 : : }
2379 : :
2380 : 354718 : wake_up_new_task(p);
2381 : :
2382 : : /* forking complete and child started to run, tell ptracer */
2383 [ - + ]: 354728 : if (unlikely(trace))
2384 : 0 : ptrace_event_pid(trace, pid);
2385 : :
2386 [ + + ]: 354728 : if (clone_flags & CLONE_VFORK) {
2387 [ + - ]: 3178 : if (!wait_for_vfork_done(p, &vfork))
2388 : 3178 : ptrace_event_pid(PTRACE_EVENT_VFORK_DONE, pid);
2389 : : }
2390 : :
2391 : 354728 : put_pid(pid);
2392 : 354726 : return nr;
2393 : : }
2394 : :
2395 : 0 : bool legacy_clone_args_valid(const struct kernel_clone_args *kargs)
2396 : : {
2397 : : /* clone(CLONE_PIDFD) uses parent_tidptr to return a pidfd */
2398 [ - + # # : 310844 : if ((kargs->flags & CLONE_PIDFD) &&
# # # # ]
2399 : 0 : (kargs->flags & CLONE_PARENT_SETTID))
2400 : : return false;
2401 : :
2402 : 0 : return true;
2403 : : }
2404 : :
2405 : : #ifndef CONFIG_HAVE_COPY_THREAD_TLS
2406 : : /* For compatibility with architectures that call do_fork directly rather than
2407 : : * using the syscall entry points below. */
2408 : : long do_fork(unsigned long clone_flags,
2409 : : unsigned long stack_start,
2410 : : unsigned long stack_size,
2411 : : int __user *parent_tidptr,
2412 : : int __user *child_tidptr)
2413 : : {
2414 : : struct kernel_clone_args args = {
2415 : : .flags = (lower_32_bits(clone_flags) & ~CSIGNAL),
2416 : : .pidfd = parent_tidptr,
2417 : : .child_tid = child_tidptr,
2418 : : .parent_tid = parent_tidptr,
2419 : : .exit_signal = (lower_32_bits(clone_flags) & CSIGNAL),
2420 : : .stack = stack_start,
2421 : : .stack_size = stack_size,
2422 : : };
2423 : :
2424 : : if (!legacy_clone_args_valid(&args))
2425 : : return -EINVAL;
2426 : :
2427 : : return _do_fork(&args);
2428 : : }
2429 : : #endif
2430 : :
2431 : : /*
2432 : : * Create a kernel thread.
2433 : : */
2434 : 43078 : pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
2435 : : {
2436 : 172312 : struct kernel_clone_args args = {
2437 : : .flags = ((lower_32_bits(flags) | CLONE_VM |
2438 : 43078 : CLONE_UNTRACED) & ~CSIGNAL),
2439 : : .exit_signal = (lower_32_bits(flags) & CSIGNAL),
2440 : 43078 : .stack = (unsigned long)fn,
2441 : 43078 : .stack_size = (unsigned long)arg,
2442 : : };
2443 : :
2444 : 43078 : return _do_fork(&args);
2445 : : }
2446 : :
2447 : : #ifdef __ARCH_WANT_SYS_FORK
2448 : 0 : SYSCALL_DEFINE0(fork)
2449 : : {
2450 : : #ifdef CONFIG_MMU
2451 : 0 : struct kernel_clone_args args = {
2452 : : .exit_signal = SIGCHLD,
2453 : : };
2454 : :
2455 : 0 : return _do_fork(&args);
2456 : : #else
2457 : : /* can not support in nommu mode */
2458 : : return -EINVAL;
2459 : : #endif
2460 : : }
2461 : : #endif
2462 : :
2463 : : #ifdef __ARCH_WANT_SYS_VFORK
2464 : 808 : SYSCALL_DEFINE0(vfork)
2465 : : {
2466 : 808 : struct kernel_clone_args args = {
2467 : : .flags = CLONE_VFORK | CLONE_VM,
2468 : : .exit_signal = SIGCHLD,
2469 : : };
2470 : :
2471 : 808 : return _do_fork(&args);
2472 : : }
2473 : : #endif
2474 : :
2475 : : #ifdef __ARCH_WANT_SYS_CLONE
2476 : : #ifdef CONFIG_CLONE_BACKWARDS
2477 : 621688 : SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp,
2478 : : int __user *, parent_tidptr,
2479 : : unsigned long, tls,
2480 : : int __user *, child_tidptr)
2481 : : #elif defined(CONFIG_CLONE_BACKWARDS2)
2482 : : SYSCALL_DEFINE5(clone, unsigned long, newsp, unsigned long, clone_flags,
2483 : : int __user *, parent_tidptr,
2484 : : int __user *, child_tidptr,
2485 : : unsigned long, tls)
2486 : : #elif defined(CONFIG_CLONE_BACKWARDS3)
2487 : : SYSCALL_DEFINE6(clone, unsigned long, clone_flags, unsigned long, newsp,
2488 : : int, stack_size,
2489 : : int __user *, parent_tidptr,
2490 : : int __user *, child_tidptr,
2491 : : unsigned long, tls)
2492 : : #else
2493 : : SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp,
2494 : : int __user *, parent_tidptr,
2495 : : int __user *, child_tidptr,
2496 : : unsigned long, tls)
2497 : : #endif
2498 : : {
2499 : 310844 : struct kernel_clone_args args = {
2500 : : .flags = (lower_32_bits(clone_flags) & ~CSIGNAL),
2501 : : .pidfd = parent_tidptr,
2502 : : .child_tid = child_tidptr,
2503 : : .parent_tid = parent_tidptr,
2504 : : .exit_signal = (lower_32_bits(clone_flags) & CSIGNAL),
2505 : : .stack = newsp,
2506 : : .tls = tls,
2507 : : };
2508 : :
2509 [ + - ]: 310844 : if (!legacy_clone_args_valid(&args))
2510 : : return -EINVAL;
2511 : :
2512 : 310844 : return _do_fork(&args);
2513 : : }
2514 : : #endif
2515 : :
2516 : : #ifdef __ARCH_WANT_SYS_CLONE3
2517 : :
2518 : : /*
2519 : : * copy_thread implementations handle CLONE_SETTLS by reading the TLS value from
2520 : : * the registers containing the syscall arguments for clone. This doesn't work
2521 : : * with clone3 since the TLS value is passed in clone_args instead.
2522 : : */
2523 : : #ifndef CONFIG_HAVE_COPY_THREAD_TLS
2524 : : #error clone3 requires copy_thread_tls support in arch
2525 : : #endif
2526 : :
2527 : 0 : noinline static int copy_clone_args_from_user(struct kernel_clone_args *kargs,
2528 : : struct clone_args __user *uargs,
2529 : : size_t usize)
2530 : : {
2531 : : int err;
2532 : : struct clone_args args;
2533 : :
2534 [ # # ]: 0 : if (unlikely(usize > PAGE_SIZE))
2535 : : return -E2BIG;
2536 [ # # ]: 0 : if (unlikely(usize < CLONE_ARGS_SIZE_VER0))
2537 : : return -EINVAL;
2538 : :
2539 : : err = copy_struct_from_user(&args, sizeof(args), uargs, usize);
2540 [ # # ]: 0 : if (err)
2541 : : return err;
2542 : :
2543 : : /*
2544 : : * Verify that higher 32bits of exit_signal are unset and that
2545 : : * it is a valid signal
2546 : : */
2547 [ # # # # ]: 0 : if (unlikely((args.exit_signal & ~((u64)CSIGNAL)) ||
2548 : : !valid_signal(args.exit_signal)))
2549 : : return -EINVAL;
2550 : :
2551 : 0 : *kargs = (struct kernel_clone_args){
2552 : 0 : .flags = args.flags,
2553 : 0 : .pidfd = u64_to_user_ptr(args.pidfd),
2554 : 0 : .child_tid = u64_to_user_ptr(args.child_tid),
2555 : 0 : .parent_tid = u64_to_user_ptr(args.parent_tid),
2556 : : .exit_signal = args.exit_signal,
2557 : 0 : .stack = args.stack,
2558 : 0 : .stack_size = args.stack_size,
2559 : 0 : .tls = args.tls,
2560 : : };
2561 : :
2562 : 0 : return 0;
2563 : : }
2564 : :
2565 : : /**
2566 : : * clone3_stack_valid - check and prepare stack
2567 : : * @kargs: kernel clone args
2568 : : *
2569 : : * Verify that the stack arguments userspace gave us are sane.
2570 : : * In addition, set the stack direction for userspace since it's easy for us to
2571 : : * determine.
2572 : : */
2573 : 0 : static inline bool clone3_stack_valid(struct kernel_clone_args *kargs)
2574 : : {
2575 [ # # ]: 0 : if (kargs->stack == 0) {
2576 [ # # ]: 0 : if (kargs->stack_size > 0)
2577 : : return false;
2578 : : } else {
2579 [ # # ]: 0 : if (kargs->stack_size == 0)
2580 : : return false;
2581 : :
2582 [ # # ]: 0 : if (!access_ok((void __user *)kargs->stack, kargs->stack_size))
2583 : : return false;
2584 : :
2585 : : #if !defined(CONFIG_STACK_GROWSUP) && !defined(CONFIG_IA64)
2586 : 0 : kargs->stack += kargs->stack_size;
2587 : : #endif
2588 : : }
2589 : :
2590 : : return true;
2591 : : }
2592 : :
2593 : 0 : static bool clone3_args_valid(struct kernel_clone_args *kargs)
2594 : : {
2595 : : /*
2596 : : * All lower bits of the flag word are taken.
2597 : : * Verify that no other unknown flags are passed along.
2598 : : */
2599 [ # # ]: 0 : if (kargs->flags & ~CLONE_LEGACY_FLAGS)
2600 : : return false;
2601 : :
2602 : : /*
2603 : : * - make the CLONE_DETACHED bit reuseable for clone3
2604 : : * - make the CSIGNAL bits reuseable for clone3
2605 : : */
2606 [ # # ]: 0 : if (kargs->flags & (CLONE_DETACHED | CSIGNAL))
2607 : : return false;
2608 : :
2609 [ # # # # ]: 0 : if ((kargs->flags & (CLONE_THREAD | CLONE_PARENT)) &&
2610 : 0 : kargs->exit_signal)
2611 : : return false;
2612 : :
2613 [ # # ]: 0 : if (!clone3_stack_valid(kargs))
2614 : : return false;
2615 : :
2616 : 0 : return true;
2617 : : }
2618 : :
2619 : : /**
2620 : : * clone3 - create a new process with specific properties
2621 : : * @uargs: argument structure
2622 : : * @size: size of @uargs
2623 : : *
2624 : : * clone3() is the extensible successor to clone()/clone2().
2625 : : * It takes a struct as argument that is versioned by its size.
2626 : : *
2627 : : * Return: On success, a positive PID for the child process.
2628 : : * On error, a negative errno number.
2629 : : */
2630 : 0 : SYSCALL_DEFINE2(clone3, struct clone_args __user *, uargs, size_t, size)
2631 : : {
2632 : : int err;
2633 : :
2634 : : struct kernel_clone_args kargs;
2635 : :
2636 : 0 : err = copy_clone_args_from_user(&kargs, uargs, size);
2637 [ # # ]: 0 : if (err)
2638 : : return err;
2639 : :
2640 [ # # ]: 0 : if (!clone3_args_valid(&kargs))
2641 : : return -EINVAL;
2642 : :
2643 : 0 : return _do_fork(&kargs);
2644 : : }
2645 : : #endif
2646 : :
2647 : 404 : void walk_process_tree(struct task_struct *top, proc_visitor visitor, void *data)
2648 : : {
2649 : : struct task_struct *leader, *parent, *child;
2650 : : int res;
2651 : :
2652 : 404 : read_lock(&tasklist_lock);
2653 : 404 : leader = top = top->group_leader;
2654 : : down:
2655 [ + + ]: 2424 : for_each_thread(leader, parent) {
2656 [ + + ]: 1212 : list_for_each_entry(child, &parent->children, sibling) {
2657 : 404 : res = visitor(child, data);
2658 [ + - ]: 404 : if (res) {
2659 [ + - ]: 404 : if (res < 0)
2660 : : goto out;
2661 : 404 : leader = child;
2662 : 404 : goto down;
2663 : : }
2664 : : up:
2665 : : ;
2666 : : }
2667 : : }
2668 : :
2669 [ + + ]: 808 : if (leader != top) {
2670 : : child = leader;
2671 : 404 : parent = child->real_parent;
2672 : 404 : leader = parent->group_leader;
2673 : 404 : goto up;
2674 : : }
2675 : : out:
2676 : : read_unlock(&tasklist_lock);
2677 : 404 : }
2678 : :
2679 : : #ifndef ARCH_MIN_MMSTRUCT_ALIGN
2680 : : #define ARCH_MIN_MMSTRUCT_ALIGN 0
2681 : : #endif
2682 : :
2683 : 71520 : static void sighand_ctor(void *data)
2684 : : {
2685 : : struct sighand_struct *sighand = data;
2686 : :
2687 : 71520 : spin_lock_init(&sighand->siglock);
2688 : 71520 : init_waitqueue_head(&sighand->signalfd_wqh);
2689 : 71520 : }
2690 : :
2691 : 404 : void __init proc_caches_init(void)
2692 : : {
2693 : : unsigned int mm_size;
2694 : :
2695 : 404 : sighand_cachep = kmem_cache_create("sighand_cache",
2696 : : sizeof(struct sighand_struct), 0,
2697 : : SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_TYPESAFE_BY_RCU|
2698 : : SLAB_ACCOUNT, sighand_ctor);
2699 : 404 : signal_cachep = kmem_cache_create("signal_cache",
2700 : : sizeof(struct signal_struct), 0,
2701 : : SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_ACCOUNT,
2702 : : NULL);
2703 : 404 : files_cachep = kmem_cache_create("files_cache",
2704 : : sizeof(struct files_struct), 0,
2705 : : SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_ACCOUNT,
2706 : : NULL);
2707 : 404 : fs_cachep = kmem_cache_create("fs_cache",
2708 : : sizeof(struct fs_struct), 0,
2709 : : SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_ACCOUNT,
2710 : : NULL);
2711 : :
2712 : : /*
2713 : : * The mm_cpumask is located at the end of mm_struct, and is
2714 : : * dynamically sized based on the maximum CPU number this system
2715 : : * can have, taking hotplug into account (nr_cpu_ids).
2716 : : */
2717 : : mm_size = sizeof(struct mm_struct) + cpumask_size();
2718 : :
2719 : 404 : mm_cachep = kmem_cache_create_usercopy("mm_struct",
2720 : : mm_size, ARCH_MIN_MMSTRUCT_ALIGN,
2721 : : SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_ACCOUNT,
2722 : : offsetof(struct mm_struct, saved_auxv),
2723 : : sizeof_field(struct mm_struct, saved_auxv),
2724 : : NULL);
2725 : 404 : vm_area_cachep = KMEM_CACHE(vm_area_struct, SLAB_PANIC|SLAB_ACCOUNT);
2726 : 404 : mmap_init();
2727 : 404 : nsproxy_cache_init();
2728 : 404 : }
2729 : :
2730 : : /*
2731 : : * Check constraints on flags passed to the unshare system call.
2732 : : */
2733 : 1212 : static int check_unshare_flags(unsigned long unshare_flags)
2734 : : {
2735 [ + - ]: 1212 : if (unshare_flags & ~(CLONE_THREAD|CLONE_FS|CLONE_NEWNS|CLONE_SIGHAND|
2736 : : CLONE_VM|CLONE_FILES|CLONE_SYSVSEM|
2737 : : CLONE_NEWUTS|CLONE_NEWIPC|CLONE_NEWNET|
2738 : : CLONE_NEWUSER|CLONE_NEWPID|CLONE_NEWCGROUP))
2739 : : return -EINVAL;
2740 : : /*
2741 : : * Not implemented, but pretend it works if there is nothing
2742 : : * to unshare. Note that unsharing the address space or the
2743 : : * signal handlers also need to unshare the signal queues (aka
2744 : : * CLONE_THREAD).
2745 : : */
2746 [ - + ]: 1212 : if (unshare_flags & (CLONE_THREAD | CLONE_SIGHAND | CLONE_VM)) {
2747 [ # # ]: 0 : if (!thread_group_empty(current))
2748 : : return -EINVAL;
2749 : : }
2750 [ - + ]: 1212 : if (unshare_flags & (CLONE_SIGHAND | CLONE_VM)) {
2751 [ # # ]: 0 : if (refcount_read(¤t->sighand->count) > 1)
2752 : : return -EINVAL;
2753 : : }
2754 [ - + ]: 1212 : if (unshare_flags & CLONE_VM) {
2755 [ # # ]: 0 : if (!current_is_single_threaded())
2756 : : return -EINVAL;
2757 : : }
2758 : :
2759 : : return 0;
2760 : : }
2761 : :
2762 : : /*
2763 : : * Unshare the filesystem structure if it is being shared
2764 : : */
2765 : 1212 : static int unshare_fs(unsigned long unshare_flags, struct fs_struct **new_fsp)
2766 : : {
2767 : 1212 : struct fs_struct *fs = current->fs;
2768 : :
2769 [ + - + - ]: 1212 : if (!(unshare_flags & CLONE_FS) || !fs)
2770 : : return 0;
2771 : :
2772 : : /* don't need lock here; in the worst case we'll do useless copy */
2773 [ + + ]: 1212 : if (fs->users == 1)
2774 : : return 0;
2775 : :
2776 : 404 : *new_fsp = copy_fs_struct(fs);
2777 [ + - ]: 404 : if (!*new_fsp)
2778 : : return -ENOMEM;
2779 : :
2780 : 404 : return 0;
2781 : : }
2782 : :
2783 : : /*
2784 : : * Unshare file descriptor table if it is being shared
2785 : : */
2786 : 362494 : static int unshare_fd(unsigned long unshare_flags, struct files_struct **new_fdp)
2787 : : {
2788 : 362494 : struct files_struct *fd = current->files;
2789 : 362494 : int error = 0;
2790 : :
2791 [ + + + + ]: 362494 : if ((unshare_flags & CLONE_FILES) &&
2792 [ - + ]: 361264 : (fd && atomic_read(&fd->count) > 1)) {
2793 : 0 : *new_fdp = dup_fd(fd, &error);
2794 [ # # ]: 0 : if (!*new_fdp)
2795 : 0 : return error;
2796 : : }
2797 : :
2798 : : return 0;
2799 : : }
2800 : :
2801 : : /*
2802 : : * unshare allows a process to 'unshare' part of the process
2803 : : * context which was originally shared using clone. copy_*
2804 : : * functions used by do_fork() cannot be used here directly
2805 : : * because they modify an inactive task_struct that is being
2806 : : * constructed. Here we are modifying the current, active,
2807 : : * task_struct.
2808 : : */
2809 : 1212 : int ksys_unshare(unsigned long unshare_flags)
2810 : : {
2811 : 1212 : struct fs_struct *fs, *new_fs = NULL;
2812 : 1212 : struct files_struct *fd, *new_fd = NULL;
2813 : 1212 : struct cred *new_cred = NULL;
2814 : 1212 : struct nsproxy *new_nsproxy = NULL;
2815 : : int do_sysvsem = 0;
2816 : : int err;
2817 : :
2818 : : /*
2819 : : * If unsharing a user namespace must also unshare the thread group
2820 : : * and unshare the filesystem root and working directories.
2821 : : */
2822 [ - + ]: 1212 : if (unshare_flags & CLONE_NEWUSER)
2823 : 0 : unshare_flags |= CLONE_THREAD | CLONE_FS;
2824 : : /*
2825 : : * If unsharing vm, must also unshare signal handlers.
2826 : : */
2827 [ - + ]: 1212 : if (unshare_flags & CLONE_VM)
2828 : 0 : unshare_flags |= CLONE_SIGHAND;
2829 : : /*
2830 : : * If unsharing a signal handlers, must also unshare the signal queues.
2831 : : */
2832 [ - + ]: 1212 : if (unshare_flags & CLONE_SIGHAND)
2833 : 0 : unshare_flags |= CLONE_THREAD;
2834 : : /*
2835 : : * If unsharing namespace, must also unshare filesystem information.
2836 : : */
2837 [ + - ]: 1212 : if (unshare_flags & CLONE_NEWNS)
2838 : 1212 : unshare_flags |= CLONE_FS;
2839 : :
2840 : 1212 : err = check_unshare_flags(unshare_flags);
2841 [ + - ]: 1212 : if (err)
2842 : : goto bad_unshare_out;
2843 : : /*
2844 : : * CLONE_NEWIPC must also detach from the undolist: after switching
2845 : : * to a new ipc namespace, the semaphore arrays from the old
2846 : : * namespace are unreachable.
2847 : : */
2848 [ - + ]: 1212 : if (unshare_flags & (CLONE_NEWIPC|CLONE_SYSVSEM))
2849 : : do_sysvsem = 1;
2850 : 1212 : err = unshare_fs(unshare_flags, &new_fs);
2851 [ + - ]: 1212 : if (err)
2852 : : goto bad_unshare_out;
2853 : 1212 : err = unshare_fd(unshare_flags, &new_fd);
2854 [ + - ]: 1212 : if (err)
2855 : : goto bad_unshare_cleanup_fs;
2856 : 1212 : err = unshare_userns(unshare_flags, &new_cred);
2857 [ + - ]: 1212 : if (err)
2858 : : goto bad_unshare_cleanup_fd;
2859 : 1212 : err = unshare_nsproxy_namespaces(unshare_flags, &new_nsproxy,
2860 : : new_cred, new_fs);
2861 [ + - ]: 1212 : if (err)
2862 : : goto bad_unshare_cleanup_cred;
2863 : :
2864 [ + + + - : 1212 : if (new_fs || new_fd || do_sysvsem || new_cred || new_nsproxy) {
+ - + - +
- ]
2865 [ - + ]: 1212 : if (do_sysvsem) {
2866 : : /*
2867 : : * CLONE_SYSVSEM is equivalent to sys_exit().
2868 : : */
2869 : 0 : exit_sem(current);
2870 : : }
2871 [ - + ]: 1212 : if (unshare_flags & CLONE_NEWIPC) {
2872 : : /* Orphan segments in old ns (see sem above). */
2873 : 0 : exit_shm(current);
2874 : 0 : shm_init_task(current);
2875 : : }
2876 : :
2877 [ + - ]: 1212 : if (new_nsproxy)
2878 : 1212 : switch_task_namespaces(current, new_nsproxy);
2879 : :
2880 : 1212 : task_lock(current);
2881 : :
2882 [ + + ]: 1212 : if (new_fs) {
2883 : 404 : fs = current->fs;
2884 : : spin_lock(&fs->lock);
2885 : 404 : current->fs = new_fs;
2886 [ + - ]: 404 : if (--fs->users)
2887 : 404 : new_fs = NULL;
2888 : : else
2889 : 0 : new_fs = fs;
2890 : : spin_unlock(&fs->lock);
2891 : : }
2892 : :
2893 [ - + ]: 1212 : if (new_fd) {
2894 : 0 : fd = current->files;
2895 : 0 : current->files = new_fd;
2896 : 0 : new_fd = fd;
2897 : : }
2898 : :
2899 : 1212 : task_unlock(current);
2900 : :
2901 [ - + ]: 1212 : if (new_cred) {
2902 : : /* Install the new user namespace */
2903 : 0 : commit_creds(new_cred);
2904 : 0 : new_cred = NULL;
2905 : : }
2906 : : }
2907 : :
2908 : 1212 : perf_event_namespaces(current);
2909 : :
2910 : : bad_unshare_cleanup_cred:
2911 [ - + ]: 1212 : if (new_cred)
2912 : 0 : put_cred(new_cred);
2913 : : bad_unshare_cleanup_fd:
2914 [ - + ]: 1212 : if (new_fd)
2915 : 0 : put_files_struct(new_fd);
2916 : :
2917 : : bad_unshare_cleanup_fs:
2918 [ - + ]: 1212 : if (new_fs)
2919 : 0 : free_fs_struct(new_fs);
2920 : :
2921 : : bad_unshare_out:
2922 : 1212 : return err;
2923 : : }
2924 : :
2925 : 1616 : SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags)
2926 : : {
2927 : 808 : return ksys_unshare(unshare_flags);
2928 : : }
2929 : :
2930 : : /*
2931 : : * Helper to unshare the files of the current task.
2932 : : * We don't want to expose copy_files internals to
2933 : : * the exec layer of the kernel.
2934 : : */
2935 : :
2936 : 361288 : int unshare_files(struct files_struct **displaced)
2937 : : {
2938 : 361288 : struct task_struct *task = current;
2939 : 361288 : struct files_struct *copy = NULL;
2940 : : int error;
2941 : :
2942 : 361288 : error = unshare_fd(CLONE_FILES, ©);
2943 [ + + + - ]: 361278 : if (error || !copy) {
2944 : 361278 : *displaced = NULL;
2945 : 361278 : return error;
2946 : : }
2947 : 0 : *displaced = task->files;
2948 : : task_lock(task);
2949 : 0 : task->files = copy;
2950 : : task_unlock(task);
2951 : 0 : return 0;
2952 : : }
2953 : :
2954 : 5656 : int sysctl_max_threads(struct ctl_table *table, int write,
2955 : : void __user *buffer, size_t *lenp, loff_t *ppos)
2956 : : {
2957 : : struct ctl_table t;
2958 : : int ret;
2959 : 5656 : int threads = max_threads;
2960 : 5656 : int min = 1;
2961 : 5656 : int max = MAX_THREADS;
2962 : :
2963 : 5656 : t = *table;
2964 : 5656 : t.data = &threads;
2965 : 5656 : t.extra1 = &min;
2966 : 5656 : t.extra2 = &max;
2967 : :
2968 : 5656 : ret = proc_dointvec_minmax(&t, write, buffer, lenp, ppos);
2969 [ - + ]: 5656 : if (ret || !write)
2970 : : return ret;
2971 : :
2972 : 0 : max_threads = threads;
2973 : :
2974 : 0 : return 0;
2975 : : }
|