aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/madvise.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/mm/madvise.c b/mm/madvise.c
index 51bffa414027..6975bc812542 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -343,15 +343,16 @@ static long madvise_remove(struct vm_area_struct *vma,
343 */ 343 */
344static int madvise_hwpoison(int bhv, unsigned long start, unsigned long end) 344static int madvise_hwpoison(int bhv, unsigned long start, unsigned long end)
345{ 345{
346 int ret = 0;
347
348 if (!capable(CAP_SYS_ADMIN)) 346 if (!capable(CAP_SYS_ADMIN))
349 return -EPERM; 347 return -EPERM;
350 for (; start < end; start += PAGE_SIZE) { 348 for (; start < end; start += PAGE_SIZE) {
351 struct page *p; 349 struct page *p;
352 int ret = get_user_pages_fast(start, 1, 0, &p); 350 int ret;
351
352 ret = get_user_pages_fast(start, 1, 0, &p);
353 if (ret != 1) 353 if (ret != 1)
354 return ret; 354 return ret;
355
355 if (PageHWPoison(p)) { 356 if (PageHWPoison(p)) {
356 put_page(p); 357 put_page(p);
357 continue; 358 continue;
@@ -369,7 +370,7 @@ static int madvise_hwpoison(int bhv, unsigned long start, unsigned long end)
369 /* Ignore return value for now */ 370 /* Ignore return value for now */
370 memory_failure(page_to_pfn(p), 0, MF_COUNT_INCREASED); 371 memory_failure(page_to_pfn(p), 0, MF_COUNT_INCREASED);
371 } 372 }
372 return ret; 373 return 0;
373} 374}
374#endif 375#endif
375 376