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
9p
adfs
affs
afs
autofs
befs
bfs
btrfs
cachefiles
ceph
cifs
coda
configfs
cramfs
crypto
debugfs
devpts
dlm
ecryptfs
efivarfs
efs
erofs
exfat
exportfs
ext2
ext4
f2fs
fat
freevxfs
fscache
fuse
gfs2
hfs
hfsplus
hostfs
hpfs
hugetlbfs
iomap
isofs
jbd2
jffs2
jfs
kernfs
lockd
minix
nfs
nfs_common
nfsd
nilfs2
nls
notify
ntfs
ocfs2
omfs
openpromfs
orangefs
overlayfs
proc
pstore
qnx4
qnx6
quota
ramfs
reiserfs
romfs
squashfs
sysfs
sysv
tracefs
ubifs
udf
ufs
unicode
vboxsf
verity
xfs
zonefs
Kconfig -rw-r--r-- 8.6 KB
Kconfig.binfmt -rw-r--r-- 7.6 KB
Makefile -rw-r--r-- 4.4 KB
aio.c -rw-r--r-- 56.4 KB
anon_inodes.c -rw-r--r-- 6.8 KB
attr.c -rw-r--r-- 13.1 KB
bad_inode.c -rw-r--r-- 5.8 KB
binfmt_aout.c -rw-r--r-- 8.3 KB
binfmt_elf.c -rw-r--r-- 60.5 KB
binfmt_elf_fdpic.c -rw-r--r-- 43.7 KB
binfmt_em86.c -rw-r--r-- 2.7 KB
binfmt_flat.c -rw-r--r-- 28.3 KB
binfmt_misc.c -rw-r--r-- 17.4 KB
binfmt_script.c -rw-r--r-- 4.2 KB
block_dev.c -rw-r--r-- 48.0 KB
buffer.c -rw-r--r-- 89.1 KB
char_dev.c -rw-r--r-- 16.5 KB
compat_binfmt_elf.c -rw-r--r-- 3.7 KB
coredump.c -rw-r--r-- 27.9 KB
d_path.c -rw-r--r-- 11.4 KB
dax.c -rw-r--r-- 46.4 KB
dcache.c -rw-r--r-- 85.3 KB
direct-io.c -rw-r--r-- 39.6 KB
drop_caches.c -rw-r--r-- 1.8 KB
eventfd.c -rw-r--r-- 12.1 KB
eventpoll.c -rw-r--r-- 63.8 KB
exec.c -rw-r--r-- 49.4 KB
fcntl.c -rw-r--r-- 23.7 KB
fhandle.c -rw-r--r-- 6.8 KB
file.c -rw-r--r-- 28.9 KB
file_table.c -rw-r--r-- 10.2 KB
filesystems.c -rw-r--r-- 6.4 KB
fs-writeback.c -rw-r--r-- 76.0 KB
fs_context.c -rw-r--r-- 17.2 KB
fs_parser.c -rw-r--r-- 10.1 KB
fs_pin.c -rw-r--r-- 1.9 KB
fs_struct.c -rw-r--r-- 3.4 KB
fs_types.c -rw-r--r-- 2.5 KB
fsopen.c -rw-r--r-- 11.0 KB
init.c -rw-r--r-- 6.1 KB
inode.c -rw-r--r-- 64.3 KB
internal.h -rw-r--r-- 5.4 KB
io-wq.c -rw-r--r-- 26.1 KB
io-wq.h -rw-r--r-- 3.4 KB
io_uring.c -rw-r--r-- 238.1 KB
ioctl.c -rw-r--r-- 20.9 KB
kernel_read_file.c -rw-r--r-- 4.4 KB
libfs.c -rw-r--r-- 39.6 KB
locks.c -rw-r--r-- 80.0 KB
mbcache.c -rw-r--r-- 12.0 KB
mount.h -rw-r--r-- 4.0 KB
mpage.c -rw-r--r-- 20.5 KB
namei.c -rw-r--r-- 131.3 KB
namespace.c -rw-r--r-- 107.8 KB
no-block.c -rw-r--r-- 478 bytes
nsfs.c -rw-r--r-- 6.6 KB
open.c -rw-r--r-- 33.9 KB
pipe.c -rw-r--r-- 33.8 KB
pnode.c -rw-r--r-- 15.1 KB
pnode.h -rw-r--r-- 2.0 KB
posix_acl.c -rw-r--r-- 23.4 KB
proc_namespace.c -rw-r--r-- 8.1 KB
read_write.c -rw-r--r-- 39.4 KB
readdir.c -rw-r--r-- 13.7 KB
remap_range.c -rw-r--r-- 14.0 KB
select.c -rw-r--r-- 34.7 KB
seq_file.c -rw-r--r-- 24.7 KB
signalfd.c -rw-r--r-- 9.0 KB
splice.c -rw-r--r-- 38.8 KB
stack.c -rw-r--r-- 2.5 KB
stat.c -rw-r--r-- 20.4 KB
statfs.c -rw-r--r-- 9.7 KB
super.c -rw-r--r-- 45.2 KB
sync.c -rw-r--r-- 10.5 KB
timerfd.c -rw-r--r-- 13.6 KB
userfaultfd.c -rw-r--r-- 52.0 KB
utimes.c -rw-r--r-- 7.6 KB
xattr.c -rw-r--r-- 27.3 KB

back to top