aboutsummaryrefslogtreecommitdiffstats
path: root/mm/mincore.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/mincore.c')
-rw-r--r--mm/mincore.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/mm/mincore.c b/mm/mincore.c
index 9c1d0a426e95..5efe0ded69b1 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
77 * PTE array for our address. 77 * PTE array for our address.
78 */ 78 */
79 nr = PTRS_PER_PTE - ((addr >> PAGE_SHIFT) & (PTRS_PER_PTE-1)); 79 nr = PTRS_PER_PTE - ((addr >> PAGE_SHIFT) & (PTRS_PER_PTE-1));
80 if (nr > pages) 80
81 nr = pages; 81 /*
82 * Don't overrun this vma
83 */
84 nr = min(nr, (vma->vm_end - addr) >> PAGE_SHIFT);
85
86 /*
87 * Don't return more than the caller asked for
88 */
89 nr = min(nr, pages);
82 90
83 pgd = pgd_offset(vma->vm_mm, addr); 91 pgd = pgd_offset(vma->vm_mm, addr);
84 if (pgd_none_or_clear_bad(pgd)) 92 if (pgd_none_or_clear_bad(pgd))