Commit 02e0409a authored by Nathan Lynch's avatar Nathan Lynch Committed by Russell King

ARM: 8154/1: use _install_special_mapping for sigpage

_install_special_mapping allows the VMA to be identifed in
/proc/pid/maps without the use of arch_vma_name, providing a
slight net reduction in object size:

  text    data     bss     dec     hex filename
  2996      96     144    3236     ca4 arch/arm/kernel/process.o (before)
  2956     104     144    3204     c84 arch/arm/kernel/process.o (after)
Signed-off-by: default avatarNathan Lynch <nathan_lynch@mentor.com>
Reviewed-by: default avatarKees Cook <keescook@chromium.org>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 75c34906
...@@ -472,19 +472,23 @@ int in_gate_area_no_mm(unsigned long addr) ...@@ -472,19 +472,23 @@ int in_gate_area_no_mm(unsigned long addr)
const char *arch_vma_name(struct vm_area_struct *vma) const char *arch_vma_name(struct vm_area_struct *vma)
{ {
return is_gate_vma(vma) ? "[vectors]" : return is_gate_vma(vma) ? "[vectors]" : NULL;
(vma->vm_mm && vma->vm_start == vma->vm_mm->context.sigpage) ?
"[sigpage]" : NULL;
} }
static struct page *signal_page; static struct page *signal_page;
extern struct page *get_signal_page(void); extern struct page *get_signal_page(void);
static const struct vm_special_mapping sigpage_mapping = {
.name = "[sigpage]",
.pages = &signal_page,
};
int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
{ {
struct mm_struct *mm = current->mm; struct mm_struct *mm = current->mm;
struct vm_area_struct *vma;
unsigned long addr; unsigned long addr;
int ret; int ret = 0;
if (!signal_page) if (!signal_page)
signal_page = get_signal_page(); signal_page = get_signal_page();
...@@ -498,11 +502,15 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) ...@@ -498,11 +502,15 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
goto up_fail; goto up_fail;
} }
ret = install_special_mapping(mm, addr, PAGE_SIZE, vma = _install_special_mapping(mm, addr, PAGE_SIZE,
VM_READ | VM_EXEC | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC, VM_READ | VM_EXEC | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC,
&signal_page); &sigpage_mapping);
if (IS_ERR(vma)) {
ret = PTR_ERR(vma);
goto up_fail;
}
if (ret == 0)
mm->context.sigpage = addr; mm->context.sigpage = addr;
up_fail: up_fail:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment