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

Commit edf298cf authored by James Morse's avatar James Morse Committed by Catalin Marinas
Browse files

arm64: cpufeature: __this_cpu_has_cap() shouldn't stop early



this_cpu_has_cap() tests caps->desc not caps->matches, so it stops
walking the list when it finds a 'silent' feature, instead of
walking to the end of the list.

Prior to v4.6's 644c2ae1 ("arm64: cpufeature: Test 'matches' pointer
to find the end of the list") we always tested desc to find the end of
a capability list. This was changed for dubious things like PAN_NOT_UAO.
v4.7's e3661b12 ("arm64: Allow a capability to be checked on
single CPU") added this_cpu_has_cap() using the old desc style test.

CC: Suzuki K Poulose <suzuki.poulose@arm.com>
Reviewed-by: default avatarSuzuki K Poulose <suzuki.poulose@arm.com>
Acked-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
Signed-off-by: default avatarJames Morse <james.morse@arm.com>
Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent 0abdeff5
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -1149,9 +1149,8 @@ static bool __this_cpu_has_cap(const struct arm64_cpu_capabilities *cap_array,
	if (WARN_ON(preemptible()))
		return false;

	for (caps = cap_array; caps->desc; caps++)
	for (caps = cap_array; caps->matches; caps++)
		if (caps->capability == cap &&
		    caps->matches &&
		    caps->matches(caps, SCOPE_LOCAL_CPU))
			return true;
	return false;