mirror-linux/arch/mips/include/asm
Dmitry V. Levin 733a90561a MIPS: fix mips_get_syscall_arg() for o32
This makes ptrace/get_syscall_info selftest pass on mips o32 and
mips64 o32 by fixing the following two test assertions:

1. get_syscall_info test assertion on mips o32:
  # get_syscall_info.c:218:get_syscall_info:Expected exp_args[5] (3134521044) == info.entry.args[4] (4911432)
  # get_syscall_info.c:219:get_syscall_info:wait #1: entry stop mismatch

2. get_syscall_info test assertion on mips64 o32:
  # get_syscall_info.c:209:get_syscall_info:Expected exp_args[2] (3134324433) == info.entry.args[1] (18446744072548908753)
  # get_syscall_info.c:210:get_syscall_info:wait #1: entry stop mismatch

The first assertion happens due to mips_get_syscall_arg() trying to access
another task's context but failing to do it properly because get_user() it
calls just peeks at the current task's context.  It usually does not crash
because the default user stack always gets assigned the same VMA, but it
is pure luck which mips_get_syscall_arg() wouldn't have if e.g. the stack
was switched (via setcontext(3) or however) or a non-default process's
thread peeked at, and in any case irrelevant data is obtained just as
observed with the test case.

mips_get_syscall_arg() ought to be using access_remote_vm() instead to
retrieve the other task's stack contents, but given that the data has been
already obtained and saved in `struct pt_regs' it would be an overkill.

The first assertion is fixed for mips o32 by using struct pt_regs.args
instead of get_user() to obtain syscall arguments.  This approach works
due to this piece in arch/mips/kernel/scall32-o32.S:

        /*
         * Ok, copy the args from the luser stack to the kernel stack.
         */

        .set    push
        .set    noreorder
        .set    nomacro

    load_a4: user_lw(t5, 16(t0))		# argument #5 from usp
    load_a5: user_lw(t6, 20(t0))		# argument #6 from usp
    load_a6: user_lw(t7, 24(t0))		# argument #7 from usp
    load_a7: user_lw(t8, 28(t0))		# argument #8 from usp
    loads_done:

        sw	t5, PT_ARG4(sp)		# argument #5 to ksp
        sw	t6, PT_ARG5(sp)		# argument #6 to ksp
        sw	t7, PT_ARG6(sp)		# argument #7 to ksp
        sw	t8, PT_ARG7(sp)		# argument #8 to ksp
        .set	pop

        .section __ex_table,"a"
        PTR_WD	load_a4, bad_stack_a4
        PTR_WD	load_a5, bad_stack_a5
        PTR_WD	load_a6, bad_stack_a6
        PTR_WD	load_a7, bad_stack_a7
        .previous

arch/mips/kernel/scall64-o32.S has analogous code for mips64 o32 that
allows fixing the issue by obtaining syscall arguments from struct
pt_regs.regs[4..11] instead of the erroneous use of get_user().

The second assertion is fixed by truncating 64-bit values to 32-bit
syscall arguments.

Fixes: c0ff3c53d4 ("MIPS: Enable HAVE_ARCH_TRACEHOOK.")
Signed-off-by: Dmitry V. Levin <ldv@strace.io>
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
2025-02-13 12:41:29 +01:00
..
dec MIPS: dec: prom: Remove unused unregister_prom_console() declaration 2024-08-29 10:44:08 +02:00
fw add intptr_t 2023-06-09 17:44:13 -07:00
ip32
mach-ath25 MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
mach-ath79 MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
mach-au1x00 MIPS: Remove unused function dump_au1000_dma_channel() in dma.c 2024-08-29 10:38:18 +02:00
mach-bcm47xx MIPS: BCM47XX: Add support for Huawei B593u-12 2023-03-14 17:05:14 +01:00
mach-bcm63xx PCI: Add defines for normal and subtractive PCI bridges 2022-02-17 15:29:35 -06:00
mach-bmips
mach-cavium-octeon locking: remove spin_lock_prefetch 2023-08-12 09:18:47 -07:00
mach-cobalt MIPS: Cobalt: Fix missing prototypes 2024-01-22 10:32:21 +01:00
mach-db1x00
mach-dec MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
mach-generic MIPS: spaces: Define a couple of handy macros 2024-02-20 12:44:39 +01:00
mach-ingenic MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
mach-ip22 MIPS: Remove mach-*/war.h 2020-09-07 22:25:27 +02:00
mach-ip27 arch, mm: move definition of node_data to generic code 2024-09-03 21:15:28 -07:00
mach-ip28 MIPS: SGI-IP28: disable use of ll/sc in kernel 2020-10-08 10:33:27 +02:00
mach-ip30 MIPS: IP30: Remove incorrect `cpu_has_fpu' override 2022-05-04 22:23:18 +02:00
mach-ip32 MIPS: Remove mach-*/war.h 2020-09-07 22:25:27 +02:00
mach-jazz
mach-lantiq MIPS: Fix typos 2024-01-08 10:39:12 +01:00
mach-loongson2ef MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
mach-loongson32 MIPS: loongson32: Remove dma.h and nand.h 2023-10-06 10:10:13 +02:00
mach-loongson64 MIPS: Loongson: Add comments for interface_info 2025-01-11 12:39:33 +01:00
mach-malta MIPS: Fix typos 2024-01-08 10:39:12 +01:00
mach-n64 mips: Add N64 machine type 2021-01-22 11:40:00 +01:00
mach-pic32
mach-ralink mips: ralink: mt7620: remove clock related code 2023-06-21 14:50:23 +02:00
mach-rc32434 MIPS: Fix a compilation issue 2023-01-27 17:22:06 +01:00
mach-rm MIPS: Remove mach-*/war.h 2020-09-07 22:25:27 +02:00
mach-sibyte MIPS: Remove mach-*/war.h 2020-09-07 22:25:27 +02:00
mach-tx49xx MIPS: TXX9: Remove rbtx4939 board support 2022-01-02 14:10:40 +01:00
mips-boards MIPS: Remove unused mips_display/_scroll_message() declarations 2024-08-29 10:43:41 +02:00
octeon MIPS: Fix typos 2024-01-08 10:39:12 +01:00
pci
sgi MIPS: sgi-ip22: Add prototypes for several functions to header 2024-06-11 13:10:33 +02:00
sibyte MIPS: sibyte: Remove Sibyte CARMEL and CRHINE board support 2023-03-17 10:27:21 +01:00
sn MIPS: Fix typos 2024-01-08 10:39:12 +01:00
txx9 MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
vdso MIPS: vdso: Remove timekeeper includes 2024-10-15 17:50:29 +02:00
xtalk
Kbuild asm-generic: introduce text-patching.h 2024-11-07 14:25:15 -08:00
abi.h
addrspace.h MIPS: spaces: Define a couple of handy macros 2024-02-20 12:44:39 +01:00
amon.h
arch_hweight.h
asm-eva.h
asm-offsets.h
asm-prototypes.h MIPS: Restore symbol versions for copy_page_cpu and clear_page_cpu 2022-12-01 11:46:05 +01:00
asm.h MIPS: Guard some macros with __ASSEMBLY__ in asm.h 2024-04-15 10:22:09 +02:00
asmmacro-32.h MIPS: Always use -Wa,-msoft-float and eliminate GAS_HAS_SET_HARDFLOAT 2023-01-26 12:41:16 +09:00
asmmacro-64.h
asmmacro.h MIPS: Implement microMIPS MT ASE helpers 2024-02-23 10:13:47 +01:00
atomic.h locking/atomic: make atomic*_{cmp,}xchg optional 2023-06-05 09:57:14 +02:00
barrier.h
bcache.h
bitops.h mm: delete checks for xor_unlock_is_negative_byte() 2023-10-18 14:34:17 -07:00
bitrev.h
bmips-spaces.h
bmips.h mips: bmips: rework and cache CBR addr handling 2024-06-27 10:44:24 +02:00
bootinfo.h MIPS: Ingenic: Add system type for new Ingenic SoCs. 2021-07-19 13:16:42 +02:00
branch.h
break.h
bug.h
bugs.h mips/cpu: Switch to arch_cpu_finalize_init() 2023-06-16 10:16:00 +02:00
cache.h mips: move cache declarations into header 2023-12-10 17:21:41 -08:00
cacheflush.h mm: Introduce flush_cache_vmap_early() 2023-12-14 00:23:17 -08:00
cacheops.h
cachetype.h Introduce cpu_dcache_is_aliasing() across all architectures 2024-02-22 15:27:19 -08:00
cdmm.h mips: bus: make mips_cdmm_bustype const 2024-02-20 13:36:34 +01:00
cevt-r4k.h
checksum.h MIPS: Add 'memory' clobber to csum_ipv6_magic() inline assembler 2024-02-12 23:03:19 +01:00
clocksource.h
cmp.h MIPS: Remove unused declarations in asm/cmp.h 2024-08-29 10:42:41 +02:00
cmpxchg.h locking/arch: Rename all internal __xchg() names to __arch_xchg() 2023-04-29 09:08:44 +02:00
compat-signal.h
compat.h asm-generic: compat: Cleanup duplicate definitions 2022-04-26 13:35:54 -07:00
compiler.h MIPS: remove GCC < 4.9 support 2020-11-11 23:49:22 +01:00
cop2.h MIPS: Remove NETLOGIC support 2021-10-24 17:24:47 +02:00
cpu-features.h MIPS: cpu-features: Use boot_cpu_type for CPU type based features 2023-06-09 09:56:22 +02:00
cpu-info.h
cpu-type.h MIPS: Remove VR41xx support 2022-07-14 11:52:29 +02:00
cpu.h MIPS: Remove VR41xx support 2022-07-14 11:52:29 +02:00
cpufeature.h
debug.h MIPS: Fix typos 2024-01-08 10:39:12 +01:00
delay.h
div64.h MIPS: Avoid handcoded DIVU in `__div64_32' altogether 2021-04-23 13:40:31 +02:00
dma-direct.h dma-direct: rename and cleanup __phys_to_dma 2020-09-11 09:14:43 +02:00
dma-mapping.h dma-mapping: no need to pass a bus_type into get_arch_dma_ops() 2023-02-15 12:35:20 +01:00
dma.h PCI: Move isa_dma_bridge_buggy out of asm/dma.h 2022-07-22 17:24:47 -05:00
dmi.h mips: dmi: Fix early remap on MIPS32 2023-12-21 15:31:25 +01:00
ds1287.h
dsemul.h
dsp.h
edac.h
elf.h mips compat: switch to compat_binfmt_elf.c 2021-01-06 08:42:49 -05:00
elfcore-compat.h mips compat: switch to compat_binfmt_elf.c 2021-01-06 08:42:49 -05:00
errno.h
eva.h
exec.h
extable.h
fixmap.h mips: fix comment about pgtable_init() 2023-04-05 19:42:52 -07:00
floppy.h
fpregdef.h MIPS: Always use -Wa,-msoft-float and eliminate GAS_HAS_SET_HARDFLOAT 2023-01-26 12:41:16 +09:00
fpu.h MIPS: Implement ieee754 NAN2008 emulation mode 2024-07-12 13:09:25 +02:00
fpu_emulator.h
ftrace.h arch: add missing prepare_ftrace_return() prototypes 2023-11-23 11:32:32 +01:00
futex.h MIPS: remove asm/war.h 2022-02-22 09:35:49 +01:00
ginvt.h MIPS: Avoid macro redefinitions 2021-09-23 11:23:35 +02:00
gio_device.h
gt64120.h
hardirq.h
hazards.h MIPS: Remove NETLOGIC support 2021-10-24 17:24:47 +02:00
highmem.h MIPS: Fix PKMAP with 32-bit MIPS huge page support 2021-06-30 14:41:32 +02:00
hpet.h
hugetlb.h mm: consolidate common checks in hugetlb_get_unmapped_area 2024-11-06 20:11:10 -08:00
hw_irq.h
i8259.h
idle.h MIPS: idle: Add prototype for function check_wait 2020-09-27 13:00:45 +02:00
inst.h MIPS: Make definitions of MIPSInst_FMA_{FUNC,FMTM} consistent with MIPS64 manual 2021-01-22 11:45:52 +01:00
io.h asm-generic: provide generic page_to_phys and phys_to_page implementations 2024-10-28 21:44:28 +00:00
irq.h nmi_backtrace: allow excluding an arbitrary CPU 2023-08-18 10:19:00 -07:00
irq_cpu.h MIPS: Kill RM7K & RM9K IRQ Code 2021-01-04 11:37:27 +01:00
irq_gt641xx.h
irq_regs.h
irqflags.h mips: Implement arch_irqs_disabled() 2020-08-26 12:41:55 +02:00
isa-rev.h
isadep.h MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
jazz.h
jazzdma.h MIPS/jazzdma: remove the unused vdma_remap function 2020-09-11 08:13:49 +02:00
jump_label.h work around gcc bugs with 'asm goto' with outputs 2024-02-09 15:57:48 -08:00
kdebug.h
kexec.h mips, kexec: fix the incorrect ifdeffery and dependency of CONFIG_KEXEC 2023-12-12 17:20:18 -08:00
kgdb.h mips: kgdb: adjust the comment to the actual ifdef condition 2021-12-16 15:47:58 +01:00
kprobes.h kprobes: unify kprobes_exceptions_nofify() prototypes 2023-11-10 19:59:05 +09:00
kvm_host.h KVM: MIPS: Rename virtualization {en,dis}abling APIs to match common KVM 2024-09-04 11:02:33 -04:00
kvm_types.h
linkage.h
local.h locking/local, arch: Rewrite local_add_unless() as a static inline function 2023-10-04 11:38:11 +02:00
maar.h
machine.h treewide: Convert macro and uses of __section(foo) to __section("foo") 2020-10-25 14:51:49 -07:00
mc146818-time.h
mc146818rtc.h
mips-cm.h MIPS: Allow using more than 32-bit addresses for reset vectors when possible 2024-10-30 23:45:48 +01:00
mips-cpc.h MIPS: Fix typos 2024-01-08 10:39:12 +01:00
mips-cps.h MIPS: CPS: Add a couple of multi-cluster utility functions 2024-07-09 10:48:17 +02:00
mips-gic.h MIPS: GIC: Generate redirect block accessors 2024-07-09 10:48:28 +02:00
mips-r2-to-r6-emul.h
mips_mt.h MIPS: MT: Remove unused function mips_mt_regdump() 2024-08-29 10:41:36 +02:00
mipsmtregs.h MIPS: mipsmtregs: Fix target register for MFTC0 2024-06-21 10:16:15 +02:00
mipsprom.h
mipsregs.h MIPS: kernel: Rename read/write_c0_ecc to read/writec0_errctl 2025-01-11 12:31:21 +01:00
mmiowb.h mips: add <asm-generic/io.h> including 2023-11-23 10:32:52 +01:00
mmu.h
mmu_context.h mips: use asm-generic/mmu_context.h for no-op implementations 2020-10-27 16:02:36 +01:00
mmzone.h mips: fix setup_zero_pages() prototype 2023-12-10 17:21:40 -08:00
module.h
msa.h MIPS: Avoid macro redefinitions 2021-09-23 11:23:35 +02:00
msc01_ic.h
paccess.h
page.h vdso: Introduce vdso/page.h 2024-10-16 00:13:04 +02:00
pci.h MIPS: Fix typos 2024-01-08 10:39:12 +01:00
perf_event.h
pgalloc.h asm-generic: pgalloc: provide generic __pgd_{alloc,free} 2025-01-25 20:22:24 -08:00
pgtable-32.h mm/treewide: remove pXd_huge() 2024-04-25 20:55:47 -07:00
pgtable-64.h mm: define general function pXd_init() 2024-11-11 17:22:27 -08:00
pgtable-bits.h MIPS: Fix typos 2024-01-08 10:39:12 +01:00
pgtable.h mm: implement update_mmu_tlb() using update_mmu_tlb_range() 2024-07-03 19:29:57 -07:00
pm-cps.h
pm.h MIPS: asm/pm.h: Use platform agnostic macros 2024-06-11 13:03:37 +02:00
prefetch.h
processor.h mips: add missing declarations 2023-12-10 17:21:41 -08:00
prom.h MIPS: Fix wrong comments in asm/prom.h 2022-03-14 15:09:27 +01:00
ptrace.h MIPS: Export syscall stack arguments properly for remote use 2025-02-13 12:41:18 +01:00
r4k-timer.h MIPS: sync-r4k: Rework based on x86 tsc_sync 2024-07-03 16:50:12 +02:00
r4kcache.h mips: move cache declarations into header 2023-12-10 17:21:41 -08:00
reboot.h
reg.h
regdef.h MIPS: regdefs.h: Define a set of register numbers 2024-02-20 12:41:51 +01:00
rtlx.h MIPS: Remove deprecated CONFIG_MIPS_CMP 2023-04-12 15:01:09 +02:00
seccomp.h
setup.h MIPS: Add prototypes for plat_post_relocation() and relocate_kernel() 2024-04-15 10:22:45 +02:00
sgialib.h
sgiarcs.h
shmparam.h
sigcontext.h
signal.h mips: add missing declarations 2023-12-10 17:21:41 -08:00
sim.h
smp-cps.h MIPS: Allows relocation exception vectors everywhere 2024-02-20 12:44:59 +01:00
smp-ops.h asm-generic cleanups for 6.8 2024-01-10 18:13:44 -08:00
smp.h MIPS: Loongson64: Switch to SYNC_R4K 2024-07-23 09:29:49 +02:00
sni.h MIPS: remove orphan sni_cpu_time_init() declaration 2022-09-19 16:36:55 +02:00
socket.h
sparsemem.h
spinlock.h locking/arch: Move qrwlock.h include after qspinlock.h 2021-02-11 07:59:54 -05:00
spinlock_types.h
spram.h mips: spram: fix missing prototype warning for spram_config 2023-12-10 17:21:41 -08:00
stackframe.h MIPS: Take in account load hazards for HI/LO restoring 2024-05-03 14:22:38 +02:00
stackprotector.h stackprotector: actually use get_random_canary() 2022-11-18 02:18:10 +01:00
stacktrace.h
string.h
switch_to.h mips: asm: fix warning when disabling MIPS_FP_SUPPORT 2024-10-30 23:45:28 +01:00
sync.h MIPS: Fix typos 2024-01-08 10:39:12 +01:00
syscall.h MIPS: fix mips_get_syscall_arg() for o32 2025-02-13 12:41:29 +01:00
syscalls.h mips: add asm/syscalls.h header 2023-12-10 17:21:38 -08:00
thread_info.h MIPS: Fix typos 2024-01-08 10:39:12 +01:00
time.h
timex.h MIPS: Fix typos 2024-01-08 10:39:12 +01:00
tlb.h
tlbdebug.h
tlbex.h mips: move build_tlb_refill_handler() prototype 2023-12-10 17:21:39 -08:00
tlbflush.h
tlbmisc.h
topology.h
traps.h asm-generic cleanups for 6.8 2024-01-10 18:13:44 -08:00
txx9irq.h MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
txx9pio.h
txx9tmr.h MIPS: Remove TX39XX support 2022-03-01 10:07:22 +01:00
types.h mips: Remove #include <uapi/asm/types.h> from <asm/types.h> 2020-11-11 23:45:46 +01:00
uaccess.h uaccess: generalize access_ok() 2022-02-25 09:36:05 +01:00
uasm.h mips: unhide uasm_in_compat_space_p() declaration 2023-12-10 17:21:40 -08:00
unaligned-emul.h MIPS: Fix build error due to PTR used in more places 2022-01-27 09:04:19 +01:00
unistd.h clone3: drop __ARCH_WANT_SYS_CLONE3 macro 2024-07-10 14:23:38 +02:00
unroll.h treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
uprobes.h
vdso.h MIPS: vdso: Use generic union vdso_data_store 2024-02-20 20:56:01 +01:00
vermagic.h MIPS: Remove VR41xx support 2022-07-14 11:52:29 +02:00
vga.h asm/vga.h: don't bother with scr_mem{cpy,move}v() unless we need to 2024-11-11 21:51:42 +01:00
video.h arch: Rename fbdev header and source files 2024-05-03 17:07:50 +02:00
vmalloc.h
vpe.h MIPS: Remove deprecated CONFIG_MIPS_CMP 2023-04-12 15:01:09 +02:00
watch.h
wbflush.h
yamon-dt.h