]> granicus.if.org Git - strace/log
strace
5 years agoutimes.c: introduce do_utimensat
Dmitry V. Levin [Sat, 4 May 2019 23:15:52 +0000 (23:15 +0000)]
utimes.c: introduce do_utimensat

This is going to be used to implement a parser of utimensat_time64
syscall.

* utimes.c (do_utimensat): New function.
(SYS_FUNC(utimensat)): Turn into a thin wrapper around do_utimensat.

5 years agosignal.c: introduce do_rt_sigtimedwait
Dmitry V. Levin [Sat, 4 May 2019 23:15:52 +0000 (23:15 +0000)]
signal.c: introduce do_rt_sigtimedwait

This is going to be used to implement a parser of rt_sigtimedwait_time64
syscall.

* signal.c (do_rt_sigtimedwait): New function.
(SYS_FUNC(rt_sigtimedwait)): Turn into a thin wrapper around
do_rt_sigtimedwait.

5 years agosched.c: introduce do_sched_rr_get_interval
Dmitry V. Levin [Sat, 4 May 2019 23:15:52 +0000 (23:15 +0000)]
sched.c: introduce do_sched_rr_get_interval

This is going to be used to implement a parser of
sched_rr_get_interval_time64 syscall.

* sched.c (do_sched_rr_get_interval): New function.
(SYS_FUNC(sched_rr_get_interval)): Turn into a thin wrapper around
do_sched_rr_get_interval.

5 years agopoll.c: introduce do_ppoll
Dmitry V. Levin [Sat, 4 May 2019 23:15:52 +0000 (23:15 +0000)]
poll.c: introduce do_ppoll

This is going to be used to implement a parser of ppoll_time64 syscall.

* poll.c (decode_poll_exiting): Add sprint_ts argument.
(SYS_FUNC(poll)): Pass sprint_timespec to decode_poll_exiting.
(do_ppoll): New function.
(SYS_FUNC(ppoll)): Turn into a thin wrapper around do_ppoll.

5 years agomq.c: introduce do_mq_timedsend and do_mq_timedreceive
Dmitry V. Levin [Sat, 4 May 2019 23:15:52 +0000 (23:15 +0000)]
mq.c: introduce do_mq_timedsend and do_mq_timedreceive

These are going to be used to implement parsers of mq_timedsend_time64
and mq_timedreceive_time64 syscalls.

* mq.c (do_mq_timedsend, do_mq_timedreceive): New functions.
(SYS_FUNC(mq_timedsend)): Turn into a thin wrapper around
do_mq_timedsend.
(SYS_FUNC(mq_timedreceive)): Turn into a thin wrapper around
do_mq_timedreceive.

5 years agommsghdr.c: introduce do_recvmmsg
Dmitry V. Levin [Sat, 4 May 2019 23:15:52 +0000 (23:15 +0000)]
mmsghdr.c: introduce do_recvmmsg

This is going to be used to implement a parser of recvmmsg_time64
syscall.

* mmsghdr.c (do_recvmmsg): New function.
(SYS_FUNC(recvmmsg)): Turn into a thin wrapper around do_recvmmsg.

5 years agoipc_sem.c: introduce do_semtimedop
Dmitry V. Levin [Sat, 4 May 2019 23:15:52 +0000 (23:15 +0000)]
ipc_sem.c: introduce do_semtimedop

This is going to be used to implement a parser of semtimedop_time64
syscall.

* ipc_sem.c (do_semtimedop): New function.
(SYS_FUNC(semtimedop)): Turn into a thin wrapper around do_semtimedop.

5 years agofutex.c: introduce do_futex
Dmitry V. Levin [Sat, 4 May 2019 23:15:52 +0000 (23:15 +0000)]
futex.c: introduce do_futex

This is going to be used to implement a parser of futex_time64 syscall.

* futex.c (do_futex): New function.
(SYS_FUNC(futex)): Turn into a thin wrapper around do_futex.

5 years agodesc.c: introduce do_pselect6
Dmitry V. Levin [Sat, 4 May 2019 23:15:52 +0000 (23:15 +0000)]
desc.c: introduce do_pselect6

This is going to be used to implement a parser of pselect6_time64
syscall.

* dec.c (do_pselect6): New function.
(SYS_FUNC(pselect6)): Turn into a thin wrapper around do_pselect6.

5 years agoprint_io_getevents: parametrize print_timespec
Dmitry V. Levin [Sat, 4 May 2019 23:15:52 +0000 (23:15 +0000)]
print_io_getevents: parametrize print_timespec

This is going to be used to implement a parser of io_pgetevents_time64
syscall.

* aio.c (print_io_getevents): Add print_ts argument, invoke it
instead of print_timespec.
(SYS_FUNC(io_getevents), SYS_FUNC(io_pgetevents)): Pass print_timespec
to print_io_getevents.

5 years agoIntroduce print_obj_by_addr_fn and sprint_obj_by_addr_fn
Dmitry V. Levin [Sat, 4 May 2019 23:15:52 +0000 (23:15 +0000)]
Introduce print_obj_by_addr_fn and sprint_obj_by_addr_fn

These types are going to be used in signatures of functions that take
print_*time* functions as parameters.

* defs.h (print_obj_by_addr_fn, sprint_obj_by_addr_fn): New types.
* desc.c (decode_select): Use them.

5 years agoChange signatures of print_*time* functions to match print_timex
Dmitry V. Levin [Sat, 4 May 2019 23:15:52 +0000 (23:15 +0000)]
Change signatures of print_*time* functions to match print_timex

Make all these functions that print time by address return -1 when
umove_or_printaddr() returns non-zero.

This helps to use these functions as parameters to other functions.

* defs.h [ALPHA] (print_timeval32, print_timeval32_utimes,
print_itimerval32): Change return type to int.
* desc.c (decode_select): Change return type of print_tv_ts to int.
* print_timespec.c (print_timespec, print_timespec_utime_pair,
print_itimerspec): Change return type to int, return -1 when
umove_or_printaddr() returns non-zero.
* print_timeval.c (print_timeval, print_timeval_utimes,
print_itimerval): Likewise.
[ALPHA] (print_timeval32, print_timeval32_utimes, print_itimerval32):
Likewise.

5 years agotests: robustify umount and umount2 tests against future kernel changes
Dmitry V. Levin [Tue, 16 Apr 2019 00:27:42 +0000 (00:27 +0000)]
tests: robustify umount and umount2 tests against future kernel changes

Prepare for the rename of umount syscall to umount2 introduced by linux
kernel commits v5.1-rc1~160^2~3^2~12 and v5.1-rc1~160^2~3^2~16 on alpha
and ia64 architectures, respectively.

* tests/umount.c: Check for __NR_umount == __NR_umount2.
* tests/umount2.c: Likewise.

5 years agoalpha: wire up getegid, geteuid, and getppid syscalls
Dmitry V. Levin [Mon, 15 Apr 2019 00:39:53 +0000 (00:39 +0000)]
alpha: wire up getegid, geteuid, and getppid syscalls

* linux/alpha/syscallent.h [530..532]: Wire up getegid, geteuid,
and getppid syscalls introduced on this architecture by linux commit
v5.1-rc1~160^2~3^2~1.
* NEWS: Mention this.

5 years agoalpha: wire up statfs64 and fstatfs64 syscalls
Dmitry V. Levin [Mon, 15 Apr 2019 00:39:53 +0000 (00:39 +0000)]
alpha: wire up statfs64 and fstatfs64 syscalls

* linux/alpha/syscallent.h [528..529]: Wire up statfs64 and fstatfs64
syscalls introduced on this architecture by linux commit
v5.1-rc1~160^2~3^2~2.
* NEWS: Mention this.

5 years agoWire up pkey_* and rseq syscalls on remaining architectures
Dmitry V. Levin [Mon, 15 Apr 2019 00:39:53 +0000 (00:39 +0000)]
Wire up pkey_* and rseq syscalls on remaining architectures

