Skip to content

Commit

Permalink
mm: fix error reporting in move_pages() syscall
Browse files Browse the repository at this point in the history
The vma returned by find_vma does not necessarily include the target
address.  If this happens the code tries to follow a page outside of any
vma and returns ENOENT instead of EFAULT.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
Acked-by: Christoph Lameter <cl@linux-foundation.org>
Cc: Minchan Kim <minchan.kim@gmail.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Mel Gorman <mel@csn.ul.ie>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Gleb Natapov authored and torvalds committed Oct 26, 2010
1 parent 66d7dd5 commit 70384dc
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions mm/migrate.c
Original file line number Diff line number Diff line change
Expand Up @@ -1037,7 +1037,7 @@ static int do_move_page_to_node_array(struct mm_struct *mm,

err = -EFAULT;
vma = find_vma(mm, pp->addr);
if (!vma || !vma_migratable(vma))
if (!vma || pp->addr < vma->vm_start || !vma_migratable(vma))
goto set_status;

page = follow_page(vma, pp->addr, FOLL_GET);
Expand Down Expand Up @@ -1204,7 +1204,7 @@ static void do_pages_stat_array(struct mm_struct *mm, unsigned long nr_pages,
int err = -EFAULT;

vma = find_vma(mm, addr);
if (!vma)
if (!vma || addr < vma->vm_start)
goto set_status;

page = follow_page(vma, addr, 0);
Expand Down

0 comments on commit 70384dc

Please sign in to comment.