On 02/13/2018 06:27 PM, Josh Poimboeuf wrote: > --- a/arch/x86/entry/entry_64.S > +++ b/arch/x86/entry/entry_64.S > @@ -1167,10 +1167,10 @@ ENTRY(paranoid_exit) > UNWIND_HINT_REGS > DISABLE_INTERRUPTS(CLBR_ANY) > TRACE_IRQS_OFF_DEBUG > + RESTORE_CR3 scratch_reg=%r15 save_reg=%r14 > testl %ebx, %ebx /* swapgs needed? */ > jnz .Lparanoid_exit_no_swapgs > TRACE_IRQS_IRETQ > - RESTORE_CR3 scratch_reg=%rbx save_reg=%r14 > SWAPGS_UNSAFE_STACK > jmp .Lparanoid_exit_restore > .Lparanoid_exit_no_swapgs:
TRACE_IRQS_* call non-entry functions that are not mapped by the user CR3. How can this possibly work? What am I missing?