* linux/alpha/syscallent.h [524..527]: Wire up pkey_mprotect,
pkey_alloc, pkey_free, and rseq syscalls introduced on this architecture
by linux commit v5.1-rc1~160^2~3^2~3.
* linux/hppa/syscallent.h [351..354]: Likewise.
* linux/ia64/syscallent.h [1024 + 330..333]: Likewise.
* linux/m68k/syscallent.h [381..384]: Likewise.
* linux/sh/syscallent.h [384..387]: Likewise.
* linux/sparc/syscallent.h [362..365]: Likewise.
* linux/sparc64/syscallent.h: Likewise.
* linux/s390/syscallent.h [384..386]: Wire up pkey_mprotect,
pkey_alloc, and pkey_free syscalls introduced on this architecture
by linux commit v5.1-rc1~160^2~3^2~3.
* linux/s390x/syscallent.h: Likewise.
* linux/xtensa/syscallent.h [352]: Wire up rseq syscall introduced
on this architecture by linux commit v5.1-rc1~160^2~3^2~3.
* NEWS: Mention this.

5 years agoWire up direct ipc syscalls on m68k, mips, powerpc*, s390*, sh, sparc*, x86
Dmitry V. Levin [Mon, 15 Apr 2019 00:39:53 +0000 (00:39 +0000)]
Wire up direct ipc syscalls on m68k, mips, powerpc*, s390*, sh, sparc*, x86

* linux/i386/syscallent.h [393..402]: Wire up semget, semctl, shmget,
shmctl, shmat, shmdt, msgget, msgsnd, msgrcv, and msgctl syscalls
introduced on this architecture by linux commit v5.1-rc1~160^2~3^2~4.
* linux/m68k/syscallent.h: Likewise.
* linux/powerpc/syscallent.h: Likewise.
* linux/s390/syscallent.h: Likewise.
* linux/sh/syscallent.h: Likewise.
* linux/sparc/syscallent.h: Likewise.
* linux/mips/syscallent-o32.h [4393..4402]: Wire up semget, semctl,
shmget, shmctl, shmat, shmdt, msgget, msgsnd, msgrcv, and msgctl syscalls
introduced on this architecture by linux commit v5.1-rc1~160^2~3^2~4.
* linux/powerpc64/syscallent.h [392..402]: Wire up semtimedop, semget,
semctl, shmget, shmctl, shmat, shmdt, msgget, msgsnd, msgrcv, and msgctl
syscalls introduced on this architecture by linux commit
v5.1-rc1~160^2~3^2~4.
* linux/s390x/syscallent.h: Likewise.
* linux/sparc64/syscallent.h: Likewise.
* NEWS: Mention this.

5 years agopowerpc, powerpc64: remove direct ipc syscall entries
Dmitry V. Levin [Mon, 15 Apr 2019 00:39:53 +0000 (00:39 +0000)]
powerpc, powerpc64: remove direct ipc syscall entries

* linux/powerpc/syscallent.h [366..377]: Remove entries reserved for
direct ipc syscalls, they were added by linux kernel commit
v4.4-rc1~98^2~32 and removed by linux kernel commit v4.4-rc6~5^2~2.
* linux/powerpc64/syscallent.h: Likewise.

5 years agosh: wire up statx syscall
Dmitry V. Levin [Mon, 15 Apr 2019 00:39:53 +0000 (00:39 +0000)]
sh: wire up statx syscall

* linux/sh/syscallent.h [380]: Wire up statx syscall
introduced on sh by linux commit v5.1-rc1~160^2~3^2~7.
* NEWS: Mention this.

5 years agom68k: wire up seccomp syscall
Dmitry V. Levin [Mon, 15 Apr 2019 00:39:53 +0000 (00:39 +0000)]
m68k: wire up seccomp syscall

* linux/m68k/syscallent.h [380]: Wire up seccomp syscall
introduced on m68k by linux commit v5.1-rc1~160^2~3^2~9.
* NEWS: Mention this.

5 years agoarm: wire up kexec_file_load syscall
Dmitry V. Levin [Mon, 15 Apr 2019 00:39:53 +0000 (00:39 +0000)]
arm: wire up kexec_file_load syscall

* linux/arm/syscallent.h [401]: Wire up kexec_file_load syscall
introduced on arm by linux commit v5.1-rc1~160^2~3^2~10.
* NEWS: Mention this.

5 years agoarm: wire up migrate_pages syscall
Dmitry V. Levin [Mon, 15 Apr 2019 00:39:53 +0000 (00:39 +0000)]
arm: wire up migrate_pages syscall

* linux/arm/syscallent.h [400]: Wire up migrate_pages syscall
introduced on arm by linux commit v5.1-rc1~160^2~3^2~11.
* NEWS: Mention this.

5 years agoalpha: wire up io_pgetevents syscall
Dmitry V. Levin [Mon, 15 Apr 2019 00:39:53 +0000 (00:39 +0000)]
alpha: wire up io_pgetevents syscall

* linux/alpha/syscallent.h [523]: Wire up io_pgetevents syscall
introduced on alpha by linux commit v5.1-rc1~160^2~3^2~13.
* NEWS: Mention this.

5 years agoia64: wire up perf_event_open and seccomp syscalls
Dmitry V. Levin [Mon, 15 Apr 2019 00:39:53 +0000 (00:39 +0000)]
ia64: wire up perf_event_open and seccomp syscalls

* linux/ia64/syscallent.h [1024 + 327..328]: Wire up perf_event_open
and seccomp syscalls introduced on ia64 by linux commit
v5.1-rc1~160^2~3^2~14.
* NEWS: Mention this.

5 years agoia64: wire up statx and io_pgetevents syscalls
Dmitry V. Levin [Mon, 15 Apr 2019 00:39:53 +0000 (00:39 +0000)]
ia64: wire up statx and io_pgetevents syscalls

* linux/ia64/syscallent.h [1024 + 326..327]: Wire up statx and
io_pgetevents syscalls introduced on ia64 by linux commit
v5.1-rc1~160^2~3^2~15.
* NEWS: Mention this.

5 years agoia64: make syscall entry table numbers more readable
Dmitry V. Levin [Mon, 15 Apr 2019 00:39:53 +0000 (00:39 +0000)]
ia64: make syscall entry table numbers more readable

* linux/ia64/syscallent.h: Format syscall numbers using base+offset form.
* scno.am (SCNO_SED): Update to handle this format.

5 years agoAdd C-SKY architecture support
Guo Ren [Sat, 23 Mar 2019 00:56:14 +0000 (08:56 +0800)]
Add C-SKY architecture support

This is port of C-SKY architecture for strace.  There is a little
difference between abiv1 and abiv2, we use __CSKYABIV2__ from GCC-csky
to distinguish.

Signed-off-by: Guo Ren <ren_guo@c-sky.com>
Reviewed-By: Dmitry V. Levin <ldv@altlinux.org>
* cacheflush.c [CSKY] (cacheflush_flags, SYS_FUNC(cacheflush)): Define.
* clone.c [CSKY] (ARG_*): Define.
* configure.ac [$host_cpu == csky*]: Define CSKY.
* linux/csky/arch_regs.c: New file.
* linux/csky/get_error.c: Likewise.
* linux/csky/get_scno.c: Likewise.
* linux/csky/get_syscall_args.c: Likewise.
* linux/csky/ioctls_arch0.h: Likewise.
* linux/csky/ioctls_inc0.h: Likewise.
* linux/csky/raw_syscall.h: Likewise.
* linux/csky/set_error.c: Likewise.
* linux/csky/set_scno.c: Likewise.
* linux/csky/syscallent.h: Likewise.
* Makefile.am (EXTRA_DIST): Add them.
* NEWS: Mention this change.

5 years agoriscv: Fixup wrong clone's arguments define
Guo Ren [Fri, 22 Mar 2019 08:58:17 +0000 (16:58 +0800)]
riscv: Fixup wrong clone's arguments define

In linux kernel riscv select CLONE_BACKWARDS in
linux/arch/riscv/Kconfig, and in linux/kernel/fork.c:

ifdef CONFIG_CLONE_BACKWARDS
SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp,
 int __user *, parent_tidptr,
 unsigned long, tls,
 int __user *, child_tidptr)
