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