Commit 23a7052a authored by Mike Rapoport's avatar Mike Rapoport Committed by Linus Torvalds

mm/page_alloc.c: check return value of memblock_alloc_node_nopanic()

There are two early memory allocations that use
memblock_alloc_node_nopanic() and do not check its return value.

While this happens very early during boot and chances that the
allocation will fail are diminishing, it is still worth to have proper
checks for the allocation errors.

Link: http://lkml.kernel.org/r/1547734941-944-1-git-send-email-rppt@linux.ibm.comSigned-off-by: default avatarMike Rapoport <rppt@linux.ibm.com>
Reviewed-by: default avatarWilliam Kucharski <william.kucharski@oracle.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 8ef5cbde
...@@ -6431,10 +6431,14 @@ static void __ref setup_usemap(struct pglist_data *pgdat, ...@@ -6431,10 +6431,14 @@ static void __ref setup_usemap(struct pglist_data *pgdat,
{ {
unsigned long usemapsize = usemap_size(zone_start_pfn, zonesize); unsigned long usemapsize = usemap_size(zone_start_pfn, zonesize);
zone->pageblock_flags = NULL; zone->pageblock_flags = NULL;
if (usemapsize) if (usemapsize) {
zone->pageblock_flags = zone->pageblock_flags =
memblock_alloc_node_nopanic(usemapsize, memblock_alloc_node_nopanic(usemapsize,
pgdat->node_id); pgdat->node_id);
if (!zone->pageblock_flags)
panic("Failed to allocate %ld bytes for zone %s pageblock flags on node %d\n",
usemapsize, zone->name, pgdat->node_id);
}
} }
#else #else
static inline void setup_usemap(struct pglist_data *pgdat, struct zone *zone, static inline void setup_usemap(struct pglist_data *pgdat, struct zone *zone,
...@@ -6664,6 +6668,9 @@ static void __ref alloc_node_mem_map(struct pglist_data *pgdat) ...@@ -6664,6 +6668,9 @@ static void __ref alloc_node_mem_map(struct pglist_data *pgdat)
end = ALIGN(end, MAX_ORDER_NR_PAGES); end = ALIGN(end, MAX_ORDER_NR_PAGES);
size = (end - start) * sizeof(struct page); size = (end - start) * sizeof(struct page);
map = memblock_alloc_node_nopanic(size, pgdat->node_id); map = memblock_alloc_node_nopanic(size, pgdat->node_id);
if (!map)
panic("Failed to allocate %ld bytes for node %d memory map\n",
size, pgdat->node_id);
pgdat->node_mem_map = map + offset; pgdat->node_mem_map = map + offset;
} }
pr_debug("%s: node %d, pgdat %08lx, node_mem_map %08lx\n", pr_debug("%s: node %d, pgdat %08lx, node_mem_map %08lx\n",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment