Commit e9766e6f authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Peter Zijlstra
Browse files

rseq: Protect rseq_reset() against interrupts



rseq_reset() uses memset() to clear the tasks rseq data. That's racy
against membarrier() and preemption.

Guard it with irqsave to cure this.

Fixes: faba9d25 ("rseq: Introduce struct rseq_data")
Reported-by: default avatarDmitry Vyukov <dvyukov@google.com>
Signed-off-by: default avatarThomas Gleixner <tglx@kernel.org>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: default avatarDmitry Vyukov <dvyukov@google.com>
Tested-by: default avatarDmitry Vyukov <dvyukov@google.com>
Link: https://patch.msgid.link/20260428224427.353887714%40kernel.org
Cc: stable@vger.kernel.org
parent 2cb68e45
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -119,6 +119,8 @@ static inline void rseq_virt_userspace_exit(void)

static inline void rseq_reset(struct task_struct *t)
{
	/* Protect against preemption and membarrier IPI */
	guard(irqsave)();
	memset(&t->rseq, 0, sizeof(t->rseq));
	t->rseq.ids.cpu_id = RSEQ_CPU_ID_UNINITIALIZED;
}