projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
66d7dd5
)
mm: fix error reporting in move_pages() syscall
author
Gleb Natapov
<
[email protected]
>
Tue, 26 Oct 2010 21:22:07 +0000
(14:22 -0700)
committer
Linus Torvalds
<
[email protected]
>
Tue, 26 Oct 2010 23:52:11 +0000
(16:52 -0700)
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 <
[email protected]
>
Acked-by: Christoph Lameter <
[email protected]
>
Cc: Minchan Kim <
[email protected]
>
Cc: KAMEZAWA Hiroyuki <
[email protected]
>
Cc: Mel Gorman <
[email protected]
>
Signed-off-by: Andrew Morton <
[email protected]
>
Signed-off-by: Linus Torvalds <
[email protected]
>
mm/migrate.c
patch
|
blob
|
history
diff --git
a/mm/migrate.c
b/mm/migrate.c
index 35e454189966cbe42eab5e2172c7d64746d864c8..fe5a3c6a54260f2ae9999fbaabe03082a818982f 100644
(file)
--- a/
mm/migrate.c
+++ b/
mm/migrate.c
@@
-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);
@@
-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);