mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-04 21:31:51 +00:00
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: Masami Hiramatsu <mhiramat@kernel.org> Reviewed-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> [mpe: Don't convert system_call_common to _GLOBAL()] Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
9d6c452352
commit
cf7d6fb067
1 changed files with 14 additions and 12 deletions
|
@ -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)
|
||||||
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 */
|
||||||
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 */
|
||||||
#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)
|
||||||
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:
|
||||||
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:
|
||||||
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)
|
||||||
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:
|
||||||
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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue