PM: hibernate: use __get_safe_page() rather than touching the list.
Subsystems (3)
PATCH 1/1 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.
Change-Id: Ibb43a9b4ac5ff2d7e3021fdacc08e116650231e9
--- kernel/power/snapshot.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
kernel/power/snapshot.c +6 -4
@@ -2544,8 +2544,9 @@ static void *get_highmem_page_buffer(struct page *page, pbe->copy_page =pfn_to_page (pfn); }else {/* Copy of the page will be stored in normal memory */ - kaddr = safe_pages_list; - safe_pages_list = safe_pages_list->next; + kaddr =__get_safe_page (ca->gfp_mask); +if (!kaddr) +return ERR_PTR (-ENOMEM ); pbe->copy_page =virt_to_page (kaddr); } pbe->next = highmem_pblist;
@@ -2747,8 +2748,9 @@ static void *get_buffer(struct memory_bitmap *bm, struct chain_allocator *ca)return ERR_PTR (-ENOMEM ); } pbe->orig_address =page_address (page); - pbe->address = safe_pages_list; - safe_pages_list = safe_pages_list->next; + pbe->address =__get_safe_page (ca->gfp_mask); +if (!pbe->address) +return ERR_PTR (-ENOMEM ); pbe->next = restore_pblist; restore_pblist = pbe;return pbe->address;
Signature · 1 line
2.42.0.459.ge4e396fd5e-goog
Quoted 32 lines · Brian Geffon
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 ("swsusp: Improve handling of highmem")Change-Id: Ibb43a9b4ac5ff2d7e3021fdacc08e116650231e9
--- kernel/power/snapshot.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)kernel/power/snapshot.c +3
-2@@ -2544,8 +2544,9 @@ static void *get_highmem_page_buffer(struct page *page, pbe->copy_page =pfn_to_page (pfn); }else {/* Copy of the page will be stored in normal memory */ - kaddr = safe_pages_list; - safe_pages_list = safe_pages_list->next; + kaddr =__get_safe_page (ca->gfp_mask); +if (!kaddr) +return ERR_PTR (-ENOMEM ); pbe->copy_page =virt_to_page (kaddr); } pbe->next = highmem_pblist;@@ -2747,8 +2748,9 @@ static void *get_buffer(struct memory_bitmap *bm, struct chain_allocator *ca)return ERR_PTR (-ENOMEM ); }
kernel/power/snapshot.c static void *get_buffer(struct memory_bitmap *bm, struct chain_allocator *ca)
Quoted 10 lines
kernel/power/snapshot.c +3
-3pbe->orig_address =page_address (page); - pbe->address = safe_pages_list; - safe_pages_list = safe_pages_list->next; + pbe->address =__get_safe_page (ca->gfp_mask); +if (!pbe->address) +return ERR_PTR (-ENOMEM ); pbe->next = restore_pblist; restore_pblist = pbe;return pbe->address; --
Applied as 6.7 material, thanks!
Greg KH
maintainerQuoted 8 lines · Brian Geffon
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 ("swsusp: Improve handling of highmem")Change-Id: Ibb43a9b4ac5ff2d7e3021fdacc08e116650231e9
Please always use checkpatch.pl so that maintainers don't have to ask you to use checkpatch.pl :(