elif ...

So we must make the riscv clone-arguments' sequence to be:
  define ARG_FLAGS 0
  define ARG_STACK 1
  define ARG_PTID 2
  define ARG_TLS 3
  define ARG_CTID 4

Signed-off-by: Guo Ren <ren_guo@c-sky.com>
Reviewed-By: Dmitry V. Levin <ldv@altlinux.org>
* clone.c [RISCV]: Use default definitions for ARG_* macros.
* NEWS: Mention this fix.

5 years agoPost-release administrivia
Dmitry V. Levin [Wed, 20 Mar 2019 23:31:27 +0000 (23:31 +0000)]
Post-release administrivia

* NEWS: Add a header line for the next release.
* debian/changelog.in: Add a changelog entry for 5.0-1.
* strace.spec.in: Likewise.

5 years agoPrepare for 5.0 release v5.0
Dmitry V. Levin [Tue, 19 Mar 2019 03:04:05 +0000 (03:04 +0000)]
Prepare for 5.0 release

* NEWS: Update for 5.0 release.

5 years ago.mailmap: add more entries to avoid duplication in CREDITS
Dmitry V. Levin [Tue, 19 Mar 2019 03:04:05 +0000 (03:04 +0000)]
.mailmap: add more entries to avoid duplication in CREDITS

5 years agostrace.spec.in: do not define Group tag for modern distros
Dmitry V. Levin [Mon, 18 Mar 2019 19:06:47 +0000 (19:06 +0000)]
strace.spec.in: do not define Group tag for modern distros

* strace.spec.in (Group): Conditionalize on distro version.

References: https://fedoraproject.org/wiki/Changes/Remove_Group_Tag

5 years agostrace-log-merge: enhance pid formatting
Dmitry V. Levin [Mon, 18 Mar 2019 19:06:47 +0000 (19:06 +0000)]
strace-log-merge: enhance pid formatting

* strace-log-merge (max_suffix_length): New variable.
(iterate_logfiles, process_suffix, process_logfile): New functions.
Use them to choose the optimum width for pid column.
* NEWS: Mention this enhancement.
* tests/strace-log-merge-suffix.test: New test.
* tests/Makefile.am (MISC_TESTS): Add it.

5 years agostrace-log-merge: fix error diagnostics
Dmitry V. Levin [Mon, 18 Mar 2019 19:06:47 +0000 (19:06 +0000)]
strace-log-merge: fix error diagnostics

* strace-log-merge: Print error diagnostics and exit with a non-zero
status in case of no strace output.
* NEWS: Mention this fix.
* tests/strace-log-merge-error.test: New test.
* tests/Makefile.am (MISC_TESTS): Add it.

Fixes: v4.21~287 "strace-log-merge: work around corner cases of strace -ttt parsing"
5 years agoUpdate NEWS
Eugene Syromyatnikov [Mon, 18 Mar 2019 17:48:37 +0000 (18:48 +0100)]
Update NEWS

5 years agoUpdate copyright year number range
Dmitry V. Levin [Mon, 18 Mar 2019 02:40:16 +0000 (02:40 +0000)]
Update copyright year number range

* COPYING: Update copyright year number range.
* tests/COPYING: Likewise.
* debian/copyright: Likewise.

5 years agoUpdate copyright headers
Dmitry V. Levin [Mon, 18 Mar 2019 02:40:16 +0000 (02:40 +0000)]
Update copyright headers

Headers updated automatically using maint/update_copyright_years.sh
script.

5 years agoFix preprocessor indentation
Dmitry V. Levin [Mon, 18 Mar 2019 02:40:16 +0000 (02:40 +0000)]
Fix preprocessor indentation

Indent the C preprocessor directives to reflect their nesting
using the following script:

$ cppi -l $(git grep -El '^[[:space:]]*#[[:space:]]*(if|ifdef|ifndef|elif|else|endif|define|pragma)[[:space:]]' |grep -v '\.sh$') |while read f; do
cppi < "$f" > "$f".cppi; mv "$f".cppi "$f"
done

5 years agoHonor xlat styles when decoding mac addresses
Shankara Pailoor [Sun, 13 Jan 2019 23:34:04 +0000 (15:34 -0800)]
Honor xlat styles when decoding mac addresses

* defs.h (print_mac_addr): Add xlat_style support, move ...
* print_mac.c: ... here.
* tests/sockaddr_xlat.c [HAVE_BLUETOOTH_BLUETOOTH_H]: Include
<bluetooth/bluetooth.h>, <bluetooth/hci.h>, <bluetooth/l2cap.h>
<bluetooth/rfcomm.h>, and <bluetooth/sco.h>.
[HAVE_BLUETOOTH_BLUETOOTH_H] (check_sco, check_rc): New functions.
(main) [HAVE_BLUETOOTH_BLUETOOTH_H]: Call them to verify
new xlat_style support in print_mac_addr().
* tests/net-packet_mreq.c: Handle XLAT_RAW, XLAT_ABBREV,
and XLAT_VERBOSE macros.
* tests/net-packet_mreq-Xabbrev.c: New test.
* tests/net-packet_mreq-Xraw.c: Likewise.
* tests/net-packet_mreq-Xverbose.c: Likewise.
* tests/gen_tests.in (net-packet_mreq-Xabbrev, net-packet_mreq-Xraw,
net-packet_mreq-Xverbose): New tests.
* tests/pure_executables.list: Add net-packet_mreq-Xabbrev,
net-packet_mreq-Xraw, and et-packet_mreq-Xverbose.
* tests/.gitignore: Likewise.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agonet: print mac address consistently
Shankara Pailoor [Sun, 13 Jan 2019 23:34:04 +0000 (15:34 -0800)]
net: print mac address consistently

* net.c (print_packet_mreq): Call PRINT_FIELD_MAC_SZ instead of custom
print.
* tests/net-packet_mreq.c (test_packet_mreq): Update expected output.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agoChange -D option to imply -I4
Dmitry V. Levin [Sun, 17 Mar 2019 14:36:56 +0000 (14:36 +0000)]
Change -D option to imply -I4

* strace.c (init) [daemonized_tracer && !opt_intr]: Set opt_intr
to INTR_BLOCK_TSTP_TOO.
* strace.1.in: Document this.
* NEWS: Mention this change.

Resolves: https://github.com/strace/strace/issues/96

5 years agos390: fix SIGNAL_FRAMESIZE macro
Tuan Hoang [Thu, 14 Mar 2019 09:18:22 +0000 (10:18 +0100)]
s390: fix SIGNAL_FRAMESIZE macro

Since __SIGNAL_FRAMESIZE is in private name space, it is better not to
use it directly. This macro has been stable on s390/s390x so it is safe
to use the integer value.

* linux/s390/arch_sigreturn.c [!SIGNAL_FRAMESIZE] (SIGNAL_FRAMESIZE):
Define to 96.
* linux/s390x/arch_sigreturn.c (arch_sigreturn == s390_arch_sigreturn):
Remove S390_SIGNAL_FRAMESIZE and SIGNAL_FRAMESIZE.
(arch_sigreturn == s390x_arch_sigreturn): Define SIGNAL_FRAMESIZE.
* linux/s390/rt_sigframe.h (SIGNAL_FRAMESIZE): Define.
(struct_rt_sigframe): Replace __SIGNAL_FRAMESIZE with SIGNAL_FRAMESIZE.

Signed-off-by: Tuan Hoang <tmhoang@linux.ibm.com>
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agobpf: add support for new seven fields in BPF_PROG_LOAD
Dmitry V. Levin [Thu, 14 Mar 2019 01:57:38 +0000 (01:57 +0000)]
bpf: add support for new seven fields in BPF_PROG_LOAD

