Patch "mm: avoid setting up anonymous pages into file mapping" has been added to the 3.14-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
mm: avoid setting up anonymous pages into file mapping
to the 3.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
mm-avoid-setting-up-anonymous-pages-into-file-mapping.patch
and it can be found in the queue-3.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
6b7339f4c31ad69c8e9c0b2859276e22cf72176dMon Sep 17 00:00:00 2001
From: "Kirill A. Shutemov" <[email protected]>
Date: Mon, 6 Jul 2015 23:18:37 +0300
Subject: mm: avoid setting up anonymous pages into file mapping
From: "Kirill A. Shutemov" <[email protected]>
commit 6b7339f4c31ad69c8e9c0b2859276e22cf72176d upstream.
Reading page fault handler code I've noticed that under right circumstances kernel would map anonymous pages into file mappings: if the VMA doesn't have vm_ops->fault() and the VMA wasn't fully populated on ->mmap(), kernel would handle page fault to not populated pte with do_anonymous_page().
Let's change page fault handler to use do_anonymous_page() only on anonymous VMA (->vm_ops == NULL) and make sure that the VMA is not shared.
For file mappings without vm_ops->fault() or shred VMA without vm_ops, page fault on pte_none() entry would lead to SIGBUS.
--- mm/memory.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)
mm/memory.c +9 -4
@@ -3234,6 +3234,10 @@ static int do_anonymous_page(struct mm_spte_unmap (page_table); +/* File mapping without ->vm_ops ? */ +if (vma->vm_flags &VM_SHARED ) +return VM_FAULT_SIGBUS ; +/* Check if we need to add a guard page to the stack */ if (check_stack_guard_page (vma, address) <0 )return VM_FAULT_SIGSEGV ;
@@ -3502,6 +3506,9 @@ static int do_linear_fault(struct mm_str - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;pte_unmap (page_table); +/* The VMA was not fully populated on mmap() or missing VM_DONTEXPAND */ +if (!vma->vm_ops->fault) +return VM_FAULT_SIGBUS ;return __do_fault (mm, vma, address, pmd, pgoff, flags, orig_pte); }
@@ -3650,11 +3657,9 @@ static int handle_pte_fault(struct mm_st entry =ACCESS_ONCE (*pte);if (!pte_present (entry)) {if (pte_none (entry)) { -if (vma->vm_ops) { -if (likely (vma->vm_ops->fault)) -return do_linear_fault (mm, vma, address, +if (vma->vm_ops) +return do_linear_fault (mm, vma, address, pte, pmd, flags, entry); - }return do_anonymous_page (mm, vma, address, pte, pmd, flags); }
Patches currently in stable-queue which might be from [email protected] are
queue-3.14/mm-avoid-setting-up-anonymous-pages-into-file-mapping.patch