hugetlb: handle write-protection faults in follow_hugetlb_page
Subsystems (2)
PATCH 1/1 hugetlb: handle write-protection faults in follow_hugetlb_page
The follow_hugetlb_page() fix I posted (merged as git commit 5b23dbe8173c212d6a326e35347b038705603d39) missed one case. If the pte is present, but not writable and write access is requested by the caller to get_user_pages(), the code will do the wrong thing. Rather than calling hugetlb_fault to make the pte writable, it notes the presence of the pte and continues.
This simple one-liner makes sure we also fault on the pte for this case. Please apply.
Signed-off-by Adam Litke <[email protected]>
Acked-by Dave Kleikamp <[email protected]>
---
mm/hugetlb.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
mm/hugetlb.c +1 -1
@@ -907,7 +907,7 @@ int follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,*/ pte =huge_pte_offset (mm, vaddr &HPAGE_MASK ); -if (!pte ||pte_none (*pte)) { +if (!pte ||pte_none (*pte) || (write && !pte_write (*pte))) {int ret;spin_unlock (&mm->page_table_lock);