linux/arch/powerpc/kernel
Nicholas Piggin a553476c44 powerpc/64: remove system call instruction emulation
emulate_step() instruction emulation including sc instruction emulation
initially appeared in xmon. It was then moved into sstep.c where kprobes
could use it too, and later hw_breakpoint and uprobes started to use it.

Until uprobes, the only instruction emulation users were for kernel
mode instructions.

- xmon only steps / breaks on kernel addresses.
- kprobes is kernel only.
- hw_breakpoint only emulates kernel instructions, single steps user.

At one point, there was support for the kernel to execute sc
instructions, although that is long removed and it's not clear whether
there were any in-tree users. So system call emulation is not required
by the above users.

uprobes uses emulate_step and it appears possible to emulate sc
instruction in userspace. Userspace system call emulation is broken and
it's not clear it ever worked well.

The big complication is that userspace takes an interrupt to the kernel
to emulate the instruction. The user->kernel interrupt sets up registers
and interrupt stack frame expecting to return to userspace, then system
call instruction emulation re-directs that stack frame to the kernel,
early in the system call interrupt handler. This means the interrupt
return code takes the kernel->kernel restore path, which does not
restore everything as the system call interrupt handler would expect
coming from userspace. regs->iamr appears to get lost for example,
because the kernel->kernel return does not restore the user iamr.
Accounting such as irqflags tracing and CPU accounting does not get
flipped back to user mode as the system call handler expects, so those
appear to enter the kernel twice without returning to userspace.

These things may be individually fixable with various complication, but
it is a big complexity for unclear real benefit.

Furthermore, it is not possible to single step a system call instruction
since it causes an interrupt. As such, a separate patch disables probing
on system call instructions.

