Thread (59 messages) 59 messages, 8 authors, 2018-10-03

[PATCH v5 05/27] arm64: Use daifflag_restore after bp_hardening

From: Julien Thierry <hidden>
Date: 2018-09-12 11:11:21
Also in: lkml

Hi James,

On 12/09/18 11:32, James Morse wrote:
Hi Julien,

On 28/08/18 16:51, Julien Thierry wrote:
quoted
For EL0 entries requiring bp_hardening, daif status is kept at
DAIF_PROCCTX_NOIRQ until after hardening has been done. Then interrupts
are enabled through local_irq_enable().

Before using local_irq_* functions, daifflags should be properly restored
to a state where IRQs are enabled.
quoted
Enable IRQs by restoring DAIF_PROCCTX state after bp hardening.
Is this just for symmetry, or are you going on to add something to the daifflags
state that local_irq_* functions won't change? (if so, could you allude to that
in the commit message)
What happens is that once we use ICC_PMR_EL1, local_irq_enable will not 
touch PSR.I. And we are coming back from an entry where PSR.I was kept 
to 1 so local_irq_enable was not actually enabling the interrupts. On 
the otherhand, restore will affect both.

Another option is to have the asm macro "enable_da_f" also switch to PMR 
usage (i.e. "just keep normal interrupts disabled"). Overall it would 
probably be easier to reason with, but I'm just unsure whether it is 
acceptable to receive a Pseudo NMI before having applied the bp_hardening.

If it is possible, I'm happy to solve this with enable_da_f.

Thanks,
Either way,

Acked-by: James Morse <james.morse@arm.com>
-- 
Julien Thierry
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help