* bpf_attr.h (struct BPF_PROG_LOAD_struct): Add prog_btf_fd,
func_info_rec_size, func_info, func_info_cnt, line_info_rec_size,
line_info, and line_info_cnt fields.
* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_PROG_LOAD)): Decode these fields
introduced by Linux commits v5.0-rc1~129^2~209^2~16^2~8 and
v5.0-rc1~129^2~114^2~5^2~6.
* tests/bpf.c (BPF_PROG_LOAD_checks): Check it.
* tests/kernel_version.c (print_bpf_attr): Update expected output.
* tests/bpf-obj_get_info_by_fd.c (print_prog_load): Likewise.

5 years agobpf: implement decoding of BPF_TASK_FD_QUERY command
Dmitry V. Levin [Wed, 13 Mar 2019 18:38:51 +0000 (18:38 +0000)]
bpf: implement decoding of BPF_TASK_FD_QUERY command

BPF_TASK_FD_QUERY command was introduced by Linux commit
v4.18-rc1~114^2~148^2~1^2~5.

* bpf_attr.h (struct BPF_TASK_FD_QUERY_struct): New type.
(BPF_TASK_FD_QUERY_struct_size,
expected_BPF_TASK_FD_QUERY_struct_size): New macros.
* bpf.c: Include "xlat/bpf_task_fd_type.h".
(BEGIN_BPF_CMD_DECODER(BPF_TASK_FD_QUERY)): New bpf command decoder.
(SYS_FUNC(bpf)) <bpf_cmd_decoders[]>: Add
BPF_CMD_ENTRY(BPF_TASK_FD_QUERY).
* xlat/bpf_task_fd_type.in: New file.
* tests/bpf.c (union bpf_attr_data): Add
BPF_ATTR_DATA_FIELD(BPF_TASK_FD_QUERY).
(BPF_TASK_FD_QUERY_checks): New checks array.
(main) <checks>: Add CHK(BPF_TASK_FD_QUERY).

5 years agobpf: implement decoding of BPF_MAP_LOOKUP_AND_DELETE_ELEM command
Dmitry V. Levin [Wed, 13 Mar 2019 18:38:51 +0000 (18:38 +0000)]
bpf: implement decoding of BPF_MAP_LOOKUP_AND_DELETE_ELEM command

BPF_MAP_LOOKUP_AND_DELETE_ELEM command was introduced by Linux commit
v4.20-rc1~151^2~32^2~11^2~2.

* bpf.c (decode_BPF_MAP_LOOKUP_AND_DELETE_ELEM): Alias
to decode_BPF_MAP_LOOKUP_ELEM.
(SYS_FUNC(bpf)) <bpf_cmd_decoders[]>: Add
BPF_CMD_ENTRY(BPF_MAP_LOOKUP_AND_DELETE_ELEM).
* tests/bpf.c (BPF_MAP_LOOKUP_AND_DELETE_ELEM_checks): Alias
to BPF_MAP_LOOKUP_ELEM_checks.
(main) <checks>: Add CHK(BPF_MAP_LOOKUP_AND_DELETE_ELEM).

5 years agobpf: implement decoding of BPF_BTF_GET_FD_BY_ID command
Dmitry V. Levin [Wed, 13 Mar 2019 18:38:51 +0000 (18:38 +0000)]
bpf: implement decoding of BPF_BTF_GET_FD_BY_ID command

BPF_BTF_GET_FD_BY_ID command was introduced by Linux commit
v4.18-rc1~114^2~223^2~21^2~4.

* bpf_attr.h (struct BPF_BTF_GET_FD_BY_ID_struct): New type.
(BPF_BTF_GET_FD_BY_ID_struct_size,
expected_BPF_BTF_GET_FD_BY_ID_struct_size): New macros.
* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_BTF_GET_FD_BY_ID)): New bpf command
decoder.
(SYS_FUNC(bpf)) <bpf_cmd_decoders[]>: Add
BPF_CMD_ENTRY(BPF_BTF_GET_FD_BY_ID).
* tests/bpf.c (union bpf_attr_data): Add
BPF_ATTR_DATA_FIELD(BPF_BTF_GET_FD_BY_ID).
(BPF_BTF_GET_FD_BY_ID_checks): New checks array.
(main) <checks>: Add CHK(BPF_BTF_GET_FD_BY_ID).

5 years agobpf: implement decoding of BPF_BTF_LOAD command
Dmitry V. Levin [Wed, 13 Mar 2019 18:38:51 +0000 (18:38 +0000)]
bpf: implement decoding of BPF_BTF_LOAD command

BPF_BTF_LOAD command was introduced by Linux commit
v4.18-rc1~114^2~417^2~1^2~5.

* bpf_attr.h (struct BPF_BTF_LOAD_struct): New type.
(BPF_BTF_LOAD_struct_size, expected_BPF_BTF_LOAD_struct_size): New
macros.
* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_BTF_LOAD)): New bpf command decoder.
(SYS_FUNC(bpf)) <bpf_cmd_decoders[]>: Add BPF_CMD_ENTRY(BPF_BTF_LOAD).
* tests/bpf.c (union bpf_attr_data): Add
BPF_ATTR_DATA_FIELD(BPF_BTF_LOAD).
(init_BPF_BTF_LOAD_attr): New function.
(BPF_BTF_LOAD_checks): New checks array.
(main) <checks>: Add CHK(BPF_BTF_LOAD).

5 years agobpf: make decoders of BPF_*_GET_FD_BY_ID commands return RVAL_FD
Dmitry V. Levin [Wed, 13 Mar 2019 18:38:51 +0000 (18:38 +0000)]
bpf: make decoders of BPF_*_GET_FD_BY_ID commands return RVAL_FD

These bpf commands return file descriptors.

* bpf.c (BPF_PROG_GET_FD_BY_ID, BPF_MAP_GET_FD_BY_ID): Add RVAL_FD
to END_BPF_CMD_DECODER.

5 years agobpf: add support for new twelve fields in struct bpf_prog_info
Dmitry V. Levin [Tue, 12 Mar 2019 11:17:20 +0000 (11:17 +0000)]
bpf: add support for new twelve fields in struct bpf_prog_info

* bpf_attr.h (struct bpf_prog_info_struct): Add btf_id,
func_info_rec_size, func_info, nr_func_info, nr_line_info, line_info,
jited_line_info, nr_jited_line_info, line_info_rec_size,
jited_line_info_rec_size, nr_prog_tags, and prog_tags fields.
* bpf.c (struct obj_get_info_saved): Add func_info_rec_size,
nr_func_info, nr_line_info, jited_line_info, nr_jited_line_info,
line_info_rec_size, jited_line_info_rec_size, and nr_prog_tags fields.
(print_bpf_prog_info): Decode the twelve fields introduced by Linux
commits v5.0-rc1~129^2~209^2~16^2~8, v5.0-rc1~129^2~114^2~5^2~6,
v5.0-rc1~129^2~114^2^2~2, and v5.0-rc1~129^2~15^2~22.
* NEWS: Mention the latest bpf decoding enhancements.
* tests/bpf-obj_get_info_by_fd.c (main): Update expected output.

Resolves: https://github.com/strace/strace/issues/94

5 years agobpf: add support for *jited_ksyms and *jited_func_lens fields in struct bpf_prog_info
Dmitry V. Levin [Tue, 12 Mar 2019 11:17:20 +0000 (11:17 +0000)]
bpf: add support for *jited_ksyms and *jited_func_lens fields in struct bpf_prog_info

* bpf_attr.h (struct bpf_prog_info_struct): Add nr_jited_ksyms,
nr_jited_func_lens, jited_ksyms, and jited_func_lens fields.
* bpf.c (struct obj_get_info_saved): Likewise.
(print_bpf_prog_info): Decode these fields introduced by Linux commits
v4.18-rc1~114^2~148^2~3^2~6 and v4.18-rc1~114^2~148^2~3^2~2.
* tests/bpf-obj_get_info_by_fd.c (main): Update expected output.

5 years agobpf: add support for btf_* fields in struct bpf_map_info
Dmitry V. Levin [Tue, 12 Mar 2019 11:17:20 +0000 (11:17 +0000)]
bpf: add support for btf_* fields in struct bpf_map_info

