Revision 61bf318eac2c13356f7bd1c6a05421ef504ccc8a authored by Sergei Trofimovich on 13 March 2021, 05:08:27 UTC, committed by Linus Torvalds on 13 March 2021, 19:27:31 UTC
In https://bugs.gentoo.org/769614 Dmitry noticed that
`ptrace(PTRACE_GET_SYSCALL_INFO)` does not return error sign properly.

The bug is in mismatch between get/set errors:

static inline long syscall_get_error(struct task_struct *task,
                                     struct pt_regs *regs)
{
        return regs->r10 == -1 ? regs->r8:0;
}

static inline long syscall_get_return_value(struct task_struct *task,
                                            struct pt_regs *regs)
{
        return regs->r8;
}

static inline void syscall_set_return_value(struct task_struct *task,
                                            struct pt_regs *regs,
                                            int error, long val)
{
        if (error) {
                /* error < 0, but ia64 uses > 0 return value */
                regs->r8 = -error;
                regs->r10 = -1;
        } else {
                regs->r8 = val;
                regs->r10 = 0;
        }
}

Tested on v5.10 on rx3600 machine (ia64 9040 CPU).

Link: https://lkml.kernel.org/r/20210221002554.333076-2-slyfox@gentoo.org
Link: https://bugs.gentoo.org/769614
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Reported-by: Dmitry V. Levin <ldv@altlinux.org>
Reviewed-by: Dmitry V. Levin <ldv@altlinux.org>
Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Cc: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 0ceb1ac
History
File Mode Size
actions
aspeed
bcm
berlin
cirrus
freescale
intel
mediatek
meson
mvebu
nomadik
nuvoton
pxa
qcom
ralink
renesas
samsung
spear
sprd
stm32
sunxi
tegra
ti
uniphier
visconti
vt8500
Kconfig -rw-r--r-- 11.6 KB
Makefile -rw-r--r-- 2.9 KB
core.c -rw-r--r-- 57.2 KB
core.h -rw-r--r-- 8.0 KB
devicetree.c -rw-r--r-- 10.9 KB
devicetree.h -rw-r--r-- 1.1 KB
pinconf-generic.c -rw-r--r-- 12.3 KB
pinconf.c -rw-r--r-- 9.3 KB
pinconf.h -rw-r--r-- 3.3 KB
pinctrl-amd.c -rw-r--r-- 26.6 KB
pinctrl-amd.h -rw-r--r-- 8.5 KB
pinctrl-artpec6.c -rw-r--r-- 25.6 KB
pinctrl-as3722.c -rw-r--r-- 17.2 KB
pinctrl-at91-pio4.c -rw-r--r-- 34.8 KB
pinctrl-at91.c -rw-r--r-- 51.7 KB
pinctrl-at91.h -rw-r--r-- 3.5 KB
pinctrl-axp209.c -rw-r--r-- 12.7 KB
pinctrl-bm1880.c -rw-r--r-- 44.1 KB
pinctrl-da850-pupd.c -rw-r--r-- 4.8 KB
pinctrl-da9062.c -rw-r--r-- 7.8 KB
pinctrl-digicolor.c -rw-r--r-- 8.4 KB
pinctrl-equilibrium.c -rw-r--r-- 22.9 KB
pinctrl-equilibrium.h -rw-r--r-- 4.5 KB
pinctrl-falcon.c -rw-r--r-- 14.5 KB
pinctrl-gemini.c -rw-r--r-- 77.1 KB
pinctrl-ingenic.c -rw-r--r-- 98.3 KB
pinctrl-k210.c -rw-r--r-- 25.8 KB
pinctrl-lantiq.c -rw-r--r-- 8.6 KB
pinctrl-lantiq.h -rw-r--r-- 3.4 KB
pinctrl-lpc18xx.c -rw-r--r-- 42.0 KB
pinctrl-max77620.c -rw-r--r-- 17.9 KB
pinctrl-mcp23s08.c -rw-r--r-- 16.9 KB
pinctrl-mcp23s08.h -rw-r--r-- 1.1 KB
pinctrl-mcp23s08_i2c.c -rw-r--r-- 2.6 KB
pinctrl-mcp23s08_spi.c -rw-r--r-- 6.1 KB
pinctrl-microchip-sgpio.c -rw-r--r-- 22.3 KB
pinctrl-ocelot.c -rw-r--r-- 34.6 KB
pinctrl-oxnas.c -rw-r--r-- 35.7 KB
pinctrl-palmas.c -rw-r--r-- 32.6 KB
pinctrl-pic32.c -rw-r--r-- 80.9 KB
pinctrl-pic32.h -rw-r--r-- 2.6 KB
pinctrl-pistachio.c -rw-r--r-- 40.7 KB
pinctrl-rk805.c -rw-r--r-- 12.2 KB
pinctrl-rockchip.c -rw-r--r-- 102.6 KB
pinctrl-single.c -rw-r--r-- 48.3 KB
pinctrl-st.c -rw-r--r-- 47.5 KB
pinctrl-stmfx.c -rw-r--r-- 22.5 KB
pinctrl-sx150x.c -rw-r--r-- 29.1 KB
pinctrl-tb10x.c -rw-r--r-- 26.2 KB
pinctrl-utils.c -rw-r--r-- 3.7 KB
pinctrl-utils.h -rw-r--r-- 1.7 KB
pinctrl-xway.c -rw-r--r-- 65.5 KB
pinctrl-zynq.c -rw-r--r-- 42.0 KB
pinmux.c -rw-r--r-- 21.3 KB
pinmux.h -rw-r--r-- 4.2 KB

back to top