diff --git a/[refs] b/[refs] index cffd4e4c4138..da4603f2edb6 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4d7670e0f649f9e6e6ea6c8bb9f52441fa00f92b +refs/heads/master: 9a61c349b28ec5aef7e929236571fd770fdef0bb diff --git a/trunk/mm/mremap.c b/trunk/mm/mremap.c index fc45dc9a617b..a32fed454bd7 100644 --- a/trunk/mm/mremap.c +++ b/trunk/mm/mremap.c @@ -141,6 +141,10 @@ move_one_page(struct vm_area_struct *vma, unsigned long old_addr, if (dst) { pte_t pte; pte = ptep_clear_flush(vma, old_addr, src); + /* ZERO_PAGE can be dependant on virtual addr */ + if (pfn_valid(pte_pfn(pte)) && + pte_page(pte) == ZERO_PAGE(old_addr)) + pte = pte_wrprotect(mk_pte(ZERO_PAGE(new_addr), new_vma->vm_page_prot)); set_pte_at(mm, new_addr, dst, pte); } else error = -ENOMEM;