* bpf_attr.h (struct bpf_map_info_struct): Add btf_fd, btf_key_type_id,
and btf_value_type_id fields.
* bpf.c (print_bpf_map_info): Decode btf_fd, btf_key_type_id,
and btf_value_type_id fields introduced by Linux commits
v4.18-rc1~114^2~223^2~21^2~4 and v4.18-rc1~114^2~148^2~7^2~2.
* tests/bpf-obj_get_info_by_fd.c (main): Update expected output.

5 years agobpf: add support for btf_* fields in BPF_MAP_CREATE
Dmitry V. Levin [Tue, 12 Mar 2019 11:17:20 +0000 (11:17 +0000)]
bpf: add support for btf_* fields in BPF_MAP_CREATE

* bpf_attr.h (struct BPF_MAP_CREATE_struct): Add btf_fd,
btf_key_type_id, and btf_value_type_id fields.
* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_MAP_CREATE)): Decode btf_fd,
btf_key_type_id, and btf_value_type_id fields introduced by Linux
commits v4.18-rc1~114^2~417^2~1^2~3 and v4.18-rc1~114^2~148^2~7^2~2.
* tests/bpf.c (BPF_MAP_CREATE_checks): Check it.
* tests/bpf-obj_get_info_by_fd.c (print_map_create): Update expected
output.

5 years agobpf: print struct bpf_prog_info.gpl_compatible
Dmitry V. Levin [Tue, 12 Mar 2019 11:17:20 +0000 (11:17 +0000)]
bpf: print struct bpf_prog_info.gpl_compatible

This bit field was added by Linux commit v4.18-rc1~114^2~376^2~6.

* bpf_attr.h (struct bpf_prog_info_struct): Add gpl_compatible field.
* bpf.c (print_bpf_prog_info): Print gpl_compatible field.
* tests/bpf-obj_get_info_by_fd.c (main): Update expected output.

5 years agobpf: exclude bit fields from the check
Dmitry V. Levin [Tue, 12 Mar 2019 11:17:20 +0000 (11:17 +0000)]
bpf: exclude bit fields from the check

Currently we have no instruments to check the size and offsets
of bit fields.

* gen_bpf_attr_check.sh: Do not print bit fields.
* m4/gen_bpf_attr_m4.awk: Likewise.

5 years agoImplement queueing of threads before dispatching them
Eugene Syromyatnikov [Wed, 8 Aug 2018 19:41:39 +0000 (21:41 +0200)]
Implement queueing of threads before dispatching them

It is possible that some tracees call a lot of cheap syscalls too fast,
and that can stress the tracer to the point some tracees are not served
for indefinite amount of time.  In order to avoid that unfairness, try
to collect all the pending tracees first along with the relevant
information and only then dispatch the events.

* defs.h: Include "list.h".
(struct tcb): Add wait_data_idx, delayed_wait_data, and wait_list
fields.
* strace.c (struct tcb_wait_data): Add "msg" field.
(tcb_wait_tab, tcb_wait_tab_size): New static variables.
(alloctcb): Initialize wait_list.
(droptcb): Remove tcp from wait_list.
(maybe_switch_tcbs): Get old pid from
tcb_wait_tab[tcp->wait_data_idx].msg instead of calling
ptrace(PTRACE_GETEVENTMSG).
(trace_wait_data_size, init_trace_wait_data, copy_trace_wait_data,
free_trace_wait_data, tcb_wait_tab_check_size): New functions, in order
to allow the code outside next_event to operate with wait_data as with
an opaque object (needed for dispatch_event and restart_delayed_tcb).
(next_event): Add pending_tcps, extra_tcp, wait_nohang, elem, and
wait_tab_pos variables; check for elements in pending_tcps and skip
waiting if the list is not empty; check for extra_tcp and skip waiting
along with swapping wait_data_idx with wait_extra_data_idx;
after the initial wait4(), call wait4() in loop with WNOHANG flag set;
fetch siginfo on signal and eventmsg on PTRACE_EVENT_EXEC;
return the first tcp in pending_tcps list.
(dispatch_event): Store a pointer to a copy of tcb_wait_data in
tcp->delayed_wait_data if tcp's restart has to be delayed.
(restart_delayed_tcb): Use tcp->delayed_wait_data, create a stub
tcb_wait_data if it is NULL, free temporary trace_wait_data.
* tests/Makefile.am (XFAIL_TEST): Remove looping_threads.test.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=478419
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=526740
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=851457
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1609318
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1610774
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
Co-Authored-by: Denys Vlasenko <dvlasenk@redhat.com>
Co-Authored-by: Andreas Schwab <aschwab@redhat.com>
Co-Authored-by: Jeff Law <law@redhat.com>
Co-Authored-by: DJ Delorie <dj@redhat.com>
5 years agoAdd a generic list implementation
Eugene Syromyatnikov [Sun, 11 Sep 2016 09:11:45 +0000 (12:11 +0300)]
Add a generic list implementation

Similar to the one used in the Linux kernel.

* macros.h (cast_ptr, containerof): New macros.
* list.h: New file.
* Makefile.am (strace_SOURCES): Add it.

5 years agotests: check tracing of looping threads
Dmitry V. Levin [Wed, 4 Jul 2018 02:11:27 +0000 (02:11 +0000)]
tests: check tracing of looping threads

* test/many_looping_threads.c: Remove.
* test/.gitignore: Remove many_looping_threads.
* test/Makefile (PROGS): Likewise.
(many_looping_threads): Remove.
* tests/looping_threads.c: New file.
* tests/looping_threads.test: New test.
* tests/.gitignore: Add looping_threads.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(looping_threads_LDADD): New variable.
(MISC_TESTS, XFAIL_TESTS): Add looping_threads.test.

5 years agoBump SYS_socket_subcall from 400 to 500
Dmitry V. Levin [Wed, 6 Mar 2019 23:20:39 +0000 (23:20 +0000)]
Bump SYS_socket_subcall from 400 to 500

Make room for syscalls that are going to be introduced in Linux 5.1.

* linux/i386/syscallent.h (SYS_socket_subcall): Raise from 400 to 500.
* linux/m68k/syscallent.h: Likewise.
* linux/powerpc/syscallent.h: Likewise.
* linux/powerpc64/syscallent.h: Likewise.
* linux/s390/syscallent.h: Likewise.
* linux/s390x/syscallent.h: Likewise.
* linux/sh/syscallent.h: Likewise.
* linux/sh64/syscallent.h: Likewise.
* linux/sparc/syscallent.h: Likewise.
* linux/sparc64/syscallent.h: Likewise.
* linux/mips/syscallent-o32.h (SYS_socket_subcall): Raise from 4400
to 4500.
* linux/mips/syscallent-n64.h (SYS_socket_subcall): Raise from 5400
to 5500.
* linux/mips/syscallent-n32.h (SYS_socket_subcall): Raise from 6400
to 6500.

5 years agotests: check tracing of orphaned process group
Dmitry V. Levin [Wed, 6 Mar 2019 16:02:38 +0000 (16:02 +0000)]
tests: check tracing of orphaned process group

* tests/orphaned_process_group.c: New file.
* tests/.gitignore: Add orphaned_process_group.
* tests/Makefile.am (check_PROGRAMS): Likewise.
* tests/gen_tests.in (orphaned_process_group): New test.

5 years agotests: move PTRACE_SEIZE check to a separate file
Dmitry V. Levin [Wed, 6 Mar 2019 16:02:38 +0000 (16:02 +0000)]
tests: move PTRACE_SEIZE check to a separate file

The check is going to be used by another test soon.

* tests/PTRACE_SEIZE.sh: New file.
* tests/detach-stopped.test: Use it.
* tests/Makefile.am (EXTRA_DIST): Add PTRACE_SEIZE.sh.

5 years agostrace.c: fix up formatting after commit v4.24~48
Eugene Syromyatnikov [Thu, 21 Feb 2019 15:55:51 +0000 (16:55 +0100)]
strace.c: fix up formatting after commit v4.24~48

The commit v4.24~48 "Implement -e kvm= option on all architectures",
while removing #ifdef, left formatting of the help message string a bit
inconsistent.

