Skip to content

Commit f0c7183

Browse files
bgaffrafaeljw
authored andcommitted
PM: hibernate: Use __get_safe_page() rather than touching the list
We found at least one situation where the safe pages list was empty and get_buffer() would gladly try to use a NULL pointer. Signed-off-by: Brian Geffon <[email protected]> Fixes: 8357376 ("[PATCH] swsusp: Improve handling of highmem") Cc: All applicable <[email protected]> Signed-off-by: Rafael J. Wysocki <[email protected]>
1 parent ce9ecca commit f0c7183

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

kernel/power/snapshot.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2545,8 +2545,9 @@ static void *get_highmem_page_buffer(struct page *page,
25452545
pbe->copy_page = tmp;
25462546
} else {
25472547
/* Copy of the page will be stored in normal memory */
2548-
kaddr = safe_pages_list;
2549-
safe_pages_list = safe_pages_list->next;
2548+
kaddr = __get_safe_page(ca->gfp_mask);
2549+
if (!kaddr)
2550+
return ERR_PTR(-ENOMEM);
25502551
pbe->copy_page = virt_to_page(kaddr);
25512552
}
25522553
pbe->next = highmem_pblist;
@@ -2750,8 +2751,9 @@ static void *get_buffer(struct memory_bitmap *bm, struct chain_allocator *ca)
27502751
return ERR_PTR(-ENOMEM);
27512752
}
27522753
pbe->orig_address = page_address(page);
2753-
pbe->address = safe_pages_list;
2754-
safe_pages_list = safe_pages_list->next;
2754+
pbe->address = __get_safe_page(ca->gfp_mask);
2755+
if (!pbe->address)
2756+
return ERR_PTR(-ENOMEM);
27552757
pbe->next = restore_pblist;
27562758
restore_pblist = pbe;
27572759
return pbe->address;

0 commit comments

Comments
 (0)