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