Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ce7b1756 authored by Lorenzo Pieralisi's avatar Lorenzo Pieralisi Committed by Russell King
Browse files

ARM: 7585/1: kernel: fix nr_cpu_ids check in DT logical map init



If a kernel is configured with a DT containing more /cpu nodes than
nr_cpu_ids, the number of cpus must be capped in the DT parsing
code. Current code carries out the check, but fails to cap the
value and the check is executed after the cpu logical index is used,
which can lead to memory corruption due to index overflow.

This patch refactors the check against nr_cpu_ids and move it before
any computed index is used in the parsing code.

Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: default avatarGrant Likely <grant.likely@secretlab.ca>
Reported-by: default avatarMark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent c7cc504b
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -139,12 +139,16 @@ void __init arm_dt_init_cpu_maps(void)
			i = cpuidx++;
		}

		tmp_map[i] = hwid;

		if (cpuidx > nr_cpu_ids)
		if (WARN(cpuidx > nr_cpu_ids, "DT /cpu %u nodes greater than "
					       "max cores %u, capping them\n",
					       cpuidx, nr_cpu_ids)) {
			cpuidx = nr_cpu_ids;
			break;
		}

		tmp_map[i] = hwid;
	}

	if (WARN(!bootcpu_valid, "DT missing boot CPU MPIDR[23:0], "
				 "fall back to default cpu_logical_map\n"))
		return;