Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cc7786d3 authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Benjamin Herrenschmidt
Browse files

powerpc/tm: do not use r13 for tabort_syscall



tabort_syscall runs with RI=1, so a nested recoverable machine
check will load the paca into r13 and overwrite what we loaded
it with, because exceptions returning to privileged mode do not
restore r13.

Fixes: b4b56f9e (powerpc/tm: Abort syscalls in active transactions)
Cc: stable@vger.kernel.org
Signed-off-by: default avatarNick Piggin <npiggin@gmail.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 7c379526
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -368,13 +368,13 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
tabort_syscall:
	/* Firstly we need to enable TM in the kernel */
	mfmsr	r10
	li	r13, 1
	rldimi	r10, r13, MSR_TM_LG, 63-MSR_TM_LG
	li	r9, 1
	rldimi	r10, r9, MSR_TM_LG, 63-MSR_TM_LG
	mtmsrd	r10, 0

	/* tabort, this dooms the transaction, nothing else */
	li	r13, (TM_CAUSE_SYSCALL|TM_CAUSE_PERSISTENT)
	TABORT(R13)
	li	r9, (TM_CAUSE_SYSCALL|TM_CAUSE_PERSISTENT)
	TABORT(R9)

	/*
	 * Return directly to userspace. We have corrupted user register state,
@@ -382,8 +382,8 @@ tabort_syscall:
	 * resume after the tbegin of the aborted transaction with the
	 * checkpointed register state.
	 */
	li	r13, MSR_RI
	andc	r10, r10, r13
	li	r9, MSR_RI
	andc	r10, r10, r9
	mtmsrd	r10, 1
	mtspr	SPRN_SRR0, r11
	mtspr	SPRN_SRR1, r12