diff options
Diffstat (limited to 'mm/process_vm_access.c')
-rw-r--r-- | mm/process_vm_access.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/mm/process_vm_access.c b/mm/process_vm_access.c index 5d453e58ddbf..07514d41ebcc 100644 --- a/mm/process_vm_access.c +++ b/mm/process_vm_access.c | |||
@@ -98,9 +98,14 @@ static int process_vm_rw_single_vec(unsigned long addr, | |||
98 | int pages = min(nr_pages, max_pages_per_loop); | 98 | int pages = min(nr_pages, max_pages_per_loop); |
99 | size_t bytes; | 99 | size_t bytes; |
100 | 100 | ||
101 | /* Get the pages we're interested in */ | 101 | /* |
102 | pages = get_user_pages_unlocked(task, mm, pa, pages, | 102 | * Get the pages we're interested in. We must |
103 | vm_write, 0, process_pages); | 103 | * add FOLL_REMOTE because task/mm might not |
104 | * current/current->mm | ||
105 | */ | ||
106 | pages = __get_user_pages_unlocked(task, mm, pa, pages, | ||
107 | vm_write, 0, process_pages, | ||
108 | FOLL_REMOTE); | ||
104 | if (pages <= 0) | 109 | if (pages <= 0) |
105 | return -EFAULT; | 110 | return -EFAULT; |
106 | 111 | ||