Skip to content

Commit 1a665a7

Browse files
kevin-brodsky-armctmarinas
authored andcommitted
arm64: signal: Remove ISB when resetting POR_EL0
POR_EL0 is set to its most permissive value before setting up the signal frame, to ensure that uaccess succeeds regardless of the signal stack's pkey. We are now tolerant to spurious POE faults. This means that we do not strictly need to issue an ISB after updating POR_EL0, even when followed by uaccess. The question is whether a fault is likely to happen or not if the ISB is omitted; in this case the answer seems to be no. If the regular stack is used, then it should already be accessible. If the alternate signal stack is used, then a special (inaccessible) pkey may be used - the assumption is that this situation is very uncommon. Remove the ISB to speed up the regular path - this should not have any functional impact regardless of the scenario. Signed-off-by: Kevin Brodsky <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Catalin Marinas <[email protected]>
1 parent aa46e18 commit 1a665a7

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

arch/arm64/kernel/signal.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,11 @@ static void save_reset_user_access_state(struct user_access_state *ua_state)
9595

9696
ua_state->por_el0 = read_sysreg_s(SYS_POR_EL0);
9797
write_sysreg_s(por_enable_all, SYS_POR_EL0);
98-
/* Ensure that any subsequent uaccess observes the updated value */
99-
isb();
98+
/*
99+
* No ISB required as we can tolerate spurious Overlay faults -
100+
* the fault handler will check again based on the new value
101+
* of POR_EL0.
102+
*/
100103
}
101104
}
102105

0 commit comments

Comments
 (0)