Commit 5f871994 authored by Juergen Gross's avatar Juergen Gross Committed by Ingo Molnar
Browse files

x86/xen: Fix a potential problem in xen_e820_resolve_conflicts()



When fixing a conflict in xen_e820_resolve_conflicts(), the loop over
the E820 map entries needs to be restarted, as the E820 map will have
been modified by the fix. Otherwise entries might be skipped by
accident.

Fixes: be35d91c ("xen: tolerate ACPI NVS memory overlapping with Xen allocated memory")
Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
Cc: xen-devel@lists.xenproject.org
Link: https://patch.msgid.link/20260505080653.197775-1-jgross@suse.com
parent 7fd2df20
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -695,17 +695,22 @@ static void __init xen_e820_resolve_conflicts(phys_addr_t start,
		return;

	end = start + size;
	entry = xen_e820_table.entries;
	mapcnt = 0;

	for (mapcnt = 0; mapcnt < xen_e820_table.nr_entries; mapcnt++) {
	while (mapcnt < xen_e820_table.nr_entries) {
		entry = xen_e820_table.entries + mapcnt;
		if (entry->addr >= end)
			return;

		if (entry->addr + entry->size > start &&
		    entry->type == E820_TYPE_NVS)
		    entry->type == E820_TYPE_NVS) {
			xen_e820_swap_entry_with_ram(entry);
			/* E820 map has been changed, restart loop! */
			mapcnt = 0;
			continue;
		}

		entry++;
		mapcnt++;
	}
}