* strace.c (usage): Move "\n\" bit after "kvm", remove double quotes.

Complements: v4.24~48 "Implement -e kvm= option on all architectures"

5 years agotests: fix xgetrlimit output when syscall returns an error
Eugene Syromyatnikov [Thu, 21 Feb 2019 15:52:46 +0000 (16:52 +0100)]
tests: fix xgetrlimit output when syscall returns an error

* tests/xgetrlimit.c (main): Expect pointer to rlimit as the second
argument when syscall returns an error.  Use sprintrc().

5 years agostrace.c: pass signal number to cleanup()
Eugene Syromyatnikov [Thu, 21 Feb 2019 11:56:29 +0000 (12:56 +0100)]
strace.c: pass signal number to cleanup()

* strace.c (die): Pass 0 as an argument to cleanup().
(cleanup): Add fatal_sig parameter, remove the local variable
of the same name, do not use interrupted.
(terminate): Initialise a new local variable "sig" with "interrupted",
pass it to cleanup() and use it instead of "interrupted" for exit_code
initialisation.

5 years agoUpdate ioctl entries from linux v5.0
Gleb Fotengauer-Malinovskiy [Mon, 25 Feb 2019 14:47:20 +0000 (17:47 +0300)]
Update ioctl entries from linux v5.0

* linux/32/ioctls_inc_align16.h: Update from linux v5.0-rc8
using ioctls_gen.sh.
* linux/32/ioctls_inc_align32.h: Likewise.
* linux/32/ioctls_inc_align64.h: Likewise.
* linux/64/ioctls_inc.h: Likewise.
* linux/x32/ioctls_inc0.h: Likewise.
* linux/aarch64/ioctls_arch0.h: Likewise.
* linux/arm/ioctls_arch0.h: Likewise.
* linux/mips/ioctls_arch0.h: Likewise.
* linux/powerpc/ioctls_arch0.h: Likewise.
* linux/s390/ioctls_arch0.h: Likewise.
* linux/s390x/ioctls_arch0.h: Likewise.
* NEWS: Mention this.

5 years agomaint: update for linux 5.0-rc8
Gleb Fotengauer-Malinovskiy [Mon, 25 Feb 2019 14:36:16 +0000 (17:36 +0300)]
maint: update for linux 5.0-rc8

* maint/ioctls_sym.sh (x86_list): Add KVM_GET_SUPPORTED_HV_CPUID.

5 years agoxlat/gen.sh: disable file name globbing by default
Dmitry V. Levin [Sun, 24 Feb 2019 23:37:00 +0000 (23:37 +0000)]
xlat/gen.sh: disable file name globbing by default

As the script uses file name globbing only in one place,
disable it by default and enable it when necessary.

* xlat/gen.sh: Add -f to shebang.
(main): Enable file name globbing to generate the list of input files.

5 years agoxlat/gen.sh: speedup, part 5
Eugene Syromyatnikov [Tue, 5 Feb 2019 23:49:47 +0000 (00:49 +0100)]
xlat/gen.sh: speedup, part 5

* xlat/gen.sh (gen_header): Process xlat line with sed only when "/*"
substring is present in it.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agoxlat/gen.sh: speedup, part 4
Eugene Syromyatnikov [Tue, 5 Feb 2019 23:49:47 +0000 (00:49 +0100)]
xlat/gen.sh: speedup, part 4

* xlat/gen.sh (cond_xlat): Use read instead of sed for xlat entry
parsing.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agoxlat/gen.sh: speedup, part 3
Eugene Syromyatnikov [Tue, 5 Feb 2019 23:49:47 +0000 (00:49 +0100)]
xlat/gen.sh: speedup, part 3

* xlat/gen.sh (cond_def): Use parameter substitution instead of sed
for xlat line parsing.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agoxlat/gen.sh: speedup, part 2
Eugene Syromyatnikov [Tue, 5 Feb 2019 23:49:47 +0000 (00:49 +0100)]
xlat/gen.sh: speedup, part 2

* xlat/gen.sh (gen_header): Use "grep -q" instead of "grep > /dev/null".

5 years agoxlat/gen.sh: speedup, part 1
Eugene Syromyatnikov [Tue, 5 Feb 2019 23:49:47 +0000 (00:49 +0100)]
xlat/gen.sh: speedup, part 1

* xlat/gen.sh (cond_def, cond_xlat): Use printf builtin instead of cat.

5 years agoxlat/gen.sh: cleanup
Eugene Syromyatnikov [Tue, 5 Feb 2019 23:49:47 +0000 (00:49 +0100)]
xlat/gen.sh: cleanup

* xlat/gen.sh: Export LC_ALL=C so it could be omitted from individual
invocations.
(cond_def): Remove LC_ALL=C from sed invocation.
(gen_header): Remove LC_COLLATE=C.

5 years agoMakefile.am: pass D variable to shell scripts' environment
Eugene Syromyatnikov [Mon, 18 Feb 2019 23:01:01 +0000 (00:01 +0100)]
Makefile.am: pass D variable to shell scripts' environment

And set -x if D is set to 1, so the commands called by various shell scripts
are easier to see during debugging.

* Makefile.am (bpf_attr_check.c, sen.h, mpers-m%.stamp, $(srcdir)/CREDITS): Pass
D variable in the environment to the shell script call.
* gen_bpf_attr_check.sh: Set -x if D is set to 1.
* generate_mpers_am.sh: Likewise.
* generate_sen.sh: Likewise.
* maint/gen-contributors-list.sh: Likewise.
* mpers.sh: Likewise.
* mpers_test.sh: Likewise.

5 years agotests: add checks for dumpstr output into read-write test
Eugene Syromyatnikov [Wed, 20 Feb 2019 13:52:59 +0000 (14:52 +0100)]
tests: add checks for dumpstr output into read-write test

util.c:dumpstr() now aligns offsets in accordance with the total length
of the dump and also may perform only partial dump, so let's add checks
for these cases.

* tests/fill_memory.c (fill_memory_ex): Change the type of the period
argument from unsigned char to unsigned int.
* tests/tests.h (fill_memory_ex): Likewise.
* tests/read-write.c (dump_str_ex): Rename from dump_str, add idx_w
argument, support len greater than 240 bytes.
(dump_str): New function, wrapper for dump_str_ex with the default index
width.
(print_hex): Add checks for dumpstr output, close fd 1 later.

5 years agoutil: update dumpstr
Eugene Syromyatnikov [Tue, 19 Feb 2019 02:10:11 +0000 (03:10 +0100)]
util: update dumpstr

Use a buffer of a limited size, use proper type for dump amount, avoid
hard-coding of byte counts, calculate output buffer size more accurately
and minimise its rewriting, pad offset with zeros in accordance
with expected output amount.

* defs.h (dumpstr): Change the type of len argument from int to
kernel_ulong_t.
* macros.h (ROUNDUP_DIV): New macro.
(ROUNDUP): Rewrite using ROUNDUP_DIV.
* util.c (ILOG2_ITER_): New macro.
(ilog2_64, ilog2_32): New functions.
(ilog2_klong): New macro, wrapper around ilog2_32/ilog2_64, so (potentially
more expensive) ilog2_64 is not used for ilog2 calculation
of a kernel_ulong_t-typed variable on architectures with 32-bit kernel long.
(dumpstr): Update.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agoGeneralise UUID printing
Eugene Syromyatnikov [Tue, 19 Feb 2019 01:50:53 +0000 (02:50 +0100)]
Generalise UUID printing

It was open-coded (using yet another open-coded hexadecimal character
printing) in btrfs.c and can be used in other places (like dm.c or
rtnl_link.c).

* defs.h (print_uuid): New declaration.
* print_fields.h (PRINT_FIELD_UUID): New macro.
* util.c (print_uuid): New function.
* btrfs.c (prnibble, UUID_STRING_SIZE, btrfs_unparse_uuid): Remove.
(btrfs_ioctl): Use PRINT_FIELD_UUID for UUID printing.

