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