2005-09-13 12:01:14

by Andi Kleen

[permalink] [raw]
Subject: [PATCH] [for 2.6.13-stable] Fix MPOL_F_VERIFY

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 <[email protected]>

Index: linux-2.6.13-work/mm/mempolicy.c
===================================================================
--- linux-2.6.13-work.orig/mm/mempolicy.c
+++ linux-2.6.13-work/mm/mempolicy.c
@@ -338,8 +338,13 @@ check_range(struct mm_struct *mm, unsign
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;


2005-09-13 16:56:42

by Chris Wright

[permalink] [raw]
Subject: Re: [PATCH] [for 2.6.13-stable] Fix MPOL_F_VERIFY

* Andi Kleen ([email protected]) wrote:
> Fix MPOL_F_VERIFY

Thanks, queued to -stable.
-chris