5 years agoGeneralise some printing primitives
Eugene Syromyatnikov [Tue, 19 Feb 2019 01:46:58 +0000 (02:46 +0100)]
Generalise some printing primitives

Character class checks and hexadecimal number formatting are open-coded
all over the place, let's try to de-duplicate them a bit.

* print_utils.h: New file.
* Makefile.am (strace_SOURCES): Add it.
* util.c: Include "print_utils.h".
(string_quote, dumpstr): Use sprint_byte_hex and is_print.
* v4l2.c: Include "print_utils.h".
(print_pixelformat): Use is_print and BYTE_HEX_CHARS_PRINTF_QUOTED,
add a note that the routine is rather generic.

5 years agoMove call_summary() from cleanup() to terminate()
Eugene Syromyatnikov [Tue, 19 Feb 2019 02:57:34 +0000 (03:57 +0100)]
Move call_summary() from cleanup() to terminate()

cleanup() has exactly two call sites, die() and terminate(), and the
first one resets cflag in order to prevent call_summary() invocation.
Move the call to terminate() in order to avoid bogus cflag reset.

* strace.c (die): Remove cflag reset.
(cleanup): Move call_summary() call ...
(terminate): ... here.

5 years agodefs.h: define stack_trace_enabled to 0 is stack tracing is not enabled
Eugene Syromyatnikov [Tue, 19 Feb 2019 02:50:25 +0000 (03:50 +0100)]
defs.h: define stack_trace_enabled to 0 is stack tracing is not enabled

This allows avoiding ifdefs sometimes.

* defs.h [!ENABLE_STACKTRACE] (stack_trace_enabled): Define as 0.
* strace.c (init): Remove #ifdef ENABLE_STACKTRACE around -c/-k check.

5 years agobuild: fix --with-libiberty
Dmitry V. Levin [Tue, 19 Feb 2019 01:39:32 +0000 (01:39 +0000)]
build: fix --with-libiberty

* m4/st_demangle.m4 (st_DEMANGLE): Move the check for cplus_demangle
out of AC_CHECK_HEADERS because the latter checks for demangle.h in two
different places and an absence of demangle.h in one of these places
would cause a build error in --with-libiberty=yes mode.
* NEWS: Mention this fix.

Resolves: https://github.com/strace/strace/issues/92

5 years agoHonor xlat styles when decoding ioprio_get and ioprio_set
Shankara Pailoor [Sat, 12 Jan 2019 04:59:00 +0000 (20:59 -0800)]
Honor xlat styles when decoding ioprio_get and ioprio_set

* ioprio.c (SYS_FUNC(ioprio_get), SYS_FUNC(ioprio_set)): Add xlat_style
support.
* tests/ioprio-Xabbrev.c: New file.
* tests/ioprio-Xraw.c: Likewise.
* tests/ioprio-Xverbose.c: Likewise.
* tests/ioprio.c: Handle XLAT_RAW, XLAT_ABBREV, and XLAT_VERBOSE macros.
* tests/gen_tests.in (ioprio-Xabbrev, ioprio-Xraw, ioprio-Xverbose): New
tests.
* tests/pure_executables.list: Add ioprio-Xabbrev, ioprio-Xraw, and
ioprio-Xverbose.
* tests/.gitignore: Likewise.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agomove_pages: honor xlat styles
Shankara Pailoor [Sun, 13 Jan 2019 19:37:49 +0000 (11:37 -0800)]
move_pages: honor xlat styles

* numa.c (print_status): Add xlat_style support for status argument.
* tests/move_pages-Xabbrev.c: New file.
* tests/move_pages-Xraw.c: Likewise.
* tests/move_pages-Xverbose.c: Likewise.
* tests/move_pages.c: Handle XLAT_RAW, XLAT_ABBREV, and XLAT_VERBOSE
macros.
* tests/gen_tests.in (move_pages-Xabbrev, move_pages-Xraw,
move_pages-Xverbose): New tests.
* tests/pure_executables.list: Add move_pages-Xabbrev, move_pages-Xraw,
and move_pages-Xverbose.
* tests/.gitignore: Likewise.

5 years agotests: robustify threads-execve test against the odds
Dmitry V. Levin [Mon, 18 Feb 2019 00:29:43 +0000 (00:29 +0000)]
tests: robustify threads-execve test against the odds

Give threads-execve.test more chances to succeed.

* tests/threads-execve.test: Retry the test until run out of time.

5 years agoHonor xlat styles when decoding resource limits
Shankara Pailoor [Sat, 12 Jan 2019 03:07:33 +0000 (19:07 -0800)]
Honor xlat styles when decoding resource limits

* resource.c (sprint_rlim64, sprint_rlim32): Remove.
(print_rlim64_t, print_rlim32_t): New functions.
(print_rlimit64, print_rlimit32): Use them.
* tests/setrlimit-Xabbrev.c: New file.
* tests/setrlimit-Xraw.c: Likewise.
* tests/setrlimit-Xverbose.c: Likewise.
* tests/setrlimit.c (main): Handle XLAT_ABBREV, XLAT_RAW,
and XLAT_VERBOSE macros.
* tests/xgetrlimit.c (sprint_rlim): Likewise.
* tests/gen_tests.in (setrlimit-Xabbrev, setrlimit-Xraw,
setrlimit-Xverbose): New tests.
* tests/pure_executables.list: Add setrlimit-Xabbrev, setrlimit-Xraw,
and setrlimit-Xverbose.
* tests/.gitignore: Likewise.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agohppa: workaround kernel bug in syscall number tampering
Dmitry V. Levin [Sun, 17 Feb 2019 00:10:26 +0000 (00:10 +0000)]
hppa: workaround kernel bug in syscall number tampering

Linux kernel commit v4.6-rc2~20^2 introduced a regression:
when tracer changes syscall number to -1, the kernel fails
to initialize %r28 with -ENOSYS and subsequently fails
to return the error code of the failed syscall to userspace.
Workaround this by initializing %r28 ourselves.

* linux/arch_defs_.h (ARCH_NEEDS_SET_ERROR_FOR_SCNO_TAMPERING): Define
to 0.
* linux/hppa/arch_defs_.h (ARCH_NEEDS_SET_ERROR_FOR_SCNO_TAMPERING):
Define to 1.
* syscall.c (tamper_with_syscall_entering)
[ARCH_NEEDS_SET_ERROR_FOR_SCNO_TAMPERING]: When changing syscall number
to -1, set the return value as well.

5 years agohppa: define PT_* constants as offsets inside struct pt_regs
Dmitry V. Levin [Sat, 16 Feb 2019 00:33:38 +0000 (00:33 +0000)]
hppa: define PT_* constants as offsets inside struct pt_regs

Define constants passed to upeek and upoke using a method that works
with different wordsize values.

* linux/hppa/arch_regs.c (PT_GR26, PT_GR30, PT_IAOQ0, PT_IAOQ1): Remove.
(PT_GR20, PT_GR28, ARCH_PC_PEEK_ADDR, ARCH_SP_PEEK_ADDR): Redefine using
offsets inside struct pt_regs.
* linux/hppa/get_syscall_args.c (arch_get_syscall_args): Replace PT_GR26
with offsets inside struct pt_regs.

5 years agohppa: enhance decoding of PTRACE_PEEKUSER and PTRACE_POKEUSER
Dmitry V. Levin [Sat, 16 Feb 2019 00:33:38 +0000 (00:33 +0000)]
hppa: enhance decoding of PTRACE_PEEKUSER and PTRACE_POKEUSER

Print symbolic constants corresponding to numeric arguments
of PTRACE_PEEKUSER and PTRACE_POKEUSER requests.

* linux/hppa/userent.h: New file.
* Makefile.am (EXTRA_DIST): Add it.
* NEWS: Mention this.

5 years agomips o32: fix 7th syscall argument with PTRACE_GET_SYSCALL_INFO API
Dmitry V. Levin [Fri, 15 Feb 2019 21:22:30 +0000 (21:22 +0000)]
mips o32: fix 7th syscall argument with PTRACE_GET_SYSCALL_INFO API

