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

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
...@@ -57,7 +57,7 @@ system_call_common: ...@@ -57,7 +57,7 @@ system_call_common:
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
BEGIN_FTR_SECTION BEGIN_FTR_SECTION
extrdi. r10, r12, 1, (63-MSR_TS_T_LG) /* transaction active? */ extrdi. r10, r12, 1, (63-MSR_TS_T_LG) /* transaction active? */
bne tabort_syscall bne .Ltabort_syscall
END_FTR_SECTION_IFSET(CPU_FTR_TM) END_FTR_SECTION_IFSET(CPU_FTR_TM)
#endif #endif
andi. r10,r12,MSR_PR andi. r10,r12,MSR_PR
...@@ -152,9 +152,9 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_SPLPAR) ...@@ -152,9 +152,9 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_SPLPAR)
CURRENT_THREAD_INFO(r11, r1) CURRENT_THREAD_INFO(r11, r1)
ld r10,TI_FLAGS(r11) ld r10,TI_FLAGS(r11)
andi. r11,r10,_TIF_SYSCALL_DOTRACE andi. r11,r10,_TIF_SYSCALL_DOTRACE
bne syscall_dotrace /* does not return */ bne .Lsyscall_dotrace /* does not return */
cmpldi 0,r0,NR_syscalls cmpldi 0,r0,NR_syscalls
bge- syscall_enosys bge- .Lsyscall_enosys
system_call: /* label this so stack traces look sane */ system_call: /* label this so stack traces look sane */
/* /*
...@@ -208,7 +208,7 @@ 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) ld r9,TI_FLAGS(r12)
li r11,-MAX_ERRNO li r11,-MAX_ERRNO
andi. r0,r9,(_TIF_SYSCALL_DOTRACE|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK) 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 */ /* If MSR_FP and MSR_VEC are set in user msr, then no need to restore */
li r7,MSR_FP li r7,MSR_FP
...@@ -217,12 +217,12 @@ system_call: /* label this so stack traces look sane */ ...@@ -217,12 +217,12 @@ system_call: /* label this so stack traces look sane */
#endif #endif
and r0,r8,r7 and r0,r8,r7
cmpd r0,r7 cmpd r0,r7
bne syscall_restore_math bne .Lsyscall_restore_math
.Lsyscall_restore_math_cont: .Lsyscall_restore_math_cont:
cmpld r3,r11 cmpld r3,r11
ld r5,_CCR(r1) ld r5,_CCR(r1)
bge- syscall_error bge- .Lsyscall_error
.Lsyscall_error_cont: .Lsyscall_error_cont:
ld r7,_NIP(r1) ld r7,_NIP(r1)
BEGIN_FTR_SECTION BEGIN_FTR_SECTION
...@@ -248,13 +248,13 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR) ...@@ -248,13 +248,13 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
RFI RFI
b . /* prevent speculative execution */ b . /* prevent speculative execution */
syscall_error: .Lsyscall_error:
oris r5,r5,0x1000 /* Set SO bit in CR */ oris r5,r5,0x1000 /* Set SO bit in CR */
neg r3,r3 neg r3,r3
std r5,_CCR(r1) std r5,_CCR(r1)
b .Lsyscall_error_cont b .Lsyscall_error_cont
syscall_restore_math: .Lsyscall_restore_math:
/* /*
* Some initial tests from restore_math to avoid the heavyweight * Some initial tests from restore_math to avoid the heavyweight
* C code entry and MSR manipulations. * C code entry and MSR manipulations.
...@@ -289,7 +289,7 @@ syscall_restore_math: ...@@ -289,7 +289,7 @@ syscall_restore_math:
b .Lsyscall_restore_math_cont b .Lsyscall_restore_math_cont
/* Traced system call support */ /* Traced system call support */
syscall_dotrace: .Lsyscall_dotrace:
bl save_nvgprs bl save_nvgprs
addi r3,r1,STACK_FRAME_OVERHEAD addi r3,r1,STACK_FRAME_OVERHEAD
bl do_syscall_trace_enter bl do_syscall_trace_enter
...@@ -322,11 +322,11 @@ syscall_dotrace: ...@@ -322,11 +322,11 @@ syscall_dotrace:
b .Lsyscall_exit b .Lsyscall_exit
syscall_enosys: .Lsyscall_enosys:
li r3,-ENOSYS li r3,-ENOSYS
b .Lsyscall_exit b .Lsyscall_exit
syscall_exit_work: .Lsyscall_exit_work:
#ifdef CONFIG_PPC_BOOK3S #ifdef CONFIG_PPC_BOOK3S
li r10,MSR_RI li r10,MSR_RI
mtmsrd r10,1 /* Restore RI */ mtmsrd r10,1 /* Restore RI */
...@@ -386,7 +386,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR) ...@@ -386,7 +386,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
b ret_from_except b ret_from_except
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
tabort_syscall: .Ltabort_syscall:
/* Firstly we need to enable TM in the kernel */ /* Firstly we need to enable TM in the kernel */
mfmsr r10 mfmsr r10
li r9, 1 li r9, 1
...@@ -412,6 +412,8 @@ tabort_syscall: ...@@ -412,6 +412,8 @@ tabort_syscall:
rfid rfid
b . /* prevent speculative execution */ b . /* prevent speculative execution */
#endif #endif
_ASM_NOKPROBE_SYMBOL(system_call_common);
_ASM_NOKPROBE_SYMBOL(system_call);
/* Save non-volatile GPRs, if not already saved. */ /* Save non-volatile GPRs, if not already saved. */
_GLOBAL(save_nvgprs) _GLOBAL(save_nvgprs)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment