1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#include <linux/slab.h>
26#include <linux/file.h>
27#include <linux/fdtable.h>
28#include <linux/mm.h>
29#include <linux/stat.h>
30#include <linux/fcntl.h>
31#include <linux/swap.h>
32#include <linux/string.h>
33#include <linux/init.h>
34#include <linux/pagemap.h>
35#include <linux/perf_event.h>
36#include <linux/highmem.h>
37#include <linux/spinlock.h>
38#include <linux/key.h>
39#include <linux/personality.h>
40#include <linux/binfmts.h>
41#include <linux/utsname.h>
42#include <linux/pid_namespace.h>
43#include <linux/module.h>
44#include <linux/namei.h>
45#include <linux/mount.h>
46#include <linux/security.h>
47#include <linux/syscalls.h>
48#include <linux/tsacct_kern.h>
49#include <linux/cn_proc.h>
50#include <linux/audit.h>
51#include <linux/tracehook.h>
52#include <linux/kmod.h>
53#include <linux/fsnotify.h>
54#include <linux/fs_struct.h>
55#include <linux/pipe_fs_i.h>
56#include <linux/oom.h>
57#include <linux/compat.h>
58
59#include <asm/uaccess.h>
60#include <asm/mmu_context.h>
61#include <asm/tlb.h>
62#include <asm/exec.h>
63
64#include <trace/events/task.h>
65#include "internal.h"
66
67#include <trace/events/sched.h>
68
69int core_uses_pid;
70char core_pattern[CORENAME_MAX_SIZE] = "core";
71unsigned int core_pipe_limit;
72int suid_dumpable = 0;
73
74struct core_name {
75 char *corename;
76 int used, size;
77};
78static atomic_t call_count = ATOMIC_INIT(1);
79
80
81
82static LIST_HEAD(formats);
83static DEFINE_RWLOCK(binfmt_lock);
84
85void __register_binfmt(struct linux_binfmt * fmt, int insert)
86{
87 BUG_ON(!fmt);
88 write_lock(&binfmt_lock);
89 insert ? list_add(&fmt->lh, &formats) :
90 list_add_tail(&fmt->lh, &formats);
91 write_unlock(&binfmt_lock);
92}
93
94EXPORT_SYMBOL(__register_binfmt);
95
96void unregister_binfmt(struct linux_binfmt * fmt)
97{
98 write_lock(&binfmt_lock);
99 list_del(&fmt->lh);
100 write_unlock(&binfmt_lock);
101}
102
103EXPORT_SYMBOL(unregister_binfmt);
104
105static inline void put_binfmt(struct linux_binfmt * fmt)
106{
107 module_put(fmt->module);
108}
109
110
111
112
113
114
115
116SYSCALL_DEFINE1(uselib, const char __user *, library)
117{
118 struct file *file;
119 char *tmp = getname(library);
120 int error = PTR_ERR(tmp);
121 static const struct open_flags uselib_flags = {
122 .open_flag = O_LARGEFILE | O_RDONLY | __FMODE_EXEC,
123 .acc_mode = MAY_READ | MAY_EXEC | MAY_OPEN,
124 .intent = LOOKUP_OPEN
125 };
126
127 if (IS_ERR(tmp))
128 goto out;
129
130 file = do_filp_open(AT_FDCWD, tmp, &uselib_flags, LOOKUP_FOLLOW);
131 putname(tmp);
132 error = PTR_ERR(file);
133 if (IS_ERR(file))
134 goto out;
135
136 error = -EINVAL;
137 if (!S_ISREG(file->f_path.dentry->d_inode->i_mode))
138 goto exit;
139
140 error = -EACCES;
141 if (file->f_path.mnt->mnt_flags & MNT_NOEXEC)
142 goto exit;
143
144 fsnotify_open(file);
145
146 error = -ENOEXEC;
147 if(file->f_op) {
148 struct linux_binfmt * fmt;
149
150 read_lock(&binfmt_lock);
151 list_for_each_entry(fmt, &formats, lh) {
152 if (!fmt->load_shlib)
153 continue;
154 if (!try_module_get(fmt->module))
155 continue;
156 read_unlock(&binfmt_lock);
157 error = fmt->load_shlib(file);
158 read_lock(&binfmt_lock);
159 put_binfmt(fmt);
160 if (error != -ENOEXEC)
161 break;
162 }
163 read_unlock(&binfmt_lock);
164 }
165exit:
166 fput(file);
167out:
168 return error;
169}
170
171#ifdef CONFIG_MMU
172
173
174
175
176
177
178static void acct_arg_size(struct linux_binprm *bprm, unsigned long pages)
179{
180 struct mm_struct *mm = current->mm;
181 long diff = (long)(pages - bprm->vma_pages);
182
183 if (!mm || !diff)
184 return;
185
186 bprm->vma_pages = pages;
187 add_mm_counter(mm, MM_ANONPAGES, diff);
188}
189
190static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,
191 int write)
192{
193 struct page *page;
194 int ret;
195
196#ifdef CONFIG_STACK_GROWSUP
197 if (write) {
198 ret = expand_downwards(bprm->vma, pos);
199 if (ret < 0)
200 return NULL;
201 }
202#endif
203 ret = get_user_pages(current, bprm->mm, pos,
204 1, write, 1, &page, NULL);
205 if (ret <= 0)
206 return NULL;
207
208 if (write) {
209 unsigned long size = bprm->vma->vm_end - bprm->vma->vm_start;
210 struct rlimit *rlim;
211
212 acct_arg_size(bprm, size / PAGE_SIZE);
213
214
215
216
217
218 if (size <= ARG_MAX)
219 return page;
220
221
222
223
224
225
226
227
228 rlim = current->signal->rlim;
229 if (size > ACCESS_ONCE(rlim[RLIMIT_STACK].rlim_cur) / 4) {
230 put_page(page);
231 return NULL;
232 }
233 }
234
235 return page;
236}
237
238static void put_arg_page(struct page *page)
239{
240 put_page(page);
241}
242
243static void free_arg_page(struct linux_binprm *bprm, int i)
244{
245}
246
247static void free_arg_pages(struct linux_binprm *bprm)
248{
249}
250
251static void flush_arg_page(struct linux_binprm *bprm, unsigned long pos,
252 struct page *page)
253{
254 flush_cache_page(bprm->vma, pos, page_to_pfn(page));
255}
256
257static int __bprm_mm_init(struct linux_binprm *bprm)
258{
259 int err;
260 struct vm_area_struct *vma = NULL;
261 struct mm_struct *mm = bprm->mm;
262
263 bprm->vma = vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
264 if (!vma)
265 return -ENOMEM;
266
267 down_write(&mm->mmap_sem);
268 vma->vm_mm = mm;
269
270
271
272
273
274
275
276 BUILD_BUG_ON(VM_STACK_FLAGS & VM_STACK_INCOMPLETE_SETUP);
277 vma->vm_end = STACK_TOP_MAX;
278 vma->vm_start = vma->vm_end - PAGE_SIZE;
279 vma->vm_flags = VM_STACK_FLAGS | VM_STACK_INCOMPLETE_SETUP;
280 vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
281 INIT_LIST_HEAD(&vma->anon_vma_chain);
282
283 err = security_file_mmap(NULL, 0, 0, 0, vma->vm_start, 1);
284 if (err)
285 goto err;
286
287 err = insert_vm_struct(mm, vma);
288 if (err)
289 goto err;
290
291 mm->stack_vm = mm->total_vm = 1;
292 up_write(&mm->mmap_sem);
293 bprm->p = vma->vm_end - sizeof(void *);
294 return 0;
295err:
296 up_write(&mm->mmap_sem);
297 bprm->vma = NULL;
298 kmem_cache_free(vm_area_cachep, vma);
299 return err;
300}
301
302static bool valid_arg_len(struct linux_binprm *bprm, long len)
303{
304 return len <= MAX_ARG_STRLEN;
305}
306
307#else
308
309static inline void acct_arg_size(struct linux_binprm *bprm, unsigned long pages)
310{
311}
312
313static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,
314 int write)
315{
316 struct page *page;
317
318 page = bprm->page[pos / PAGE_SIZE];
319 if (!page && write) {
320 page = alloc_page(GFP_HIGHUSER|__GFP_ZERO);
321 if (!page)
322 return NULL;
323 bprm->page[pos / PAGE_SIZE] = page;
324 }
325
326 return page;
327}
328
329static void put_arg_page(struct page *page)
330{
331}
332
333static void free_arg_page(struct linux_binprm *bprm, int i)
334{
335 if (bprm->page[i]) {
336 __free_page(bprm->page[i]);
337 bprm->page[i] = NULL;
338 }
339}
340
341static void free_arg_pages(struct linux_binprm *bprm)
342{
343 int i;
344
345 for (i = 0; i < MAX_ARG_PAGES; i++)
346 free_arg_page(bprm, i);
347}
348
349static void flush_arg_page(struct linux_binprm *bprm, unsigned long pos,
350 struct page *page)
351{
352}
353
354static int __bprm_mm_init(struct linux_binprm *bprm)
355{
356 bprm->p = PAGE_SIZE * MAX_ARG_PAGES - sizeof(void *);
357 return 0;
358}
359
360static bool valid_arg_len(struct linux_binprm *bprm, long len)
361{
362 return len <= bprm->p;
363}
364
365#endif
366
367
368
369
370
371
372
373int bprm_mm_init(struct linux_binprm *bprm)
374{
375 int err;
376 struct mm_struct *mm = NULL;
377
378 bprm->mm = mm = mm_alloc();
379 err = -ENOMEM;
380 if (!mm)
381 goto err;
382
383 err = init_new_context(current, mm);
384 if (err)
385 goto err;
386
387 err = __bprm_mm_init(bprm);
388 if (err)
389 goto err;
390
391 return 0;
392
393err:
394 if (mm) {
395 bprm->mm = NULL;
396 mmdrop(mm);
397 }
398
399 return err;
400}
401
402struct user_arg_ptr {
403#ifdef CONFIG_COMPAT
404 bool is_compat;
405#endif
406 union {
407 const char __user *const __user *native;
408#ifdef CONFIG_COMPAT
409 compat_uptr_t __user *compat;
410#endif
411 } ptr;
412};
413
414static const char __user *get_user_arg_ptr(struct user_arg_ptr argv, int nr)
415{
416 const char __user *native;
417
418#ifdef CONFIG_COMPAT
419 if (unlikely(argv.is_compat)) {
420 compat_uptr_t compat;
421
422 if (get_user(compat, argv.ptr.compat + nr))
423 return ERR_PTR(-EFAULT);
424
425 return compat_ptr(compat);
426 }
427#endif
428
429 if (get_user(native, argv.ptr.native + nr))
430 return ERR_PTR(-EFAULT);
431
432 return native;
433}
434
435
436
437
438static int count(struct user_arg_ptr argv, int max)
439{
440 int i = 0;
441
442 if (argv.ptr.native != NULL) {
443 for (;;) {
444 const char __user *p = get_user_arg_ptr(argv, i);
445
446 if (!p)
447 break;
448
449 if (IS_ERR(p))
450 return -EFAULT;
451
452 if (i++ >= max)
453 return -E2BIG;
454
455 if (fatal_signal_pending(current))
456 return -ERESTARTNOHAND;
457 cond_resched();
458 }
459 }
460 return i;
461}
462
463
464
465
466
467
468static int copy_strings(int argc, struct user_arg_ptr argv,
469 struct linux_binprm *bprm)
470{
471 struct page *kmapped_page = NULL;
472 char *kaddr = NULL;
473 unsigned long kpos = 0;
474 int ret;
475
476 while (argc-- > 0) {
477 const char __user *str;
478 int len;
479 unsigned long pos;
480
481 ret = -EFAULT;
482 str = get_user_arg_ptr(argv, argc);
483 if (IS_ERR(str))
484 goto out;
485
486 len = strnlen_user(str, MAX_ARG_STRLEN);
487 if (!len)
488 goto out;
489
490 ret = -E2BIG;
491 if (!valid_arg_len(bprm, len))
492 goto out;
493
494
495 pos = bprm->p;
496 str += len;
497 bprm->p -= len;
498
499 while (len > 0) {
500 int offset, bytes_to_copy;
501
502 if (fatal_signal_pending(current)) {
503 ret = -ERESTARTNOHAND;
504 goto out;
505 }
506 cond_resched();
507
508 offset = pos % PAGE_SIZE;
509 if (offset == 0)
510 offset = PAGE_SIZE;
511
512 bytes_to_copy = offset;
513 if (bytes_to_copy > len)
514 bytes_to_copy = len;
515
516 offset -= bytes_to_copy;
517 pos -= bytes_to_copy;
518 str -= bytes_to_copy;
519 len -= bytes_to_copy;
520
521 if (!kmapped_page || kpos != (pos & PAGE_MASK)) {
522 struct page *page;
523
524 page = get_arg_page(bprm, pos, 1);
525 if (!page) {
526 ret = -E2BIG;
527 goto out;
528 }
529
530 if (kmapped_page) {
531 flush_kernel_dcache_page(kmapped_page);
532 kunmap(kmapped_page);
533 put_arg_page(kmapped_page);
534 }
535 kmapped_page = page;
536 kaddr = kmap(kmapped_page);
537 kpos = pos & PAGE_MASK;
538 flush_arg_page(bprm, kpos, kmapped_page);
539 }
540 if (copy_from_user(kaddr+offset, str, bytes_to_copy)) {
541 ret = -EFAULT;
542 goto out;
543 }
544 }
545 }
546 ret = 0;
547out:
548 if (kmapped_page) {
549 flush_kernel_dcache_page(kmapped_page);
550 kunmap(kmapped_page);
551 put_arg_page(kmapped_page);
552 }
553 return ret;
554}
555
556
557
558
559int copy_strings_kernel(int argc, const char *const *__argv,
560 struct linux_binprm *bprm)
561{
562 int r;
563 mm_segment_t oldfs = get_fs();
564 struct user_arg_ptr argv = {
565 .ptr.native = (const char __user *const __user *)__argv,
566 };
567
568 set_fs(KERNEL_DS);
569 r = copy_strings(argc, argv, bprm);
570 set_fs(oldfs);
571
572 return r;
573}
574EXPORT_SYMBOL(copy_strings_kernel);
575
576#ifdef CONFIG_MMU
577
578
579
580
581
582
583
584
585
586
587
588
589
590static int shift_arg_pages(struct vm_area_struct *vma, unsigned long shift)
591{
592 struct mm_struct *mm = vma->vm_mm;
593 unsigned long old_start = vma->vm_start;
594 unsigned long old_end = vma->vm_end;
595 unsigned long length = old_end - old_start;
596 unsigned long new_start = old_start - shift;
597 unsigned long new_end = old_end - shift;
598 struct mmu_gather tlb;
599
600 BUG_ON(new_start > new_end);
601
602
603
604
605
606 if (vma != find_vma(mm, new_start))
607 return -EFAULT;
608
609
610
611
612 if (vma_adjust(vma, new_start, old_end, vma->vm_pgoff, NULL))
613 return -ENOMEM;
614
615
616
617
618
619 if (length != move_page_tables(vma, old_start,
620 vma, new_start, length))
621 return -ENOMEM;
622
623 lru_add_drain();
624 tlb_gather_mmu(&tlb, mm, 0);
625 if (new_end > old_start) {
626
627
628
629 free_pgd_range(&tlb, new_end, old_end, new_end,
630 vma->vm_next ? vma->vm_next->vm_start : 0);
631 } else {
632
633
634
635
636
637
638 free_pgd_range(&tlb, old_start, old_end, new_end,
639 vma->vm_next ? vma->vm_next->vm_start : 0);
640 }
641 tlb_finish_mmu(&tlb, new_end, old_end);
642
643
644
645
646 vma_adjust(vma, new_start, new_end, vma->vm_pgoff, NULL);
647
648 return 0;
649}
650
651
652
653
654
655int setup_arg_pages(struct linux_binprm *bprm,
656 unsigned long stack_top,
657 int executable_stack)
658{
659 unsigned long ret;
660 unsigned long stack_shift;
661 struct mm_struct *mm = current->mm;
662 struct vm_area_struct *vma = bprm->vma;
663 struct vm_area_struct *prev = NULL;
664 unsigned long vm_flags;
665 unsigned long stack_base;
666 unsigned long stack_size;
667 unsigned long stack_expand;
668 unsigned long rlim_stack;
669
670#ifdef CONFIG_STACK_GROWSUP
671
672 stack_base = rlimit_max(RLIMIT_STACK);
673 if (stack_base > (1 << 30))
674 stack_base = 1 << 30;
675
676
677 if (vma->vm_end - vma->vm_start > stack_base)
678 return -ENOMEM;
679
680 stack_base = PAGE_ALIGN(stack_top - stack_base);
681
682 stack_shift = vma->vm_start - stack_base;
683 mm->arg_start = bprm->p - stack_shift;
684 bprm->p = vma->vm_end - stack_shift;
685#else
686 stack_top = arch_align_stack(stack_top);
687 stack_top = PAGE_ALIGN(stack_top);
688
689 if (unlikely(stack_top < mmap_min_addr) ||
690 unlikely(vma->vm_end - vma->vm_start >= stack_top - mmap_min_addr))
691 return -ENOMEM;
692
693 stack_shift = vma->vm_end - stack_top;
694
695 bprm->p -= stack_shift;
696 mm->arg_start = bprm->p;
697#endif
698
699 if (bprm->loader)
700 bprm->loader -= stack_shift;
701 bprm->exec -= stack_shift;
702
703 down_write(&mm->mmap_sem);
704 vm_flags = VM_STACK_FLAGS;
705
706
707
708
709
710
711 if (unlikely(executable_stack == EXSTACK_ENABLE_X))
712 vm_flags |= VM_EXEC;
713 else if (executable_stack == EXSTACK_DISABLE_X)
714 vm_flags &= ~VM_EXEC;
715 vm_flags |= mm->def_flags;
716 vm_flags |= VM_STACK_INCOMPLETE_SETUP;
717
718 ret = mprotect_fixup(vma, &prev, vma->vm_start, vma->vm_end,
719 vm_flags);
720 if (ret)
721 goto out_unlock;
722 BUG_ON(prev != vma);
723
724
725 if (stack_shift) {
726 ret = shift_arg_pages(vma, stack_shift);
727 if (ret)
728 goto out_unlock;
729 }
730
731
732 vma->vm_flags &= ~VM_STACK_INCOMPLETE_SETUP;
733
734 stack_expand = 131072UL;
735 stack_size = vma->vm_end - vma->vm_start;
736
737
738
739
740 rlim_stack = rlimit(RLIMIT_STACK) & PAGE_MASK;
741#ifdef CONFIG_STACK_GROWSUP
742 if (stack_size + stack_expand > rlim_stack)
743 stack_base = vma->vm_start + rlim_stack;
744 else
745 stack_base = vma->vm_end + stack_expand;
746#else
747 if (stack_size + stack_expand > rlim_stack)
748 stack_base = vma->vm_end - rlim_stack;
749 else
750 stack_base = vma->vm_start - stack_expand;
751#endif
752 current->mm->start_stack = bprm->p;
753 ret = expand_stack(vma, stack_base);
754 if (ret)
755 ret = -EFAULT;
756
757out_unlock:
758 up_write(&mm->mmap_sem);
759 return ret;
760}
761EXPORT_SYMBOL(setup_arg_pages);
762
763#endif
764
765struct file *open_exec(const char *name)
766{
767 struct file *file;
768 int err;
769 static const struct open_flags open_exec_flags = {
770 .open_flag = O_LARGEFILE | O_RDONLY | __FMODE_EXEC,
771 .acc_mode = MAY_EXEC | MAY_OPEN,
772 .intent = LOOKUP_OPEN
773 };
774
775 file = do_filp_open(AT_FDCWD, name, &open_exec_flags, LOOKUP_FOLLOW);
776 if (IS_ERR(file))
777 goto out;
778
779 err = -EACCES;
780 if (!S_ISREG(file->f_path.dentry->d_inode->i_mode))
781 goto exit;
782
783 if (file->f_path.mnt->mnt_flags & MNT_NOEXEC)
784 goto exit;
785
786 fsnotify_open(file);
787
788 err = deny_write_access(file);
789 if (err)
790 goto exit;
791
792out:
793 return file;
794
795exit:
796 fput(file);
797 return ERR_PTR(err);
798}
799EXPORT_SYMBOL(open_exec);
800
801int kernel_read(struct file *file, loff_t offset,
802 char *addr, unsigned long count)
803{
804 mm_segment_t old_fs;
805 loff_t pos = offset;
806 int result;
807
808 old_fs = get_fs();
809 set_fs(get_ds());
810
811 result = vfs_read(file, (void __user *)addr, count, &pos);
812 set_fs(old_fs);
813 return result;
814}
815
816EXPORT_SYMBOL(kernel_read);
817
818static int exec_mmap(struct mm_struct *mm)
819{
820 struct task_struct *tsk;
821 struct mm_struct * old_mm, *active_mm;
822
823
824 tsk = current;
825 old_mm = current->mm;
826 sync_mm_rss(old_mm);
827 mm_release(tsk, old_mm);
828
829 if (old_mm) {
830
831
832
833
834
835
836 down_read(&old_mm->mmap_sem);
837 if (unlikely(old_mm->core_state)) {
838 up_read(&old_mm->mmap_sem);
839 return -EINTR;
840 }
841 }
842 task_lock(tsk);
843 active_mm = tsk->active_mm;
844 tsk->mm = mm;
845 tsk->active_mm = mm;
846 activate_mm(active_mm, mm);
847 task_unlock(tsk);
848 arch_pick_mmap_layout(mm);
849 if (old_mm) {
850 up_read(&old_mm->mmap_sem);
851 BUG_ON(active_mm != old_mm);
852 setmax_mm_hiwater_rss(&tsk->signal->maxrss, old_mm);
853 mm_update_next_owner(old_mm);
854 mmput(old_mm);
855 return 0;
856 }
857 mmdrop(active_mm);
858 return 0;
859}
860
861
862
863
864
865
866
867static int de_thread(struct task_struct *tsk)
868{
869 struct signal_struct *sig = tsk->signal;
870 struct sighand_struct *oldsighand = tsk->sighand;
871 spinlock_t *lock = &oldsighand->siglock;
872
873 if (thread_group_empty(tsk))
874 goto no_thread_group;
875
876
877
878
879 spin_lock_irq(lock);
880 if (signal_group_exit(sig)) {
881
882
883
884
885 spin_unlock_irq(lock);
886 return -EAGAIN;
887 }
888
889 sig->group_exit_task = tsk;
890 sig->notify_count = zap_other_threads(tsk);
891 if (!thread_group_leader(tsk))
892 sig->notify_count--;
893
894 while (sig->notify_count) {
895 __set_current_state(TASK_UNINTERRUPTIBLE);
896 spin_unlock_irq(lock);
897 schedule();
898 spin_lock_irq(lock);
899 }
900 spin_unlock_irq(lock);
901
902
903
904
905
906
907 if (!thread_group_leader(tsk)) {
908 struct task_struct *leader = tsk->group_leader;
909
910 sig->notify_count = -1;
911 for (;;) {
912 write_lock_irq(&tasklist_lock);
913 if (likely(leader->exit_state))
914 break;
915 __set_current_state(TASK_UNINTERRUPTIBLE);
916 write_unlock_irq(&tasklist_lock);
917 schedule();
918 }
919
920
921
922
923
924
925
926
927
928
929
930 tsk->start_time = leader->start_time;
931
932 BUG_ON(!same_thread_group(leader, tsk));
933 BUG_ON(has_group_leader_pid(tsk));
934
935
936
937
938
939
940
941
942
943
944
945
946 detach_pid(tsk, PIDTYPE_PID);
947 tsk->pid = leader->pid;
948 attach_pid(tsk, PIDTYPE_PID, task_pid(leader));
949 transfer_pid(leader, tsk, PIDTYPE_PGID);
950 transfer_pid(leader, tsk, PIDTYPE_SID);
951
952 list_replace_rcu(&leader->tasks, &tsk->tasks);
953 list_replace_init(&leader->sibling, &tsk->sibling);
954
955 tsk->group_leader = tsk;
956 leader->group_leader = tsk;
957
958 tsk->exit_signal = SIGCHLD;
959 leader->exit_signal = -1;
960
961 BUG_ON(leader->exit_state != EXIT_ZOMBIE);
962 leader->exit_state = EXIT_DEAD;
963
964
965
966
967
968
969 if (unlikely(leader->ptrace))
970 __wake_up_parent(leader, leader->parent);
971 write_unlock_irq(&tasklist_lock);
972
973 release_task(leader);
974 }
975
976 sig->group_exit_task = NULL;
977 sig->notify_count = 0;
978
979no_thread_group:
980
981 tsk->exit_signal = SIGCHLD;
982
983 exit_itimers(sig);
984 flush_itimer_signals();
985
986 if (atomic_read(&oldsighand->count) != 1) {
987 struct sighand_struct *newsighand;
988
989
990
991
992 newsighand = kmem_cache_alloc(sighand_cachep, GFP_KERNEL);
993 if (!newsighand)
994 return -ENOMEM;
995
996 atomic_set(&newsighand->count, 1);
997 memcpy(newsighand->action, oldsighand->action,
998 sizeof(newsighand->action));
999
1000 write_lock_irq(&tasklist_lock);
1001 spin_lock(&oldsighand->siglock);
1002 rcu_assign_pointer(tsk->sighand, newsighand);
1003 spin_unlock(&oldsighand->siglock);
1004 write_unlock_irq(&tasklist_lock);
1005
1006 __cleanup_sighand(oldsighand);
1007 }
1008
1009 BUG_ON(!thread_group_leader(tsk));
1010 return 0;
1011}
1012
1013
1014
1015
1016
1017static void flush_old_files(struct files_struct * files)
1018{
1019 long j = -1;
1020 struct fdtable *fdt;
1021
1022 spin_lock(&files->file_lock);
1023 for (;;) {
1024 unsigned long set, i;
1025
1026 j++;
1027 i = j * __NFDBITS;
1028 fdt = files_fdtable(files);
1029 if (i >= fdt->max_fds)
1030 break;
1031 set = fdt->close_on_exec[j];
1032 if (!set)
1033 continue;
1034 fdt->close_on_exec[j] = 0;
1035 spin_unlock(&files->file_lock);
1036 for ( ; set ; i++,set >>= 1) {
1037 if (set & 1) {
1038 sys_close(i);
1039 }
1040 }
1041 spin_lock(&files->file_lock);
1042
1043 }
1044 spin_unlock(&files->file_lock);
1045}
1046
1047char *get_task_comm(char *buf, struct task_struct *tsk)
1048{
1049
1050 task_lock(tsk);
1051 strncpy(buf, tsk->comm, sizeof(tsk->comm));
1052 task_unlock(tsk);
1053 return buf;
1054}
1055EXPORT_SYMBOL_GPL(get_task_comm);
1056
1057void set_task_comm(struct task_struct *tsk, char *buf)
1058{
1059 task_lock(tsk);
1060
1061 trace_task_rename(tsk, buf);
1062
1063
1064
1065
1066
1067
1068
1069 memset(tsk->comm, 0, TASK_COMM_LEN);
1070 wmb();
1071 strlcpy(tsk->comm, buf, sizeof(tsk->comm));
1072 task_unlock(tsk);
1073 perf_event_comm(tsk);
1074}
1075
1076static void filename_to_taskname(char *tcomm, const char *fn, unsigned int len)
1077{
1078 int i, ch;
1079
1080
1081 for (i = 0; (ch = *(fn++)) != '\0';) {
1082 if (ch == '/')
1083 i = 0;
1084 else
1085 if (i < len - 1)
1086 tcomm[i++] = ch;
1087 }
1088 tcomm[i] = '\0';
1089}
1090
1091int flush_old_exec(struct linux_binprm * bprm)
1092{
1093 int retval;
1094
1095
1096
1097
1098
1099 retval = de_thread(current);
1100 if (retval)
1101 goto out;
1102
1103 set_mm_exe_file(bprm->mm, bprm->file);
1104
1105 filename_to_taskname(bprm->tcomm, bprm->filename, sizeof(bprm->tcomm));
1106
1107
1108
1109 acct_arg_size(bprm, 0);
1110 retval = exec_mmap(bprm->mm);
1111 if (retval)
1112 goto out;
1113
1114 bprm->mm = NULL;
1115
1116 set_fs(USER_DS);
1117 current->flags &= ~(PF_RANDOMIZE | PF_FORKNOEXEC | PF_KTHREAD);
1118 flush_thread();
1119 current->personality &= ~bprm->per_clear;
1120
1121 return 0;
1122
1123out:
1124 return retval;
1125}
1126EXPORT_SYMBOL(flush_old_exec);
1127
1128void would_dump(struct linux_binprm *bprm, struct file *file)
1129{
1130 if (inode_permission(file->f_path.dentry->d_inode, MAY_READ) < 0)
1131 bprm->interp_flags |= BINPRM_FLAGS_ENFORCE_NONDUMP;
1132}
1133EXPORT_SYMBOL(would_dump);
1134
1135void setup_new_exec(struct linux_binprm * bprm)
1136{
1137 arch_pick_mmap_layout(current->mm);
1138
1139
1140 current->sas_ss_sp = current->sas_ss_size = 0;
1141
1142 if (current_euid() == current_uid() && current_egid() == current_gid())
1143 set_dumpable(current->mm, 1);
1144 else
1145 set_dumpable(current->mm, suid_dumpable);
1146
1147 set_task_comm(current, bprm->tcomm);
1148
1149
1150
1151
1152
1153 current->mm->task_size = TASK_SIZE;
1154
1155
1156 if (bprm->cred->uid != current_euid() ||
1157 bprm->cred->gid != current_egid()) {
1158 current->pdeath_signal = 0;
1159 } else {
1160 would_dump(bprm, bprm->file);
1161 if (bprm->interp_flags & BINPRM_FLAGS_ENFORCE_NONDUMP)
1162 set_dumpable(current->mm, suid_dumpable);
1163 }
1164
1165
1166
1167
1168
1169 if (!get_dumpable(current->mm))
1170 perf_event_exit_task(current);
1171
1172
1173
1174
1175 current->self_exec_id++;
1176
1177 flush_signal_handlers(current, 0);
1178 flush_old_files(current->files);
1179}
1180EXPORT_SYMBOL(setup_new_exec);
1181
1182
1183
1184
1185
1186
1187
1188int prepare_bprm_creds(struct linux_binprm *bprm)
1189{
1190 if (mutex_lock_interruptible(¤t->signal->cred_guard_mutex))
1191 return -ERESTARTNOINTR;
1192
1193 bprm->cred = prepare_exec_creds();
1194 if (likely(bprm->cred))
1195 return 0;
1196
1197 mutex_unlock(¤t->signal->cred_guard_mutex);
1198 return -ENOMEM;
1199}
1200
1201void free_bprm(struct linux_binprm *bprm)
1202{
1203 free_arg_pages(bprm);
1204 if (bprm->cred) {
1205 mutex_unlock(¤t->signal->cred_guard_mutex);
1206 abort_creds(bprm->cred);
1207 }
1208 kfree(bprm);
1209}
1210
1211
1212
1213
1214void install_exec_creds(struct linux_binprm *bprm)
1215{
1216 security_bprm_committing_creds(bprm);
1217
1218 commit_creds(bprm->cred);
1219 bprm->cred = NULL;
1220
1221
1222
1223
1224
1225 security_bprm_committed_creds(bprm);
1226 mutex_unlock(¤t->signal->cred_guard_mutex);
1227}
1228EXPORT_SYMBOL(install_exec_creds);
1229
1230
1231
1232
1233
1234
1235static int check_unsafe_exec(struct linux_binprm *bprm)
1236{
1237 struct task_struct *p = current, *t;
1238 unsigned n_fs;
1239 int res = 0;
1240
1241 if (p->ptrace) {
1242 if (p->ptrace & PT_PTRACE_CAP)
1243 bprm->unsafe |= LSM_UNSAFE_PTRACE_CAP;
1244 else
1245 bprm->unsafe |= LSM_UNSAFE_PTRACE;
1246 }
1247
1248 n_fs = 1;
1249 spin_lock(&p->fs->lock);
1250 rcu_read_lock();
1251 for (t = next_thread(p); t != p; t = next_thread(t)) {
1252 if (t->fs == p->fs)
1253 n_fs++;
1254 }
1255 rcu_read_unlock();
1256
1257 if (p->fs->users > n_fs) {
1258 bprm->unsafe |= LSM_UNSAFE_SHARE;
1259 } else {
1260 res = -EAGAIN;
1261 if (!p->fs->in_exec) {
1262 p->fs->in_exec = 1;
1263 res = 1;
1264 }
1265 }
1266 spin_unlock(&p->fs->lock);
1267
1268 return res;
1269}
1270
1271
1272
1273
1274
1275
1276
1277int prepare_binprm(struct linux_binprm *bprm)
1278{
1279 umode_t mode;
1280 struct inode * inode = bprm->file->f_path.dentry->d_inode;
1281 int retval;
1282
1283 mode = inode->i_mode;
1284 if (bprm->file->f_op == NULL)
1285 return -EACCES;
1286
1287
1288 bprm->cred->euid = current_euid();
1289 bprm->cred->egid = current_egid();
1290
1291 if (!(bprm->file->f_path.mnt->mnt_flags & MNT_NOSUID)) {
1292
1293 if (mode & S_ISUID) {
1294 bprm->per_clear |= PER_CLEAR_ON_SETID;
1295 bprm->cred->euid = inode->i_uid;
1296 }
1297
1298
1299
1300
1301
1302
1303
1304 if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) {
1305 bprm->per_clear |= PER_CLEAR_ON_SETID;
1306 bprm->cred->egid = inode->i_gid;
1307 }
1308 }
1309
1310
1311 retval = security_bprm_set_creds(bprm);
1312 if (retval)
1313 return retval;
1314 bprm->cred_prepared = 1;
1315
1316 memset(bprm->buf, 0, BINPRM_BUF_SIZE);
1317 return kernel_read(bprm->file, 0, bprm->buf, BINPRM_BUF_SIZE);
1318}
1319
1320EXPORT_SYMBOL(prepare_binprm);
1321
1322
1323
1324
1325
1326
1327int remove_arg_zero(struct linux_binprm *bprm)
1328{
1329 int ret = 0;
1330 unsigned long offset;
1331 char *kaddr;
1332 struct page *page;
1333
1334 if (!bprm->argc)
1335 return 0;
1336
1337 do {
1338 offset = bprm->p & ~PAGE_MASK;
1339 page = get_arg_page(bprm, bprm->p, 0);
1340 if (!page) {
1341 ret = -EFAULT;
1342 goto out;
1343 }
1344 kaddr = kmap_atomic(page);
1345
1346 for (; offset < PAGE_SIZE && kaddr[offset];
1347 offset++, bprm->p++)
1348 ;
1349
1350 kunmap_atomic(kaddr);
1351 put_arg_page(page);
1352
1353 if (offset == PAGE_SIZE)
1354 free_arg_page(bprm, (bprm->p >> PAGE_SHIFT) - 1);
1355 } while (offset == PAGE_SIZE);
1356
1357 bprm->p++;
1358 bprm->argc--;
1359 ret = 0;
1360
1361out:
1362 return ret;
1363}
1364EXPORT_SYMBOL(remove_arg_zero);
1365
1366
1367
1368
1369int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
1370{
1371 unsigned int depth = bprm->recursion_depth;
1372 int try,retval;
1373 struct linux_binfmt *fmt;
1374 pid_t old_pid, old_vpid;
1375
1376 retval = security_bprm_check(bprm);
1377 if (retval)
1378 return retval;
1379
1380 retval = audit_bprm(bprm);
1381 if (retval)
1382 return retval;
1383
1384
1385 old_pid = current->pid;
1386 rcu_read_lock();
1387 old_vpid = task_pid_nr_ns(current, task_active_pid_ns(current->parent));
1388 rcu_read_unlock();
1389
1390 retval = -ENOENT;
1391 for (try=0; try<2; try++) {
1392 read_lock(&binfmt_lock);
1393 list_for_each_entry(fmt, &formats, lh) {
1394 int (*fn)(struct linux_binprm *, struct pt_regs *) = fmt->load_binary;
1395 if (!fn)
1396 continue;
1397 if (!try_module_get(fmt->module))
1398 continue;
1399 read_unlock(&binfmt_lock);
1400 retval = fn(bprm, regs);
1401
1402
1403
1404
1405
1406 bprm->recursion_depth = depth;
1407 if (retval >= 0) {
1408 if (depth == 0) {
1409 trace_sched_process_exec(current, old_pid, bprm);
1410 ptrace_event(PTRACE_EVENT_EXEC, old_vpid);
1411 }
1412 put_binfmt(fmt);
1413 allow_write_access(bprm->file);
1414 if (bprm->file)
1415 fput(bprm->file);
1416 bprm->file = NULL;
1417 current->did_exec = 1;
1418 proc_exec_connector(current);
1419 return retval;
1420 }
1421 read_lock(&binfmt_lock);
1422 put_binfmt(fmt);
1423 if (retval != -ENOEXEC || bprm->mm == NULL)
1424 break;
1425 if (!bprm->file) {
1426 read_unlock(&binfmt_lock);
1427 return retval;
1428 }
1429 }
1430 read_unlock(&binfmt_lock);
1431#ifdef CONFIG_MODULES
1432 if (retval != -ENOEXEC || bprm->mm == NULL) {
1433 break;
1434 } else {
1435#define printable(c) (((c)=='\t') || ((c)=='\n') || (0x20<=(c) && (c)<=0x7e))
1436 if (printable(bprm->buf[0]) &&
1437 printable(bprm->buf[1]) &&
1438 printable(bprm->buf[2]) &&
1439 printable(bprm->buf[3]))
1440 break;
1441 if (try)
1442 break;
1443 request_module("binfmt-%04x", *(unsigned short *)(&bprm->buf[2]));
1444 }
1445#else
1446 break;
1447#endif
1448 }
1449 return retval;
1450}
1451
1452EXPORT_SYMBOL(search_binary_handler);
1453
1454
1455
1456
1457static int do_execve_common(const char *filename,
1458 struct user_arg_ptr argv,
1459 struct user_arg_ptr envp,
1460 struct pt_regs *regs)
1461{
1462 struct linux_binprm *bprm;
1463 struct file *file;
1464 struct files_struct *displaced;
1465 bool clear_in_exec;
1466 int retval;
1467 const struct cred *cred = current_cred();
1468
1469
1470
1471
1472
1473
1474
1475 if ((current->flags & PF_NPROC_EXCEEDED) &&
1476 atomic_read(&cred->user->processes) > rlimit(RLIMIT_NPROC)) {
1477 retval = -EAGAIN;
1478 goto out_ret;
1479 }
1480
1481
1482
1483 current->flags &= ~PF_NPROC_EXCEEDED;
1484
1485 retval = unshare_files(&displaced);
1486 if (retval)
1487 goto out_ret;
1488
1489 retval = -ENOMEM;
1490 bprm = kzalloc(sizeof(*bprm), GFP_KERNEL);
1491 if (!bprm)
1492 goto out_files;
1493
1494 retval = prepare_bprm_creds(bprm);
1495 if (retval)
1496 goto out_free;
1497
1498 retval = check_unsafe_exec(bprm);
1499 if (retval < 0)
1500 goto out_free;
1501 clear_in_exec = retval;
1502 current->in_execve = 1;
1503
1504 file = open_exec(filename);
1505 retval = PTR_ERR(file);
1506 if (IS_ERR(file))
1507 goto out_unmark;
1508
1509 sched_exec();
1510
1511 bprm->file = file;
1512 bprm->filename = filename;
1513 bprm->interp = filename;
1514
1515 retval = bprm_mm_init(bprm);
1516 if (retval)
1517 goto out_file;
1518
1519 bprm->argc = count(argv, MAX_ARG_STRINGS);
1520 if ((retval = bprm->argc) < 0)
1521 goto out;
1522
1523 bprm->envc = count(envp, MAX_ARG_STRINGS);
1524 if ((retval = bprm->envc) < 0)
1525 goto out;
1526
1527 retval = prepare_binprm(bprm);
1528 if (retval < 0)
1529 goto out;
1530
1531 retval = copy_strings_kernel(1, &bprm->filename, bprm);
1532 if (retval < 0)
1533 goto out;
1534
1535 bprm->exec = bprm->p;
1536 retval = copy_strings(bprm->envc, envp, bprm);
1537 if (retval < 0)
1538 goto out;
1539
1540 retval = copy_strings(bprm->argc, argv, bprm);
1541 if (retval < 0)
1542 goto out;
1543
1544 retval = search_binary_handler(bprm,regs);
1545 if (retval < 0)
1546 goto out;
1547
1548
1549 current->fs->in_exec = 0;
1550 current->in_execve = 0;
1551 acct_update_integrals(current);
1552 free_bprm(bprm);
1553 if (displaced)
1554 put_files_struct(displaced);
1555 return retval;
1556
1557out:
1558 if (bprm->mm) {
1559 acct_arg_size(bprm, 0);
1560 mmput(bprm->mm);
1561 }
1562
1563out_file:
1564 if (bprm->file) {
1565 allow_write_access(bprm->file);
1566 fput(bprm->file);
1567 }
1568
1569out_unmark:
1570 if (clear_in_exec)
1571 current->fs->in_exec = 0;
1572 current->in_execve = 0;
1573
1574out_free:
1575 free_bprm(bprm);
1576
1577out_files:
1578 if (displaced)
1579 reset_files_struct(displaced);
1580out_ret:
1581 return retval;
1582}
1583
1584int do_execve(const char *filename,
1585 const char __user *const __user *__argv,
1586 const char __user *const __user *__envp,
1587 struct pt_regs *regs)
1588{
1589 struct user_arg_ptr argv = { .ptr.native = __argv };
1590 struct user_arg_ptr envp = { .ptr.native = __envp };
1591 return do_execve_common(filename, argv, envp, regs);
1592}
1593
1594#ifdef CONFIG_COMPAT
1595int compat_do_execve(char *filename,
1596 compat_uptr_t __user *__argv,
1597 compat_uptr_t __user *__envp,
1598 struct pt_regs *regs)
1599{
1600 struct user_arg_ptr argv = {
1601 .is_compat = true,
1602 .ptr.compat = __argv,
1603 };
1604 struct user_arg_ptr envp = {
1605 .is_compat = true,
1606 .ptr.compat = __envp,
1607 };
1608 return do_execve_common(filename, argv, envp, regs);
1609}
1610#endif
1611
1612void set_binfmt(struct linux_binfmt *new)
1613{
1614 struct mm_struct *mm = current->mm;
1615
1616 if (mm->binfmt)
1617 module_put(mm->binfmt->module);
1618
1619 mm->binfmt = new;
1620 if (new)
1621 __module_get(new->module);
1622}
1623
1624EXPORT_SYMBOL(set_binfmt);
1625
1626static int expand_corename(struct core_name *cn)
1627{
1628 char *old_corename = cn->corename;
1629
1630 cn->size = CORENAME_MAX_SIZE * atomic_inc_return(&call_count);
1631 cn->corename = krealloc(old_corename, cn->size, GFP_KERNEL);
1632
1633 if (!cn->corename) {
1634 kfree(old_corename);
1635 return -ENOMEM;
1636 }
1637
1638 return 0;
1639}
1640
1641static int cn_printf(struct core_name *cn, const char *fmt, ...)
1642{
1643 char *cur;
1644 int need;
1645 int ret;
1646 va_list arg;
1647
1648 va_start(arg, fmt);
1649 need = vsnprintf(NULL, 0, fmt, arg);
1650 va_end(arg);
1651
1652 if (likely(need < cn->size - cn->used - 1))
1653 goto out_printf;
1654
1655 ret = expand_corename(cn);
1656 if (ret)
1657 goto expand_fail;
1658
1659out_printf:
1660 cur = cn->corename + cn->used;
1661 va_start(arg, fmt);
1662 vsnprintf(cur, need + 1, fmt, arg);
1663 va_end(arg);
1664 cn->used += need;
1665 return 0;
1666
1667expand_fail:
1668 return ret;
1669}
1670
1671static void cn_escape(char *str)
1672{
1673 for (; *str; str++)
1674 if (*str == '/')
1675 *str = '!';
1676}
1677
1678static int cn_print_exe_file(struct core_name *cn)
1679{
1680 struct file *exe_file;
1681 char *pathbuf, *path;
1682 int ret;
1683
1684 exe_file = get_mm_exe_file(current->mm);
1685 if (!exe_file) {
1686 char *commstart = cn->corename + cn->used;
1687 ret = cn_printf(cn, "%s (path unknown)", current->comm);
1688 cn_escape(commstart);
1689 return ret;
1690 }
1691
1692 pathbuf = kmalloc(PATH_MAX, GFP_TEMPORARY);
1693 if (!pathbuf) {
1694 ret = -ENOMEM;
1695 goto put_exe_file;
1696 }
1697
1698 path = d_path(&exe_file->f_path, pathbuf, PATH_MAX);
1699 if (IS_ERR(path)) {
1700 ret = PTR_ERR(path);
1701 goto free_buf;
1702 }
1703
1704 cn_escape(path);
1705
1706 ret = cn_printf(cn, "%s", path);
1707
1708free_buf:
1709 kfree(pathbuf);
1710put_exe_file:
1711 fput(exe_file);
1712 return ret;
1713}
1714
1715
1716
1717
1718
1719static int format_corename(struct core_name *cn, long signr)
1720{
1721 const struct cred *cred = current_cred();
1722 const char *pat_ptr = core_pattern;
1723 int ispipe = (*pat_ptr == '|');
1724 int pid_in_pattern = 0;
1725 int err = 0;
1726
1727 cn->size = CORENAME_MAX_SIZE * atomic_read(&call_count);
1728 cn->corename = kmalloc(cn->size, GFP_KERNEL);
1729 cn->used = 0;
1730
1731 if (!cn->corename)
1732 return -ENOMEM;
1733
1734
1735
1736 while (*pat_ptr) {
1737 if (*pat_ptr != '%') {
1738 if (*pat_ptr == 0)
1739 goto out;
1740 err = cn_printf(cn, "%c", *pat_ptr++);
1741 } else {
1742 switch (*++pat_ptr) {
1743
1744 case 0:
1745 goto out;
1746
1747 case '%':
1748 err = cn_printf(cn, "%c", '%');
1749 break;
1750
1751 case 'p':
1752 pid_in_pattern = 1;
1753 err = cn_printf(cn, "%d",
1754 task_tgid_vnr(current));
1755 break;
1756
1757 case 'u':
1758 err = cn_printf(cn, "%d", cred->uid);
1759 break;
1760
1761 case 'g':
1762 err = cn_printf(cn, "%d", cred->gid);
1763 break;
1764
1765 case 's':
1766 err = cn_printf(cn, "%ld", signr);
1767 break;
1768
1769 case 't': {
1770 struct timeval tv;
1771 do_gettimeofday(&tv);
1772 err = cn_printf(cn, "%lu", tv.tv_sec);
1773 break;
1774 }
1775
1776 case 'h': {
1777 char *namestart = cn->corename + cn->used;
1778 down_read(&uts_sem);
1779 err = cn_printf(cn, "%s",
1780 utsname()->nodename);
1781 up_read(&uts_sem);
1782 cn_escape(namestart);
1783 break;
1784 }
1785
1786 case 'e': {
1787 char *commstart = cn->corename + cn->used;
1788 err = cn_printf(cn, "%s", current->comm);
1789 cn_escape(commstart);
1790 break;
1791 }
1792 case 'E':
1793 err = cn_print_exe_file(cn);
1794 break;
1795
1796 case 'c':
1797 err = cn_printf(cn, "%lu",
1798 rlimit(RLIMIT_CORE));
1799 break;
1800 default:
1801 break;
1802 }
1803 ++pat_ptr;
1804 }
1805
1806 if (err)
1807 return err;
1808 }
1809
1810
1811
1812
1813
1814
1815 if (!ispipe && !pid_in_pattern && core_uses_pid) {
1816 err = cn_printf(cn, ".%d", task_tgid_vnr(current));
1817 if (err)
1818 return err;
1819 }
1820out:
1821 return ispipe;
1822}
1823
1824static int zap_process(struct task_struct *start, int exit_code)
1825{
1826 struct task_struct *t;
1827 int nr = 0;
1828
1829 start->signal->flags = SIGNAL_GROUP_EXIT;
1830 start->signal->group_exit_code = exit_code;
1831 start->signal->group_stop_count = 0;
1832
1833 t = start;
1834 do {
1835 task_clear_jobctl_pending(t, JOBCTL_PENDING_MASK);
1836 if (t != current && t->mm) {
1837 sigaddset(&t->pending.signal, SIGKILL);
1838 signal_wake_up(t, 1);
1839 nr++;
1840 }
1841 } while_each_thread(start, t);
1842
1843 return nr;
1844}
1845
1846static inline int zap_threads(struct task_struct *tsk, struct mm_struct *mm,
1847 struct core_state *core_state, int exit_code)
1848{
1849 struct task_struct *g, *p;
1850 unsigned long flags;
1851 int nr = -EAGAIN;
1852
1853 spin_lock_irq(&tsk->sighand->siglock);
1854 if (!signal_group_exit(tsk->signal)) {
1855 mm->core_state = core_state;
1856 nr = zap_process(tsk, exit_code);
1857 }
1858 spin_unlock_irq(&tsk->sighand->siglock);
1859 if (unlikely(nr < 0))
1860 return nr;
1861
1862 if (atomic_read(&mm->mm_users) == nr + 1)
1863 goto done;
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894 rcu_read_lock();
1895 for_each_process(g) {
1896 if (g == tsk->group_leader)
1897 continue;
1898 if (g->flags & PF_KTHREAD)
1899 continue;
1900 p = g;
1901 do {
1902 if (p->mm) {
1903 if (unlikely(p->mm == mm)) {
1904 lock_task_sighand(p, &flags);
1905 nr += zap_process(p, exit_code);
1906 unlock_task_sighand(p, &flags);
1907 }
1908 break;
1909 }
1910 } while_each_thread(g, p);
1911 }
1912 rcu_read_unlock();
1913done:
1914 atomic_set(&core_state->nr_threads, nr);
1915 return nr;
1916}
1917
1918static int coredump_wait(int exit_code, struct core_state *core_state)
1919{
1920 struct task_struct *tsk = current;
1921 struct mm_struct *mm = tsk->mm;
1922 int core_waiters = -EBUSY;
1923
1924 init_completion(&core_state->startup);
1925 core_state->dumper.task = tsk;
1926 core_state->dumper.next = NULL;
1927
1928 down_write(&mm->mmap_sem);
1929 if (!mm->core_state)
1930 core_waiters = zap_threads(tsk, mm, core_state, exit_code);
1931 up_write(&mm->mmap_sem);
1932
1933 if (core_waiters > 0)
1934 wait_for_completion(&core_state->startup);
1935
1936 return core_waiters;
1937}
1938
1939static void coredump_finish(struct mm_struct *mm)
1940{
1941 struct core_thread *curr, *next;
1942 struct task_struct *task;
1943
1944 next = mm->core_state->dumper.next;
1945 while ((curr = next) != NULL) {
1946 next = curr->next;
1947 task = curr->task;
1948
1949
1950
1951
1952 smp_mb();
1953 curr->task = NULL;
1954 wake_up_process(task);
1955 }
1956
1957 mm->core_state = NULL;
1958}
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980void set_dumpable(struct mm_struct *mm, int value)
1981{
1982 switch (value) {
1983 case 0:
1984 clear_bit(MMF_DUMPABLE, &mm->flags);
1985 smp_wmb();
1986 clear_bit(MMF_DUMP_SECURELY, &mm->flags);
1987 break;
1988 case 1:
1989 set_bit(MMF_DUMPABLE, &mm->flags);
1990 smp_wmb();
1991 clear_bit(MMF_DUMP_SECURELY, &mm->flags);
1992 break;
1993 case 2:
1994 set_bit(MMF_DUMP_SECURELY, &mm->flags);
1995 smp_wmb();
1996 set_bit(MMF_DUMPABLE, &mm->flags);
1997 break;
1998 }
1999}
2000
2001static int __get_dumpable(unsigned long mm_flags)
2002{
2003 int ret;
2004
2005 ret = mm_flags & MMF_DUMPABLE_MASK;
2006 return (ret >= 2) ? 2 : ret;
2007}
2008
2009int get_dumpable(struct mm_struct *mm)
2010{
2011 return __get_dumpable(mm->flags);
2012}
2013
2014static void wait_for_dump_helpers(struct file *file)
2015{
2016 struct pipe_inode_info *pipe;
2017
2018 pipe = file->f_path.dentry->d_inode->i_pipe;
2019
2020 pipe_lock(pipe);
2021 pipe->readers++;
2022 pipe->writers--;
2023
2024 while ((pipe->readers > 1) && (!signal_pending(current))) {
2025 wake_up_interruptible_sync(&pipe->wait);
2026 kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
2027 pipe_wait(pipe);
2028 }
2029
2030 pipe->readers--;
2031 pipe->writers++;
2032 pipe_unlock(pipe);
2033
2034}
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048static int umh_pipe_setup(struct subprocess_info *info, struct cred *new)
2049{
2050 struct file *rp, *wp;
2051 struct fdtable *fdt;
2052 struct coredump_params *cp = (struct coredump_params *)info->data;
2053 struct files_struct *cf = current->files;
2054
2055 wp = create_write_pipe(0);
2056 if (IS_ERR(wp))
2057 return PTR_ERR(wp);
2058
2059 rp = create_read_pipe(wp, 0);
2060 if (IS_ERR(rp)) {
2061 free_write_pipe(wp);
2062 return PTR_ERR(rp);
2063 }
2064
2065 cp->file = wp;
2066
2067 sys_close(0);
2068 fd_install(0, rp);
2069 spin_lock(&cf->file_lock);
2070 fdt = files_fdtable(cf);
2071 __set_open_fd(0, fdt);
2072 __clear_close_on_exec(0, fdt);
2073 spin_unlock(&cf->file_lock);
2074
2075
2076 current->signal->rlim[RLIMIT_CORE] = (struct rlimit){1, 1};
2077
2078 return 0;
2079}
2080
2081void do_coredump(long signr, int exit_code, struct pt_regs *regs)
2082{
2083 struct core_state core_state;
2084 struct core_name cn;
2085 struct mm_struct *mm = current->mm;
2086 struct linux_binfmt * binfmt;
2087 const struct cred *old_cred;
2088 struct cred *cred;
2089 int retval = 0;
2090 int flag = 0;
2091 int ispipe;
2092 static atomic_t core_dump_count = ATOMIC_INIT(0);
2093 struct coredump_params cprm = {
2094 .signr = signr,
2095 .regs = regs,
2096 .limit = rlimit(RLIMIT_CORE),
2097
2098
2099
2100
2101
2102 .mm_flags = mm->flags,
2103 };
2104
2105 audit_core_dumps(signr);
2106
2107 binfmt = mm->binfmt;
2108 if (!binfmt || !binfmt->core_dump)
2109 goto fail;
2110 if (!__get_dumpable(cprm.mm_flags))
2111 goto fail;
2112
2113 cred = prepare_creds();
2114 if (!cred)
2115 goto fail;
2116
2117
2118
2119
2120
2121 if (__get_dumpable(cprm.mm_flags) == 2) {
2122
2123 flag = O_EXCL;
2124 cred->fsuid = 0;
2125 }
2126
2127 retval = coredump_wait(exit_code, &core_state);
2128 if (retval < 0)
2129 goto fail_creds;
2130
2131 old_cred = override_creds(cred);
2132
2133
2134
2135
2136
2137 clear_thread_flag(TIF_SIGPENDING);
2138
2139 ispipe = format_corename(&cn, signr);
2140
2141 if (ispipe) {
2142 int dump_count;
2143 char **helper_argv;
2144
2145 if (ispipe < 0) {
2146 printk(KERN_WARNING "format_corename failed\n");
2147 printk(KERN_WARNING "Aborting core\n");
2148 goto fail_corename;
2149 }
2150
2151 if (cprm.limit == 1) {
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166 printk(KERN_WARNING
2167 "Process %d(%s) has RLIMIT_CORE set to 1\n",
2168 task_tgid_vnr(current), current->comm);
2169 printk(KERN_WARNING "Aborting core\n");
2170 goto fail_unlock;
2171 }
2172 cprm.limit = RLIM_INFINITY;
2173
2174 dump_count = atomic_inc_return(&core_dump_count);
2175 if (core_pipe_limit && (core_pipe_limit < dump_count)) {
2176 printk(KERN_WARNING "Pid %d(%s) over core_pipe_limit\n",
2177 task_tgid_vnr(current), current->comm);
2178 printk(KERN_WARNING "Skipping core dump\n");
2179 goto fail_dropcount;
2180 }
2181
2182 helper_argv = argv_split(GFP_KERNEL, cn.corename+1, NULL);
2183 if (!helper_argv) {
2184 printk(KERN_WARNING "%s failed to allocate memory\n",
2185 __func__);
2186 goto fail_dropcount;
2187 }
2188
2189 retval = call_usermodehelper_fns(helper_argv[0], helper_argv,
2190 NULL, UMH_WAIT_EXEC, umh_pipe_setup,
2191 NULL, &cprm);
2192 argv_free(helper_argv);
2193 if (retval) {
2194 printk(KERN_INFO "Core dump to %s pipe failed\n",
2195 cn.corename);
2196 goto close_fail;
2197 }
2198 } else {
2199 struct inode *inode;
2200
2201 if (cprm.limit < binfmt->min_coredump)
2202 goto fail_unlock;
2203
2204 cprm.file = filp_open(cn.corename,
2205 O_CREAT | 2 | O_NOFOLLOW | O_LARGEFILE | flag,
2206 0600);
2207 if (IS_ERR(cprm.file))
2208 goto fail_unlock;
2209
2210 inode = cprm.file->f_path.dentry->d_inode;
2211 if (inode->i_nlink > 1)
2212 goto close_fail;
2213 if (d_unhashed(cprm.file->f_path.dentry))
2214 goto close_fail;
2215
2216
2217
2218
2219 if (!S_ISREG(inode->i_mode))
2220 goto close_fail;
2221
2222
2223
2224
2225 if (inode->i_uid != current_fsuid())
2226 goto close_fail;
2227 if (!cprm.file->f_op || !cprm.file->f_op->write)
2228 goto close_fail;
2229 if (do_truncate(cprm.file->f_path.dentry, 0, 0, cprm.file))
2230 goto close_fail;
2231 }
2232
2233 retval = binfmt->core_dump(&cprm);
2234 if (retval)
2235 current->signal->group_exit_code |= 0x80;
2236
2237 if (ispipe && core_pipe_limit)
2238 wait_for_dump_helpers(cprm.file);
2239close_fail:
2240 if (cprm.file)
2241 filp_close(cprm.file, NULL);
2242fail_dropcount:
2243 if (ispipe)
2244 atomic_dec(&core_dump_count);
2245fail_unlock:
2246 kfree(cn.corename);
2247fail_corename:
2248 coredump_finish(mm);
2249 revert_creds(old_cred);
2250fail_creds:
2251 put_cred(cred);
2252fail:
2253 return;
2254}
2255
2256
2257
2258
2259
2260
2261int dump_write(struct file *file, const void *addr, int nr)
2262{
2263 return access_ok(VERIFY_READ, addr, nr) && file->f_op->write(file, addr, nr, &file->f_pos) == nr;
2264}
2265EXPORT_SYMBOL(dump_write);
2266
2267int dump_seek(struct file *file, loff_t off)
2268{
2269 int ret = 1;
2270
2271 if (file->f_op->llseek && file->f_op->llseek != no_llseek) {
2272 if (file->f_op->llseek(file, off, SEEK_CUR) < 0)
2273 return 0;
2274 } else {
2275 char *buf = (char *)get_zeroed_page(GFP_KERNEL);
2276
2277 if (!buf)
2278 return 0;
2279 while (off > 0) {
2280 unsigned long n = off;
2281
2282 if (n > PAGE_SIZE)
2283 n = PAGE_SIZE;
2284 if (!dump_write(file, buf, n)) {
2285 ret = 0;
2286 break;
2287 }
2288 off -= n;
2289 }
2290 free_page((unsigned long)buf);
2291 }
2292 return ret;
2293}
2294EXPORT_SYMBOL(dump_seek);
2295