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

Commit cf7d6fb0 authored by Naveen N. Rao's avatar Naveen N. Rao Committed by Michael Ellerman
Browse files

powerpc/64s: Blacklist system_call() and system_call_common() from kprobes



Convert some of the symbols into private symbols and blacklist
system_call_common() and system_call() from kprobes. We can't take a
trap at parts of these functions as either MSR_RI is unset or the
kernel stack pointer is not yet setup.

Reviewed-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
Reviewed-by: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
[mpe: Don't convert system_call_common to _GLOBAL()]
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 9d6c4523
Loading
Loading
Loading
Loading
+14 −12
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@ system_call_common:
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
BEGIN_FTR_SECTION
	extrdi.	r10, r12, 1, (63-MSR_TS_T_LG) /* transaction active? */
	bne	tabort_syscall
	bne	.Ltabort_syscall
END_FTR_SECTION_IFSET(CPU_FTR_TM)
#endif
	andi.	r10,r12,MSR_PR
@@ -152,9 +152,9 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_SPLPAR)
	CURRENT_THREAD_INFO(r11, r1)
	ld	r10,TI_FLAGS(r11)
	andi.	r11,r10,_TIF_SYSCALL_DOTRACE
	bne	syscall_dotrace		/* does not return */
	bne	.Lsyscall_dotrace		/* does not return */
	cmpldi	0,r0,NR_syscalls
	bge-	syscall_enosys
	bge-	.Lsyscall_enosys

system_call:			/* label this so stack traces look sane */
/*
@@ -208,7 +208,7 @@ system_call: /* label this so stack traces look sane */
	ld	r9,TI_FLAGS(r12)
	li	r11,-MAX_ERRNO
	andi.	r0,r9,(_TIF_SYSCALL_DOTRACE|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)
	bne-	syscall_exit_work
	bne-	.Lsyscall_exit_work

	/* If MSR_FP and MSR_VEC are set in user msr, then no need to restore */
	li	r7,MSR_FP
@@ -217,12 +217,12 @@ system_call: /* label this so stack traces look sane */
#endif
	and	r0,r8,r7
	cmpd	r0,r7
	bne	syscall_restore_math
	bne	.Lsyscall_restore_math
.Lsyscall_restore_math_cont:

	cmpld	r3,r11
	ld	r5,_CCR(r1)
	bge-	syscall_error
	bge-	.Lsyscall_error
.Lsyscall_error_cont:
	ld	r7,_NIP(r1)
BEGIN_FTR_SECTION
@@ -248,13 +248,13 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
	RFI
	b	.	/* prevent speculative execution */

syscall_error:	
.Lsyscall_error:
	oris	r5,r5,0x1000	/* Set SO bit in CR */
	neg	r3,r3
	std	r5,_CCR(r1)
	b	.Lsyscall_error_cont

syscall_restore_math:
.Lsyscall_restore_math:
	/*
	 * Some initial tests from restore_math to avoid the heavyweight
	 * C code entry and MSR manipulations.
@@ -289,7 +289,7 @@ syscall_restore_math:
	b	.Lsyscall_restore_math_cont

/* Traced system call support */
syscall_dotrace:
.Lsyscall_dotrace:
	bl	save_nvgprs
	addi	r3,r1,STACK_FRAME_OVERHEAD
	bl	do_syscall_trace_enter
@@ -322,11 +322,11 @@ syscall_dotrace:
	b	.Lsyscall_exit


syscall_enosys:
.Lsyscall_enosys:
	li	r3,-ENOSYS
	b	.Lsyscall_exit
	
syscall_exit_work:
.Lsyscall_exit_work:
#ifdef CONFIG_PPC_BOOK3S
	li	r10,MSR_RI
	mtmsrd	r10,1		/* Restore RI */
@@ -386,7 +386,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
	b	ret_from_except

#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
tabort_syscall:
.Ltabort_syscall:
	/* Firstly we need to enable TM in the kernel */
	mfmsr	r10
	li	r9, 1
@@ -412,6 +412,8 @@ tabort_syscall:
	rfid
	b	.	/* prevent speculative execution */
#endif
_ASM_NOKPROBE_SYMBOL(system_call_common);
_ASM_NOKPROBE_SYMBOL(system_call);

/* Save non-volatile GPRs, if not already saved. */
_GLOBAL(save_nvgprs)