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 43cbf30669e..7b8f2a78be3 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -400,6 +400,18 @@ __cacheline_aligned_in_smp DEFINE_SPINLOCK(mmlist_lock);  #define allocate_mm()	(kmem_cache_alloc(mm_cachep, GFP_KERNEL))  #define free_mm(mm)	(kmem_cache_free(mm_cachep, (mm))) +static unsigned long default_dump_filter = MMF_DUMP_FILTER_DEFAULT; + +static int __init coredump_filter_setup(char *s) +{ +	default_dump_filter = +		(simple_strtoul(s, NULL, 0) << MMF_DUMP_FILTER_SHIFT) & +		MMF_DUMP_FILTER_MASK; +	return 1; +} + +__setup("coredump_filter=", coredump_filter_setup); +  #include <linux/init_task.h>  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)  	atomic_set(&mm->mm_count, 1);  	init_rwsem(&mm->mmap_sem);  	INIT_LIST_HEAD(&mm->mmlist); -	mm->flags = (current->mm) ? current->mm->flags -				  : MMF_DUMP_FILTER_DEFAULT; +	mm->flags = (current->mm) ? current->mm->flags : default_dump_filter;  	mm->core_state = NULL;  	mm->nr_ptes = 0;  	set_mm_counter(mm, file_rss, 0); @@ -758,7 +769,7 @@ static int copy_sighand(unsigned long clone_flags, struct task_struct *tsk)  {  	struct sighand_struct *sig; -	if (clone_flags & (CLONE_SIGHAND | CLONE_THREAD)) { +	if (clone_flags & CLONE_SIGHAND) {  		atomic_inc(¤t->sighand->count);  		return 0;  	} | 
