aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel/process.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/kernel/process.c')
-rw-r--r--arch/arm/kernel/process.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
index 16ed3f7c4980..536c85fe72a8 100644
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -474,17 +474,18 @@ const char *arch_vma_name(struct vm_area_struct *vma)
474 "[sigpage]" : NULL; 474 "[sigpage]" : NULL;
475} 475}
476 476
477static struct page *signal_page;
477extern struct page *get_signal_page(void); 478extern struct page *get_signal_page(void);
478 479
479int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) 480int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
480{ 481{
481 struct mm_struct *mm = current->mm; 482 struct mm_struct *mm = current->mm;
482 struct page *page;
483 unsigned long addr; 483 unsigned long addr;
484 int ret; 484 int ret;
485 485
486 page = get_signal_page(); 486 if (!signal_page)
487 if (!page) 487 signal_page = get_signal_page();
488 if (!signal_page)
488 return -ENOMEM; 489 return -ENOMEM;
489 490
490 down_write(&mm->mmap_sem); 491 down_write(&mm->mmap_sem);
@@ -496,7 +497,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
496 497
497 ret = install_special_mapping(mm, addr, PAGE_SIZE, 498 ret = install_special_mapping(mm, addr, PAGE_SIZE,
498 VM_READ | VM_EXEC | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC, 499 VM_READ | VM_EXEC | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC,
499 &page); 500 &signal_page);
500 501
501 if (ret == 0) 502 if (ret == 0)
502 mm->context.sigpage = addr; 503 mm->context.sigpage = addr;