Commit c0c4a1e4 authored by Anastasia Belova's avatar Anastasia Belova Committed by Wupeng Ma
Browse files

mm/memory_hotplug: prevent accessing by index=-1

mainline inclusion
from mainline-v6.11-rc1
commit 5958d35917e1296f46dfc8b8c959732efd6d8d5d
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IAQT9Q

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5958d35917e1296f46dfc8b8c959732efd6d8d5d

--------------------------------

nid may be equal to NUMA_NO_NODE=-1.  Prevent accessing node_data array by
invalid index with check for nid.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Link: https://lkml.kernel.org/r/20240606080659.18525-1-abelova@astralinux.ru


Fixes: e83a437f ("mm/memory_hotplug: introduce "auto-movable" online policy")
Signed-off-by: default avatarAnastasia Belova <abelova@astralinux.ru>
Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
Acked-by: default avatarOscar Salvador <osalvador@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarMa Wupeng <mawupeng1@huawei.com>
parent 292de975
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -845,7 +845,6 @@ static bool auto_movable_can_online_movable(int nid, struct memory_group *group,
	unsigned long kernel_early_pages, movable_pages;
	struct auto_movable_group_stats group_stats = {};
	struct auto_movable_stats stats = {};
	pg_data_t *pgdat = NODE_DATA(nid);
	struct zone *zone;
	int i;

@@ -856,6 +855,8 @@ static bool auto_movable_can_online_movable(int nid, struct memory_group *group,
			auto_movable_stats_account_zone(&stats, zone);
	} else {
		for (i = 0; i < MAX_NR_ZONES; i++) {
			pg_data_t *pgdat = NODE_DATA(nid);

			zone = pgdat->node_zones + i;
			if (populated_zone(zone))
				auto_movable_stats_account_zone(&stats, zone);