linux_dsm_epyc7002/arch/arm64/kernel
Will Deacon 3a5a4366ce arm64: ptrace: Override SPSR.SS when single-stepping is enabled
Luis reports that, when reverse debugging with GDB, single-step does not
function as expected on arm64:

  | I've noticed, under very specific conditions, that a PTRACE_SINGLESTEP
  | request by GDB won't execute the underlying instruction. As a consequence,
  | the PC doesn't move, but we return a SIGTRAP just like we would for a
  | regular successful PTRACE_SINGLESTEP request.

The underlying problem is that when the CPU register state is restored
as part of a reverse step, the SPSR.SS bit is cleared and so the hardware
single-step state can transition to the "active-pending" state, causing
an unexpected step exception to be taken immediately if a step operation
is attempted.

In hindsight, we probably shouldn't have exposed SPSR.SS in the pstate
accessible by the GPR regset, but it's a bit late for that now. Instead,
simply prevent userspace from configuring the bit to a value which is
inconsistent with the TIF_SINGLESTEP state for the task being traced.

Cc: <stable@vger.kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Keno Fischer <keno@juliacomputing.com>
Link: https://lore.kernel.org/r/1eed6d69-d53d-9657-1fc9-c089be07f98c@linaro.org
Reported-by: Luis Machado <luis.machado@linaro.org>
Tested-by: Luis Machado <luis.machado@linaro.org>
Signed-off-by: Will Deacon <will@kernel.org>
2020-07-16 11:41:21 +01:00
..
probes Merge branches 'for-next/asm' and 'for-next/insn' into for-next/bti 2020-05-05 15:19:09 +01:00
vdso arm64: vdso: Don't use gcc plugins for building vgettimeofday.c 2020-06-24 14:04:44 +01:00
vdso32 arm64: compat: Remove 32-bit sigreturn code from the vDSO 2020-06-23 14:56:39 +01:00
.gitignore .gitignore: add SPDX License Identifier 2020-03-25 11:50:48 +01:00
acpi_numa.c
acpi_parking_protocol.c
acpi.c mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
alternative.c arm64/alternatives: don't patch up internal branches 2020-07-09 14:57:59 +01:00
armv8_deprecated.c sysctl: pass kernel pointers to ->proc_handler 2020-04-27 02:07:40 -04:00
asm-offsets.c ARM: 2020-06-03 15:13:47 -07:00
cacheinfo.c
cpu_errata.c arm64: Add missing sentinel to erratum_1463225 2020-07-09 09:42:24 +01:00
cpu_ops.c arm64: Introduce get_cpu_ops() helper function 2020-03-24 17:24:19 +00:00
cpu-reset.h
cpu-reset.S arm64: kernel: Convert to modern annotations for assembly functions 2020-05-04 12:46:03 +01:00
cpufeature.c arm64: Add KRYO4XX silver CPU cores to erratum list 1530923 and 1024718 2020-07-03 16:39:16 +01:00
cpuidle.c arm64: Introduce get_cpu_ops() helper function 2020-03-24 17:24:19 +00:00
cpuinfo.c Merge branch 'for-next/bti' into for-next/core 2020-05-28 18:00:51 +01:00
crash_core.c arm64/crash_core: Export KERNELPACMASK in vmcoreinfo 2020-05-11 14:29:10 +01:00
crash_dump.c
debug-monitors.c arm64: ptrace: Override SPSR.SS when single-stepping is enabled 2020-07-16 11:41:21 +01:00
efi-entry.S arm64 updates for 5.8 2020-06-01 15:18:27 -07:00
efi-header.S arm64 updates for 5.8 2020-06-01 15:18:27 -07:00
efi-rt-wrapper.S Merge branch 'for-next/scs' into for-next/core 2020-05-28 18:03:40 +01:00
efi.c
entry-common.c arm64: entry: Fix the typo in the comment of el1_dbg() 2020-07-08 21:44:40 +01:00
entry-fpsimd.S arm64: kernel: Convert to modern annotations for assembly functions 2020-05-04 12:46:03 +01:00
entry-ftrace.S arm64: entry-ftrace.S: Update comment to indicate that x18 is live 2020-05-18 17:47:50 +01:00
entry.S arm64: entry: Tidy up block comments and label numbers 2020-07-08 22:13:33 +01:00
fpsimd.c arm64: sve: Fix build failure when ARM64_SVE=y and SYSCTL=n 2020-06-16 18:29:11 +01:00
ftrace.c arm64: ftrace: Change CONFIG_FTRACE_WITH_REGS to CONFIG_DYNAMIC_FTRACE_WITH_REGS 2020-06-08 15:44:59 +01:00
head.S mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
hibernate-asm.S arm64: kernel: Convert to modern annotations for assembly functions 2020-05-04 12:46:03 +01:00
hibernate.c mm: consolidate pte_index() and pte_offset_*() definitions 2020-06-09 09:39:14 -07:00
hw_breakpoint.c arm64: hw_breakpoint: Don't invoke overflow handler on uaccess watchpoints 2020-06-18 11:10:00 +01:00
hyp-stub.S arm64: kernel: Convert to modern annotations for assembly functions 2020-05-04 12:46:03 +01:00
image-vars.h arm64: rename stext to primary_entry 2020-04-28 13:55:16 +01:00
image.h
insn.c Merge branch 'for-next/bti' into for-next/core 2020-05-28 18:00:51 +01:00
io.c
irq.c
jump_label.c
kaslr.c mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
kexec_image.c
kgdb.c arm64: kgdb: Fix single-step exception handling oops 2020-07-08 22:18:54 +01:00
kuser32.S
machine_kexec_file.c arm64: kexec_file: Use struct_size() in kmalloc() 2020-06-18 10:45:20 +01:00
machine_kexec.c arm64: fix the flush_icache_range arguments in machine_kexec 2020-05-11 12:02:14 +01:00
Makefile arm64: compat: Allow 32-bit vdso and sigpage to co-exist 2020-06-23 14:47:03 +01:00
module-plts.c
module.c
module.lds
paravirt.c firmware: smccc: Drop smccc_version enum and use ARM_SMCCC_VERSION_1_x instead 2020-05-20 19:10:37 +01:00
pci.c PCI: Constify struct pci_ecam_ops 2020-05-01 16:28:59 +01:00
perf_callchain.c
perf_event.c arm64: perf: Add support for ARMv8.5-PMU 64-bit counters 2020-03-17 22:50:30 +00:00
perf_regs.c arm64: perf: Report the PC value in REGS_ABI_32 mode 2020-06-25 14:47:04 +01:00
pointer_auth.c arm64: install user ptrauth keys at kernel exit time 2020-03-18 09:50:19 +00:00
process.c arm64: add loglvl to dump_backtrace() 2020-06-09 09:39:11 -07:00
psci.c
ptrace.c arm64: ptrace: Override SPSR.SS when single-stepping is enabled 2020-07-16 11:41:21 +01:00
reloc_test_core.c
reloc_test_syms.S arm64: kernel: Convert to modern annotations for assembly functions 2020-05-04 12:46:03 +01:00
relocate_kernel.S arm64: kernel: Convert to modern annotations for assembly functions 2020-05-04 12:46:03 +01:00
return_address.c
scs.c scs: Move DEFINE_SCS macro into core code 2020-05-18 17:47:48 +01:00
sdei.c arm64 updates for 5.8 2020-06-01 15:18:27 -07:00
setup.c arm64: warn on incorrect placement of the kernel by the bootloader 2020-06-11 14:13:13 +01:00
signal32.c arm64: compat: Always use sigpage for sigreturn trampoline 2020-06-23 14:56:24 +01:00
signal.c arm64: ptrace: Consistently use pseudo-singlestep exceptions 2020-07-16 11:41:07 +01:00
sigreturn32.S
sleep.S Merge branch 'for-next/bti' into for-next/core 2020-05-28 18:00:51 +01:00
smccc-call.S arm64: kernel: Convert to modern annotations for assembly functions 2020-05-04 12:46:03 +01:00
smp_spin_table.c
smp.c mm: don't include asm/pgtable.h if linux/mm.h is already included 2020-06-09 09:39:13 -07:00
ssbd.c
stacktrace.c arm64: unwind: strip PAC from kernel addresses 2020-03-18 09:50:20 +00:00
suspend.c mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
sys32.c
sys_compat.c
sys.c
syscall.c arm64: ptrace: Consistently use pseudo-singlestep exceptions 2020-07-16 11:41:07 +01:00
time.c arm64: time: Replace <linux/clk-provider.h> by <linux/of_clk.h> 2020-02-12 17:26:38 +00:00
topology.c arm64: use activity monitors for frequency invariance 2020-03-06 16:02:50 +00:00
trace-events-emulation.h
traps.c arm64: traps: Dump registers prior to panic() in bad_mode() 2020-06-15 16:58:13 +01:00
vdso.c arm64: compat: Allow 32-bit vdso and sigpage to co-exist 2020-06-23 14:47:03 +01:00
vmlinux.lds.S arm64/alternatives: use subsections for replacement sequences 2020-07-02 12:57:17 +01:00