As PTRACE_GET_SYSCALL_INFO API supports 6 syscall arguments,
all architectures that have syscalls with more than 6 arguments
(i.e. mips o32) have to fetch extra arguments manually when using
PTRACE_GET_SYSCALL_INFO API.

* linux/mips/get_syscall_args.c [LINUX_MIPSO32]
(arch_get_syscall_args_extra): New function.
* syscall.c (get_syscall_args) [MAX_ARGS > 6]: Use it.

Fixes: v4.26~49 "Introduce PTRACE_GET_SYSCALL_INFO support"
5 years agomips: update comment
Dmitry V. Levin [Fri, 15 Feb 2019 21:22:30 +0000 (21:22 +0000)]
mips: update comment

* linux/mips/get_syscall_args.c (decode_syscall_subcall): Update comment.

Complements: v4.26-27-g2c8b6de91 "mips o32: fix build"

5 years agotests: add kill_child test
Eugene Syromyatnikov [Fri, 1 Feb 2019 10:04:51 +0000 (11:04 +0100)]
tests: add kill_child test

This tests repeatedly creates and kills children, so some corner
cases in handling of not-quite-existing processes can be observed.

Previously, strace was crashing in the following situation:

    13994 ????( <unfinished ...>
    ...
    13994 <... ???? resumed>) = ?

as tcp->s_ent wasn't initialised on syscall entering and
strace.c:print_event_exit segfaulted when tried to access
tcp->s_ent->sys_name.

* tests/kill_child.c: New file.
* tests/kill_child.test: New test.
* tests/.gitignore: Add kill_child.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(MISC_TESTS): Add kill_child.test.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agoWire up kexec_file_load syscall on architectures that use generic unistd.h
Dmitry V. Levin [Mon, 11 Feb 2019 23:35:07 +0000 (23:35 +0000)]
Wire up kexec_file_load syscall on architectures that use generic unistd.h

* linux/32/syscallent.h [294]: Wire up kexec_file_load syscall
introduced by linux commit v5.0-rc1~35^2~41^2~15.
* linux/64/syscallent.h [294]: Likewise.
* NEWS: Mention this.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1676045

5 years agoWire up rseq syscall on architectures that use generic unistd.h
Dmitry V. Levin [Mon, 11 Feb 2019 23:35:07 +0000 (23:35 +0000)]
Wire up rseq syscall on architectures that use generic unistd.h

* linux/32/syscallent.h [293]: Wire up rseq syscall introduced by linux
commit v4.19-rc1~109^2~47.
* linux/64/syscallent.h [293]: Likewise.
* NEWS: Mention this.

5 years agotests: robustify preadv2-pwritev2 test against odd kernels
Dmitry V. Levin [Mon, 11 Feb 2019 21:00:05 +0000 (21:00 +0000)]
tests: robustify preadv2-pwritev2 test against odd kernels

The test used to assume that either both preadv2 and pwritev2 syscalls
are implemented or both are not implemented, but, apparently, there are
kernels in the wild that implement just preadv2 syscall without
pwritev2.

* tests/preadv2-pwritev2.c (main): Skip the dumpio part of the test
if either preadv2 or pwritev2 syscall is not implemented.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1668750

5 years agoptrace_restart: do not print diagnostics when ptrace returns ESRCH
Eugene Syromyatnikov [Sun, 10 Feb 2019 23:57:38 +0000 (00:57 +0100)]
ptrace_restart: do not print diagnostics when ptrace returns ESRCH

After some discussion, it was decided that the situation
when the tracee is gone does not worth reporting.

* strace.c (ptrace_restart): Return early if ptrace returned ESRCH.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1662936

5 years agoptrace_restart: use xlat-based approach for printing ptrace requests
Eugene Syromyatnikov [Sun, 10 Feb 2019 23:45:37 +0000 (00:45 +0100)]
ptrace_restart: use xlat-based approach for printing ptrace requests

* defs.h (ptrace_cmds): New prototype.
* strace.c (ptrace_op_str): New function.
(ptrace_restart): Use it.

5 years agoFix whitespace issues
Dmitry V. Levin [Sun, 10 Feb 2019 21:04:41 +0000 (21:04 +0000)]
Fix whitespace issues

* Makefile.am (strace_SOURCES, EXTRA_DIST): Replace SPACE symbol followed
by TAB symbol with TAB symbol.
* kvm.c (is_map_for_file): Likewise.
* tests/gen_tests.in (ioctl_ptp, printsignal-Xverbose): Likewise.
* xlat/skf_ad.in: Likewise.

5 years agoMake inline message on failed restart attempt more verbose
Eugene Syromyatnikov [Sun, 10 Feb 2019 18:49:46 +0000 (19:49 +0100)]
Make inline message on failed restart attempt more verbose

Hopefully, now it is less confusing.

* strace.c (ptrace_restart): Provide intent and pid in the inline error
message.

References: https://bugzilla.redhat.com/show_bug.cgi?id=1662936

5 years agosyscall.c: set MEMORY_MAPPING_CHANGE in stub sysent
Eugene Syromyatnikov [Tue, 29 Jan 2019 14:35:00 +0000 (15:35 +0100)]
syscall.c: set MEMORY_MAPPING_CHANGE in stub sysent

As unknown syscalls may incur unknown side effects.

* syscall.c (stub_sysent): Set sys_flags to MEMORY_MAPPING_CHANGE.

5 years agoUse accessors for tcp->s_ent, return a stub struct if it is NULL
Eugene Syromyatnikov [Tue, 29 Jan 2019 13:40:11 +0000 (14:40 +0100)]
Use accessors for tcp->s_ent, return a stub struct if it is NULL

Since code paths are non-trivial, it's an attempt to future-proof
and prevent improper access of tcp->s_ent fields.

* defs.h (struct tcb): Update the description of s_ent field.
(stub_sysent): New declaration.
(tcp_sysent, n_args): New macro functions.
(indirect_ipccall): Use tcp_sysent() instead of tcp->s_ent.
* ipc.c (SYS_FUNC(ipc)): Use n_args() instead of tcp->s_ent->nargs.
* linux/alpha/get_syscall_args.c (get_syscall_args): Likewise.
* linux/bfin/get_syscall_args.c (get_syscall_args): Likewise.
* linux/hppa/get_syscall_args.c (get_syscall_args): Likewise.
* linux/ia64/get_syscall_args.c (get_syscall_args): Likewise.
* linux/microblaze/get_syscall_args.c (get_syscall_args): Likewise.
* linux/mips/get_syscall_args.c (get_syscall_args): Likewise.
* linux/sh/get_syscall_args.c (get_syscall_args): Likewise.
* linux/sh64/get_syscall_args.c (get_syscall_args): Likewise.
* linux/x86_64/get_syscall_args.c (get_syscall_args): Likewise.
* linux/xtensa/get_syscall_args.c (get_syscall_args): Likewise.
* prctl.c (print_prctl_args): Likewise.
* signal.c (SYS_FUNC(sgetmask)): Likewise.
* util.c (printargs, printargs_u, printargs_d): Likewise.
* syscall.c (decode_ipc_subcall, decode_syscall_subcall: Likewise.
(dumpio, tamper_with_syscall_exiting, syscall_entering_decode,
syscall_entering_decode, syscall_entering_trace, syscall_entering_trace,
syscall_exiting_decode, print_syscall_resume, syscall_exiting_trace,
get_syscall_result): Use tcp_sysent() instead of tcp->s_ent.
(stub_sysent): New stub sysent.
(get_scno): Reset scno, s_ent, qual_flg; initialise s->ent from
stub_sysent.
* pathtrace.c (pathtrace_match_set): Use tcp_sysent() instead of
tcp->s_ent.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agosyscall.c: remove arch check for SEN_execv usage
Eugene Syromyatnikov [Tue, 29 Jan 2019 13:07:46 +0000 (14:07 +0100)]
syscall.c: remove arch check for SEN_execv usage

SEN_* declarations are always present and can be used regardless
of architecture.

* syscall.c (syscall_entering_trace): Remove "#if defined SPARC ||
defined SPARC64" guard.