X-Git-Url: http://pilppa.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=mm%2Fmincore.c;h=5efe0ded69b1857935d0295e9999210e4999a516;hb=d79a5f80dc1153d3f637dfcf3808066414fbb51a;hp=9c1d0a426e95f7b10cd14ee986d9cbe69fcc37f9;hpb=4a76ef036ac415c28d1adbaf2b7a74040b84d4c2;p=linux-2.6-omap-h63xx.git diff --git a/mm/mincore.c b/mm/mincore.c index 9c1d0a426e9..5efe0ded69b 100644 --- a/mm/mincore.c +++ b/mm/mincore.c @@ -77,8 +77,16 @@ static long do_mincore(unsigned long addr, unsigned char *vec, unsigned long pag * PTE array for our address. */ nr = PTRS_PER_PTE - ((addr >> PAGE_SHIFT) & (PTRS_PER_PTE-1)); - if (nr > pages) - nr = pages; + + /* + * Don't overrun this vma + */ + nr = min(nr, (vma->vm_end - addr) >> PAGE_SHIFT); + + /* + * Don't return more than the caller asked for + */ + nr = min(nr, pages); pgd = pgd_offset(vma->vm_mm, addr); if (pgd_none_or_clear_bad(pgd))