diff options
Diffstat (limited to 'kernel/fork.c')
| -rw-r--r-- | kernel/fork.c | 17 | 
1 files changed, 14 insertions, 3 deletions
| diff --git a/kernel/fork.c b/kernel/fork.c index 43cbf30669e6..7b8f2a78be3d 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
| @@ -400,6 +400,18 @@ __cacheline_aligned_in_smp DEFINE_SPINLOCK(mmlist_lock); | |||
| 400 | #define allocate_mm() (kmem_cache_alloc(mm_cachep, GFP_KERNEL)) | 400 | #define allocate_mm() (kmem_cache_alloc(mm_cachep, GFP_KERNEL)) | 
| 401 | #define free_mm(mm) (kmem_cache_free(mm_cachep, (mm))) | 401 | #define free_mm(mm) (kmem_cache_free(mm_cachep, (mm))) | 
| 402 | 402 | ||
| 403 | static unsigned long default_dump_filter = MMF_DUMP_FILTER_DEFAULT; | ||
| 404 | |||
| 405 | static int __init coredump_filter_setup(char *s) | ||
| 406 | { | ||
| 407 | default_dump_filter = | ||
| 408 | (simple_strtoul(s, NULL, 0) << MMF_DUMP_FILTER_SHIFT) & | ||
| 409 | MMF_DUMP_FILTER_MASK; | ||
| 410 | return 1; | ||
| 411 | } | ||
| 412 | |||
| 413 | __setup("coredump_filter=", coredump_filter_setup); | ||
| 414 | |||
| 403 | #include <linux/init_task.h> | 415 | #include <linux/init_task.h> | 
| 404 | 416 | ||
| 405 | static struct mm_struct * mm_init(struct mm_struct * mm, struct task_struct *p) | 417 | static struct mm_struct * mm_init(struct mm_struct * mm, struct task_struct *p) | 
| @@ -408,8 +420,7 @@ static struct mm_struct * mm_init(struct mm_struct * mm, struct task_struct *p) | |||
| 408 | atomic_set(&mm->mm_count, 1); | 420 | atomic_set(&mm->mm_count, 1); | 
| 409 | init_rwsem(&mm->mmap_sem); | 421 | init_rwsem(&mm->mmap_sem); | 
| 410 | INIT_LIST_HEAD(&mm->mmlist); | 422 | INIT_LIST_HEAD(&mm->mmlist); | 
| 411 | mm->flags = (current->mm) ? current->mm->flags | 423 | mm->flags = (current->mm) ? current->mm->flags : default_dump_filter; | 
| 412 | : MMF_DUMP_FILTER_DEFAULT; | ||
| 413 | mm->core_state = NULL; | 424 | mm->core_state = NULL; | 
| 414 | mm->nr_ptes = 0; | 425 | mm->nr_ptes = 0; | 
| 415 | set_mm_counter(mm, file_rss, 0); | 426 | set_mm_counter(mm, file_rss, 0); | 
| @@ -758,7 +769,7 @@ static int copy_sighand(unsigned long clone_flags, struct task_struct *tsk) | |||
| 758 | { | 769 | { | 
| 759 | struct sighand_struct *sig; | 770 | struct sighand_struct *sig; | 
| 760 | 771 | ||
| 761 | if (clone_flags & (CLONE_SIGHAND | CLONE_THREAD)) { | 772 | if (clone_flags & CLONE_SIGHAND) { | 
| 762 | atomic_inc(¤t->sighand->count); | 773 | atomic_inc(¤t->sighand->count); | 
| 763 | return 0; | 774 | return 0; | 
| 764 | } | 775 | } | 
