Re: [patch V6 15/31] rseq: Record interrupt from user space
From: Mathieu Desnoyers
Date: Tue Oct 28 2025 - 13:54:04 EST
On 2025-10-28 13:02, Thomas Gleixner wrote:
On Tue, Oct 28 2025 at 11:26, Mathieu Desnoyers wrote:
On 2025-10-27 04:44, Thomas Gleixner wrote:
[...]
@@ -281,6 +281,7 @@ static __always_inline void exit_to_userLooking at x86, both exc_debug_user() and exc_int3() invoke
static __always_inline void irqentry_enter_from_user_mode(struct pt_regs *regs)
{
enter_from_user_mode(regs);
+ rseq_note_user_irq_entry();
}
irqentry_enter_from_user_mode(), but there are various
other traps that can come from userspace (e.g. math_error,
exc_general_protection, ...). Some of those traps don't
necessarily end with a signal delivery to the offending
process. And some of those traps enable interrupts.
They all go through irqentry_enter_from_user_mode(). See
DEFINE_IDTENTRY*() macros. They invoke:
irqentry_enter()
if (user_mode())
irqentry_enter_from_user_mode();
If that wouldn't be the case then all the RCU/NOHZ magic would not work
either. So any exception, trap, interrupt must go through this to
establish state correctly. Whether that's explicit as it's required for
int3 and debug_user or implicit through the IDTENTRY magic.
That's what I missed, thanks for the explanation.
Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx>
--
Mathieu Desnoyers
EfficiOS Inc.
https://www.efficios.com