diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/migrate.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/mm/migrate.c b/mm/migrate.c index 1a4bf4813780..5b9ebc5f4ef6 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -1044,11 +1044,15 @@ static int do_pages_stat(struct mm_struct *mm, unsigned long nr_pages, int err; for (i = 0; i < nr_pages; i += chunk_nr) { + unsigned int copy; if (chunk_nr + i > nr_pages) chunk_nr = nr_pages - i; - err = copy_from_user(chunk_pages, &pages[i], - chunk_nr * sizeof(*chunk_pages)); + copy = chunk_nr * sizeof(*chunk_pages); + if (copy > DO_PAGES_STAT_CHUNK_NR) + return -EFAULT; + + err = copy_from_user(chunk_pages, &pages[i], copy); if (err) { err = -EFAULT; goto out; |