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