aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel/process.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-08-03 14:12:09 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-08-03 14:12:09 -0400
commit9250d9047d99e8175cdf9b8e84952d2c69f3ed6d (patch)
tree8ce1ff8f0e2c9b268a3afe1476cfe65962147aa4 /arch/arm/kernel/process.c
parentabe0308070d23d4b68db093683b7dbc1396b1fbd (diff)
parente35ac62d2202e31307c0f9b278a61e484c4727f2 (diff)
Merge branch 'fixes' of git://git.linaro.org/people/rmk/linux-arm
Pull arm fixes fixes from Russell King: "This fixes a couple of problems with commit 48be69a026b2 ("ARM: move signal handlers into a vdso-like page"), one of which was originally discovered via my testing originally, but the fix for it was never actually committed. The other shows up on noMMU builds, and such platforms are extremely rare and as such are not part of my nightly testing" * 'fixes' of git://git.linaro.org/people/rmk/linux-arm: ARM: fix nommu builds with 48be69a02 (ARM: move signal handlers into a vdso-like page) ARM: fix a cockup in 48be69a02 (ARM: move signal handlers into a vdso-like page)
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;