This patch removes system call emulation and disables stepping system
calls.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
[minor commit log edit, and also get rid of '#ifdef CONFIG_PPC64']
Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/a412e3b3791ed83de18704c8d90f492e7a0049c0.1648648712.git.naveen.n.rao@linux.vnet.ibm.com
2022-05-06 00:00:20 +10:00
..
ptrace powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00
syscalls arch: syscalls: simplify uapi/kapi directory creation 2022-03-31 12:03:46 +09:00
trace powerpc: Move C prototypes out of asm-prototypes.h 2022-03-08 22:06:25 +11:00
vdso powerpc/vdso: Move cvdso_call macro into gettimeofday.S 2022-02-12 22:47:44 +11:00
.gitignore
align.c powerpc/inst: Define ppc_inst_t 2021-12-09 22:41:21 +11:00
asm-offsets.c powerpc/ftrace: Add support for livepatch to PPC32 2022-02-07 21:03:10 +11:00
audit.c Revert "powerpc/audit: Convert powerpc to AUDIT_ARCH_COMPAT_GENERIC" 2021-10-27 22:30:32 +11:00
btext.c powerpc: make 'boot_text_mapped' static 2022-05-04 19:37:43 +10:00
cacheinfo.c powerpc/cacheinfo: use default_groups in kobj_type 2022-01-05 10:58:23 +11:00
cacheinfo.h
compat_audit.c Revert "powerpc/audit: Convert powerpc to AUDIT_ARCH_COMPAT_GENERIC" 2021-10-27 22:30:32 +11:00
cpu_setup_6xx.S powerpc/32: Blacklist functions running with MMU disabled for kprobe 2020-06-02 20:59:11 +10:00
cpu_setup_44x.S
cpu_setup_fsl_booke.S powerpc: Retire e200 core (mpc555x processor) 2020-12-05 21:49:18 +11:00
cpu_setup_pa6t.S
cpu_setup_power.c powerpc/64s: Always set PMU control registers to frozen/disabled when not in use 2021-11-24 21:08:57 +11:00
cpu_setup_ppc970.S
cputable.c powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00
crash_dump.c powerpc: Don't use 'struct ppc_inst' to reference instruction location 2021-06-17 00:09:00 +10:00
dawr.c powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00
dbell.c powerpc/64s/interrupt: Don't enable MSR[EE] in irq handlers unless perf is in use 2021-12-16 21:31:45 +11:00
dma-iommu.c powerpc/iommu: Report the correct most efficient DMA mask for PCI devices 2021-09-30 17:10:17 +10:00
dma-mask.c
dma-swiotlb.c
dt_cpu_ftrs.c powerpc/kernel: Add __init attribute to eligible functions 2021-12-23 22:33:10 +11:00
early_32.c powerpc: Move C prototypes out of asm-prototypes.h 2022-03-08 22:06:25 +11:00
eeh_cache.c powerpc/kernel: Add __init attribute to eligible functions 2021-12-23 22:33:10 +11:00
eeh_driver.c powerpc/eeh: Use a goto for recovery failures 2021-11-25 11:25:31 +11:00
eeh_event.c powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00
eeh_pe.c powerpc/eeh: Delete eeh_pe->config_addr 2020-10-07 22:34:47 +11:00
eeh_sysfs.c powerpc/eeh: Pass eeh_dev to eeh_ops->resume_notify() 2020-07-26 23:34:20 +10:00
eeh.c powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00
entry_32.S powerpc/config: Add CONFIG_BOOKE_OR_40x 2021-12-09 22:41:19 +11:00
entry_64.S powerpc/64s: Move hash MMU support code under CONFIG_PPC_64S_HASH_MMU 2021-12-09 22:41:13 +11:00
epapr_hcalls.S
epapr_paravirt.c powerpc/inst: Define ppc_inst_t 2021-12-09 22:41:21 +11:00
exceptions-64e.S powerpc: flexible GPR range save/restore macros 2021-11-29 23:15:20 +11:00
exceptions-64s.S KVM: PPC: Book3S PR: Disable SCV when AIL could be disabled 2022-03-08 13:13:58 +11:00
fadump.c powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00
firmware.c powerpc: fix unbalanced node refcount in check_kvm_guest() 2021-10-09 00:15:59 +11:00
fpu.S powerpc/64s/interrupt: handle MSR EE and RI in interrupt entry wrapper 2021-12-16 21:31:45 +11:00
fsl_booke_entry_mapping.S powerpc/booke: Avoid link stack corruption in several places 2021-08-25 13:35:47 +10:00
head_8xx.S powerpc/32: Remove _ENTRY() macro 2022-02-07 21:03:10 +11:00
head_32.h powerpc updates for 5.17 2022-01-14 15:17:26 +01:00
head_40x.S powerpc/32: Remove _ENTRY() macro 2022-02-07 21:03:10 +11:00
head_44x.S powerpc/32: Remove _ENTRY() macro 2022-02-07 21:03:10 +11:00
head_64.S powerpc/64/asm: Do not reassign labels 2021-12-23 22:35:12 +11:00
head_book3s_32.S powerpc updates for 5.18 2022-03-25 09:39:36 -07:00
head_booke.h powerpc: flexible GPR range save/restore macros 2021-11-29 23:15:20 +11:00
head_fsl_booke.S powerpc/32: Remove _ENTRY() macro 2022-02-07 21:03:10 +11:00
hw_breakpoint_constraints.c powerpc/inst: Define ppc_inst_t 2021-12-09 22:41:21 +11:00
hw_breakpoint.c powerpc/inst: Define ppc_inst_t 2021-12-09 22:41:21 +11:00
idle_6xx.S powerpc/mm: Switch obsolete dssall to .long 2021-12-23 22:35:13 +11:00
idle_book3e.S
idle_book3s.S powerpc/idle: Don't corrupt back chain when going idle 2021-10-20 21:37:58 +11:00
idle_e500.S powerpc/32: Return directly from power_save_ppc32_restore() 2021-03-29 13:22:10 +11:00
idle.c powerpc/idle: Fix return value of __setup() handler 2022-05-04 19:37:46 +10:00
ima_arch.c powerpc/ima: Fix secure boot rules in ima arch policy 2020-05-07 17:25:54 +10:00
interrupt_64.S powerpc/64: remove system call instruction emulation 2022-05-06 00:00:20 +10:00
interrupt.c powerpc: Move C prototypes out of asm-prototypes.h 2022-03-08 22:06:25 +11:00
io-workarounds.c powerpc: Fix reverse map real-mode address lookup with huge vmalloc 2021-05-28 22:54:27 +10:00
io.c
iomap.c powerpc: inline iomap accessors 2020-12-04 01:01:09 +11:00
iommu.c powerpc updates for 5.15 2021-09-03 11:22:50 -07:00
irq.c powerpc: Move C prototypes out of asm-prototypes.h 2022-03-08 22:06:25 +11:00
isa-bridge.c mm/vmalloc: remove unmap_kernel_range 2021-04-30 11:20:40 -07:00
jump_label.c powerpc: Don't use 'struct ppc_inst' to reference instruction location 2021-06-17 00:09:00 +10:00
kdebugfs.c powerpc: rename powerpc_debugfs_root to arch_debugfs_dir 2021-08-13 22:04:26 +10:00
kgdb.c powerpc/config: Add CONFIG_BOOKE_OR_40x 2021-12-09 22:41:19 +11:00
kprobes-ftrace.c ftrace: disable preemption when recursion locked 2021-10-27 11:21:49 -04:00
kprobes.c powerpc: Reject probes on instructions that can't be single stepped 2022-05-06 00:00:20 +10:00
kvm_emul.S
kvm.c gup: Turn fault_in_pages_{readable,writeable} into fault_in_{readable,writeable} 2021-10-18 16:33:03 +02:00
l2cr_6xx.S powerpc/mm: Switch obsolete dssall to .long 2021-12-23 22:35:13 +11:00
legacy_serial.c powerpc/legacy_serial: Fix UBSAN: array-index-out-of-bounds 2021-05-12 11:07:39 +10:00
Makefile powerpc/vdso: Merge vdso64 and vdso32 into a single directory 2022-02-12 22:47:43 +11:00
mce_power.c powerpc/inst: Define ppc_inst_t 2021-12-09 22:41:21 +11:00
mce.c powerpc: Move C prototypes out of asm-prototypes.h 2022-03-08 22:06:25 +11:00
misc_32.S powerpc: Avoid link stack corruption in misc asm functions 2021-08-25 13:35:47 +10:00
misc_64.S powerpc: Avoid link stack corruption in misc asm functions 2021-08-25 13:35:47 +10:00
misc.S powerpc: Avoid link stack corruption in misc asm functions 2021-08-25 13:35:47 +10:00
module_32.c powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00
module_64.c powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00
module.c vmalloc: replace VM_NO_HUGE_VMAP with VM_ALLOW_HUGE_VMAP 2022-04-19 12:08:57 -07:00
msi.c
note.S
nvram_64.c powerpc/kernel: Add __init attribute to eligible functions 2021-12-23 22:33:10 +11:00
of_platform.c powerpc/eeh: Remove eeh_dev_phb_init_dynamic() 2020-07-26 23:34:19 +10:00
optprobes_head.S powerpc: flexible GPR range save/restore macros 2021-11-29 23:15:20 +11:00
optprobes.c powerpc/inst: Define ppc_inst_t as u32 on PPC32 2021-12-09 22:41:21 +11:00
paca.c powerpc/mm: Remove CONFIG_PPC_MM_SLICES 2022-05-05 22:11:57 +10:00
pci_32.c powerpc/kernel: Add __init attribute to eligible functions 2021-12-23 22:33:10 +11:00
pci_64.c mm/vmalloc: remove unmap_kernel_range 2021-04-30 11:20:40 -07:00
pci_dn.c powerpc/pci: Move PHB discovery for PCI_DN using platforms 2021-02-09 00:01:05 +11:00
pci_of_scan.c powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00
pci-common.c powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00
pci-hotplug.c powerpc/eeh: Release EEH device state synchronously 2020-05-18 21:58:44 +10:00
pmc.c
ppc32.h
ppc_save_regs.S powerpc: Improve ppc_save_regs() 2020-04-04 21:40:57 +11:00
proc_powerpc.c proc: remove PDE_DATA() completely 2022-01-22 08:33:37 +02:00
process.c powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00
prom_init_check.sh
prom_init.c powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00
prom_parse.c
prom.c powerpc/64: Move paca allocation later in boot 2022-02-02 20:32:11 +11:00
reloc_32.S powerpc: Avoid link stack corruption in misc asm functions 2021-08-25 13:35:47 +10:00
reloc_64.S powerpc/64: Add UADDR64 relocation support 2022-03-09 21:47:53 +11:00
rtas_flash.c powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00
rtas_pci.c mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
rtas-proc.c powerpc/rtas: Replaced simple_strtoull() with kstrtoull() 2022-05-04 19:37:44 +10:00
rtas-rtc.c powerpc/rtas-rtc: remove unused constant 2021-06-25 14:47:20 +10:00
rtas.c powerpc: Set crashkernel offset to mid of RMA region 2022-02-07 15:26:12 +11:00
rtasd.c powerpc/kernel: Add __init attribute to eligible functions 2021-12-23 22:33:10 +11:00
secure_boot.c powerpc/pseries: Detect secure and trusted boot state of the system. 2020-07-16 14:49:53 +10:00
security.c powerpc: add link stack flush mitigation status in debugfs. 2022-01-31 13:45:23 +11:00
secvar-ops.c
secvar-sysfs.c powerpc/secvar: fix refcount leak in format_show() 2022-03-08 22:07:41 +11:00
setup_32.c powerpc/inst: Define ppc_inst_t 2021-12-09 22:41:21 +11:00
setup_64.c Merge branch 'topic/ppc-kvm' into next 2022-03-28 21:11:24 +11:00
setup-common.c powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00
setup.h powerpc/config: Add CONFIG_BOOKE_OR_40x 2021-12-09 22:41:19 +11:00
signal_32.c powerpc/signal32: Use struct_group() to zero spe regs 2021-12-02 10:39:00 +11:00
signal_64.c powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00
signal.c resume_user_mode: Move to resume_user_mode.h 2022-03-10 16:51:50 -06:00
signal.h powerpc/signal32: Fix sigset_t copy 2021-11-16 21:24:16 +11:00
smp-tbsync.c
smp.c powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00
stacktrace.c kprobes: treewide: Make it harder to refer kretprobe_trampoline directly 2021-09-30 21:24:06 -04:00
static_call.c powerpc/32: Add support for out-of-line static calls 2021-10-22 15:22:05 +11:00
suspend.c
swsusp_32.S powerpc/mm: Switch obsolete dssall to .long 2021-12-23 22:35:13 +11:00
swsusp_64.c powerpc/machdep: Remove stale functions from ppc_md structure 2021-10-22 15:22:05 +11:00
swsusp_asm64.S powerpc/mm: Switch obsolete dssall to .long 2021-12-23 22:35:13 +11:00
swsusp_booke.S
swsusp.c
sys_ppc32.c powerpc/compat_sys: swap hi/lo parts of 64-bit syscall args in LE mode 2021-02-11 23:35:07 +11:00
syscalls.c powerpc: Remove redundant spaces to match coding style 2022-05-04 19:37:46 +10:00
sysfs.c drivers/base/node: consolidate node device subsystem initialization in node_dev_init() 2022-03-22 15:57:10 -07:00
systbl_chk.sh
systbl.S powerpc/syscalls: switch to generic syscalltbl.sh 2021-04-14 23:04:16 +10:00
tau_6xx.c powerpc: Move C prototypes out of asm-prototypes.h 2022-03-08 22:06:25 +11:00
time.c powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00
tm.S powerpc/tm: Fix more userspace r13 corruption 2022-03-16 11:59:24 +11:00
traps.c exit: Add and use make_task_dead. 2021-12-13 12:04:45 -06:00
ucall.S
udbg_16550.c powerpc/kernel: Add __init attribute to eligible functions 2021-12-23 22:33:10 +11:00
udbg.c isystem: ship and use stdarg.h 2021-08-19 09:02:55 +09:00
uprobes.c powerpc: Reject probes on instructions that can't be single stepped 2022-05-06 00:00:20 +10:00
vdso32_wrapper.S powerpc/vdso: Merge vdso64 and vdso32 into a single directory 2022-02-12 22:47:43 +11:00
vdso64_wrapper.S powerpc/vdso: Merge vdso64 and vdso32 into a single directory 2022-02-12 22:47:43 +11:00
vdso.c powerpc/vdso: Add support for time namespaces 2021-04-14 23:04:44 +10:00
vecemu.c powerpc/inst: Define ppc_inst_t 2021-12-09 22:41:21 +11:00
vector.S powerpc/64s/interrupt: handle MSR EE and RI in interrupt entry wrapper 2021-12-16 21:31:45 +11:00
vmlinux.lds.S powerpc/64: Add UADDR64 relocation support 2022-03-09 21:47:53 +11:00
watchdog.c powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00