From: Andi Kleen Date: Tue, 13 Sep 2005 12:01:08 +0000 (+0200) Subject: [PATCH] Fix MPOL_F_VERIFY X-Git-Tag: v2.6.13.2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9c053068c7b8158850d680d8c96f3f11f5804367;p=thirdparty%2Fkernel%2Fstable.git [PATCH] Fix MPOL_F_VERIFY There was a pretty bad bug in there that the code would always check the full VMA, not the range the user requested. When the VMA to be checked was merged with the previous VMA this could lead to spurious failures. Signed-off-by: Andi Kleen Signed-off-by: Chris Wright --- diff --git a/mm/mempolicy.c b/mm/mempolicy.c index b4eababc81987..54b522c7b0156 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -333,8 +333,13 @@ check_range(struct mm_struct *mm, unsigned long start, unsigned long end, if (prev && prev->vm_end < vma->vm_start) return ERR_PTR(-EFAULT); if ((flags & MPOL_MF_STRICT) && !is_vm_hugetlb_page(vma)) { + unsigned long endvma = vma->vm_end; + if (endvma > end) + endvma = end; + if (vma->vm_start > start) + start = vma->vm_start; err = check_pgd_range(vma->vm_mm, - vma->vm_start, vma->vm_end, nodes); + start, endvma, nodes); if (err) { first = ERR_PTR(err); break;