summaryrefslogtreecommitdiffstats
path: root/mm/mempolicy.c
diff options
context:
space:
mode:
authorAndi Kleen <ak@suse.de>2005-09-13 01:25:08 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2005-09-13 08:22:28 -0700
commit5b952b3c143660b6436fcb299b249cefde61c18d (patch)
tree8b0abd6eba79f4fa0f4144ca94d272a0ef826266 /mm/mempolicy.c
parent8d0986e289a4b018fec87fcc49538945fb401f37 (diff)
downloadlinux-5b952b3c143660b6436fcb299b249cefde61c18d.tar.gz
linux-5b952b3c143660b6436fcb299b249cefde61c18d.tar.bz2
linux-5b952b3c143660b6436fcb299b249cefde61c18d.zip
[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" <ak@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'mm/mempolicy.c')
-rw-r--r--mm/mempolicy.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index afa06e184d88..9033f0859aa8 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;