|
@@ -404,9 +404,17 @@ static unsigned long sigpage_addr(const struct mm_struct *mm,
|
|
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 int sigpage_mremap(const struct vm_special_mapping *sm,
|
|
|
|
+ struct vm_area_struct *new_vma)
|
|
|
|
+{
|
|
|
|
+ current->mm->context.sigpage = new_vma->vm_start;
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
static const struct vm_special_mapping sigpage_mapping = {
|
|
static const struct vm_special_mapping sigpage_mapping = {
|
|
.name = "[sigpage]",
|
|
.name = "[sigpage]",
|
|
.pages = &signal_page,
|
|
.pages = &signal_page,
|
|
|
|
+ .mremap = sigpage_mremap,
|
|
};
|
|
};
|
|
|
|
|
|
int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
|
|
int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
|