]> granicus.if.org Git - strace/log
strace
5 years agoImplement decoding of pidfd_open syscall
Dmitry V. Levin [Thu, 15 Aug 2019 11:54:22 +0000 (11:54 +0000)]
Implement decoding of pidfd_open syscall

... introduced by Linux kernel commits v5.3-rc1~142^2~2
and v5.3-rc1~142^2~1.

* pidfd_open.c: New file.
* Makefile.am (strace_SOURCES): Add it.
* pathtrace.c (pathtrace_match_set): Add SEN_pidfd_open.
* linux/syscallent-common.h [BASE_NR + 434]: Wire up pidfd_open.
* NEWS: Mention this change.
* tests/pidfd_open.c: New file.
* tests/pidfd_open-P.c: Likewise.
* tests/pidfd_open-y.c: Likewise.
* tests/gen_tests.in (pidfd_open, pidfd_open-P, pidfd_open-y): New
entries.
* tests/pure_executables.list: Add pidfd_open, pidfd_open-P, and
pidfd_open-y.
* tests/.gitignore: Likewise.

5 years agoxlat/gen.sh: remove #stop support
Dmitry V. Levin [Wed, 14 Aug 2019 19:05:08 +0000 (19:05 +0000)]
xlat/gen.sh: remove #stop support

There are no users of #stop directive anymore.

* xlat/gen.sh (gen_header): Remove '#stop' support.

5 years agoxlat/skf_off: use XLAT_MACROS_ONLY instead of #stop
Dmitry V. Levin [Wed, 14 Aug 2019 19:05:08 +0000 (19:05 +0000)]
xlat/skf_off: use XLAT_MACROS_ONLY instead of #stop

* xlat/skf_off.in: Remove #stop.
* bpf_sock_filter.c: Wrap "xlat/skf_off.h" inclusion in XLAT_MACROS_ONLY.

5 years agoxlat/scsi_sg_commands: use XLAT_MACROS_ONLY instead of #stop
Dmitry V. Levin [Wed, 14 Aug 2019 19:05:08 +0000 (19:05 +0000)]
xlat/scsi_sg_commands: use XLAT_MACROS_ONLY instead of #stop

* xlat/scsi_sg_commands.in: Remove #stop.
* scsi.c: Wrap "xlat/scsi_sg_commands.h" inclusion in XLAT_MACROS_ONLY.
* tests/ioctl_scsi.c: Likewise.
* tests/ioctl_sg_io_v4.c: Likewise.

5 years agoxlat: mark as value indexed those files that meet certain criteria
Dmitry V. Levin [Wed, 14 Aug 2019 19:05:08 +0000 (19:05 +0000)]
xlat: mark as value indexed those files that meet certain criteria

Automatically prepend #value_indexed using the following script:

for f in xlat/*.in; do
awk -n 'BEGINFILE {if (FILENAME ~ /flag/) exit 1; nr=0}
(nr == 0 && $1 ~ /^#/) {exit 1}
$1 !~ /^[A-Z_0-9]/ {next}
NF < 2 || $2 !~ /^[0-9]/ || ($2 - nr != 0 && $2 - nr != 1) {exit 1}
{nr++}
ENDFILE {if (nr < 2) exit 1}' "$f" &&
sed -i '1i#value_indexed' "$f"
done

* xlat/blkpg_ops.in: Prepend #value_indexed.
* xlat/btrfs_balance_ctl_cmds.in: Likewise.
* xlat/btrfs_compress_types.in: Likewise.
* xlat/btrfs_cont_reading_from_srcdev_mode.in: Likewise.
* xlat/crypto_nl_attrs.in: Likewise.
* xlat/dcb_commands.in: Likewise.
* xlat/epollctls.in: Likewise.
* xlat/f_owner_types.in: Likewise.
* xlat/fib_rule_actions.in: Likewise.
* xlat/futexwakecmps.in: Likewise.
* xlat/futexwakeops.in: Likewise.
* xlat/ioprio_class.in: Likewise.
* xlat/ioprio_who.in: Likewise.
* xlat/kcmp_types.in: Likewise.
* xlat/keyctl_commands.in: Likewise.
* xlat/lwtunnel_encap_types.in: Likewise.
* xlat/mpol_modes.in: Likewise.
* xlat/multicast_router_types.in: Likewise.
* xlat/netfilter_versions.in: Likewise.
* xlat/netlink_protocols.in: Likewise.
* xlat/netlink_types.in: Likewise.
* xlat/nf_acct_msg_types.in: Likewise.
* xlat/nf_cthelper_msg_types.in: Likewise.
* xlat/nf_ctnetlink_exp_msg_types.in: Likewise.
* xlat/nf_ctnetlink_msg_types.in: Likewise.
* xlat/nf_cttimeout_msg_types.in: Likewise.
* xlat/nf_ipset_msg_types.in: Likewise.
* xlat/nf_nftables_msg_types.in: Likewise.
* xlat/nf_osf_msg_types.in: Likewise.
* xlat/nf_queue_msg_types.in: Likewise.
* xlat/nf_ulog_msg_types.in: Likewise.
* xlat/nl_netfilter_subsys_ids.in: Likewise.
* xlat/nlmsgerr_attrs.in: Likewise.
* xlat/pr_cap_ambient.in: Likewise.
* xlat/pr_dumpable.in: Likewise.
* xlat/pr_mce_kill.in: Likewise.
* xlat/pr_mce_kill_policy.in: Likewise.
* xlat/pr_set_mm.in: Likewise.
* xlat/pr_tsc.in: Likewise.
* xlat/quota_formats.in: Likewise.
* xlat/quotatypes.in: Likewise.
* xlat/routing_types.in: Likewise.
* xlat/rtnl_addr_attrs.in: Likewise.
* xlat/rtnl_addrlabel_attrs.in: Likewise.
* xlat/rtnl_dcb_attrs.in: Likewise.
* xlat/rtnl_ifla_brport_attrs.in: Likewise.
* xlat/rtnl_ifla_events.in: Likewise.
* xlat/rtnl_ifla_info_attrs.in: Likewise.
* xlat/rtnl_ifla_port_attrs.in: Likewise.
* xlat/rtnl_ifla_vf_port_attrs.in: Likewise.
* xlat/rtnl_ifla_xdp_attrs.in: Likewise.
* xlat/rtnl_link_attrs.in: Likewise.
* xlat/rtnl_mdb_attrs.in: Likewise.
* xlat/rtnl_mdba_mdb_attrs.in: Likewise.
* xlat/rtnl_mdba_mdb_eattr_attrs.in: Likewise.
* xlat/rtnl_mdba_mdb_entry_attrs.in: Likewise.
* xlat/rtnl_mdba_router_attrs.in: Likewise.
* xlat/rtnl_mdba_router_pattr_attrs.in: Likewise.
* xlat/rtnl_neigh_attrs.in: Likewise.
* xlat/rtnl_neightbl_attrs.in: Likewise.
* xlat/rtnl_neightbl_parms_attrs.in: Likewise.
* xlat/rtnl_netconf_attrs.in: Likewise.
* xlat/rtnl_route_attrs.in: Likewise.
* xlat/rtnl_rta_metrics_attrs.in: Likewise.
* xlat/rtnl_rule_attrs.in: Likewise.
* xlat/rtnl_tc_action_attrs.in: Likewise.
* xlat/rtnl_tc_attrs.in: Likewise.
* xlat/rtnl_tca_stab_attrs.in: Likewise.
* xlat/rtnl_tca_stats_attrs.in: Likewise.
* xlat/s390_guarded_storage_commands.in: Likewise.
* xlat/s390_runtime_instr_commands.in: Likewise.
* xlat/seccomp_mode.in: Likewise.
* xlat/seccomp_ops.in: Likewise.
* xlat/shutdown_modes.in: Likewise.
* xlat/sigchld_codes.in: Likewise.
* xlat/sigev_value.in: Likewise.
* xlat/sigpoll_codes.in: Likewise.
* xlat/smc_link_group_roles.in: Likewise.
* xlat/sock_netlink_options.in: Likewise.
* xlat/sock_pnp_options.in: Likewise.
* xlat/sock_tls_options.in: Likewise.
* xlat/socketcalls.in: Likewise.
* xlat/tcp_states.in: Likewise.
* xlat/uring_register_opcodes.in: Likewise.
* tests/socketcall.c (main): Update assertion.

5 years agoReplace direct usage of err_name/errnoent with print_err
Eugene Syromyatnikov [Thu, 27 Sep 2018 05:35:32 +0000 (07:35 +0200)]
Replace direct usage of err_name/errnoent with print_err

Introduce print_err function that prints error number respecting current
xlat verbosity settings, and switch err_name/errnoent callers to use
this new function instead.

* defs.h (err_name): Remove.
(print_err): New declaration.
* print_fields.h (PRINT_FIELD_ERR_D, PRINT_FIELD_ERR_U): New macros.
* syscall.c (err_name): Add static qualifier, change argument type
to uint64_t.
(print_err): New function.
* keyctl.c (keyctl_reject_key): Use print_err for printing error
argument.
* net.c (print_get_error): Use print_err for printing err.
* numa.c (print_status): Use print_err for printing errno.
* netlink.c: Include "print_fields.h".
(decode_nlmsgerr): Use PRINT_FIELD_ERR_D for printing errno field.
* printsiginfo.c: Include "print_fields.h".
(print_si_info): Use PRINT_FIELD_ERR_U for printing si_errno field.
* ptrace_syscall_info.c (print_ptrace_syscall_info): Use
PRINT_FIELD_ERR_D for printing info.exit.rval.
* tests/pidfd_send_signal.c (main): Update expected output.
* tests/ptrace.c (main): Likewise.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agonetlink_unix_diag: implement UDIAG_SHOW_UID/UNIX_DIAG_UID decoding
Dmitry V. Levin [Tue, 13 Aug 2019 11:06:57 +0000 (11:06 +0000)]
netlink_unix_diag: implement UDIAG_SHOW_UID/UNIX_DIAG_UID decoding

... introduced by Linux kernel commit v5.3-rc1~140^2~467.

* linux/unix_diag.h (UDIAG_SHOW_UID, UNIX_DIAG_FIRST_UNUSED): New macro
constants.
(UNIX_DIAG_UID): New enum constant.
* xlat/unix_diag_attrs.in: Add UNIX_DIAG_UID.
* xlat/unix_diag_show.in: Add UDIAG_SHOW_UID.
* netlink_unix_diag.c (unix_diag_msg_nla_decoders): Handle
UNIX_DIAG_UID.
* NEWS: Mention this.
* tests/nlattr.c (test_nlattr, test_nla_type): Replace
UNIX_DIAG_SHUTDOWN + 1 with UNIX_DIAG_FIRST_UNUSED.

5 years agonetlink_route: implement RTM_{NEW,DEL,GET}CHAIN decoding
Eugene Syromyatnikov [Sun, 19 Aug 2018 12:47:53 +0000 (14:47 +0200)]
netlink_route: implement RTM_{NEW,DEL,GET}CHAIN decoding

* xlat/nl_route_types.in (RTM_NEWCHAIN, RTM_DELCHAIN, RTM_GETCHAIN): New
constants introduced by Linux kernel commit v4.19-rc1~140^2~279^2~9.
* netlink_route.c (route_decoders) <[RTM_NEWCHAIN - RTM_BASE],
[RTM_DELCHAIN - RTM_BASE], [RTM_GETCHAIN - RTM_BASE]>: Invoke
decode_tcmsg.
* NEWS: Mention this.

5 years agoxlat: update TCP_* constants
Dmitry V. Levin [Tue, 13 Aug 2019 11:06:57 +0000 (11:06 +0000)]
xlat: update TCP_* constants

* xlat/sock_tcp_options.in (TCP_TX_DELAY): New constant introduced
by Linux kernel commit v5.3-rc1~140^2~269.
* NEWS: Mention this.

5 years agoxlat: update *_MAGIC constants
Dmitry V. Levin [Tue, 13 Aug 2019 11:06:57 +0000 (11:06 +0000)]
xlat: update *_MAGIC constants

* xlat/fsmagic.in (Z3FOLD_MAGIC): New constant introduced
by Linux kernel commit v5.3-rc1~31^2~30.
(DMA_BUF_MAGIC): New constant introduced by Linux kernel commit
v5.3-rc1~22^2~20^2~42.
* NEWS: Mention this.

5 years agoxlat: update KVM_CAP_* constants
Dmitry V. Levin [Tue, 13 Aug 2019 11:06:57 +0000 (11:06 +0000)]
xlat: update KVM_CAP_* constants

* xlat/kvm_cap.in (KVM_CAP_PMU_EVENT_FILTER): New constant introduced
by Linux kernel commit v5.3-rc1~115^2~5.
* NEWS: Mention this.

5 years agoxlat: update KEYCTL_* constants
Dmitry V. Levin [Tue, 13 Aug 2019 11:06:57 +0000 (11:06 +0000)]
xlat: update KEYCTL_* constants

* xlat/keyctl_commands.in (KEYCTL_PKEY_QUERY, KEYCTL_PKEY_ENCRYPT,
KEYCTL_PKEY_DECRYPT, KEYCTL_PKEY_SIGN, KEYCTL_PKEY_VERIFY): New
constants introduced by Linux kernel commit v4.20-rc1~29^2~20.
(KEYCTL_MOVE): New constant introduced by Linux kernel commit
v5.3-rc1~189^2~3.
(KEYCTL_CAPABILITIES): New constant introduced by Linux kernel commit
v5.3-rc1~189^2.
* NEWS: Mention this.

5 years agoxlat: update BPF_* constants
Dmitry V. Levin [Tue, 13 Aug 2019 11:06:57 +0000 (11:06 +0000)]
xlat: update BPF_* constants

* xlat/bpf_attach_type.in (BPF_CGROUP_GETSOCKOPT,
BPF_CGROUP_SETSOCKOPT): New constants introduced by Linux kernel commit
v5.3-rc1~140^2~65^2~8^2~8.
* xlat/bpf_prog_flags.in (BPF_F_TEST_RND_HI32): New constant
introduced by Linux kernel commit v5.3-rc1~140^2~371^2~28^2~12.
* xlat/bpf_prog_types.in (BPF_PROG_TYPE_CGROUP_SOCKOPT): New constant
introduced by Linux kernel commit v5.3-rc1~140^2~65^2~8^2~8.
* NEWS: Mention this.
* tests/bpf.c (print_BPF_PROG_LOAD_attr3, print_BPF_PROG_LOAD_attr4,
BPF_PROG_LOAD_checks, BPF_PROG_QUERY_checks): Update expected output.
* tests/kernel_version.c (print_bpf_attr, main): Likewise.

5 years agoxlat: update XDP_* constants
Dmitry V. Levin [Tue, 13 Aug 2019 11:06:57 +0000 (11:06 +0000)]
xlat: update XDP_* constants

* xlat/sock_xdp_options.in (XDP_OPTIONS): New constant introduced
by Linux kernel commit v5.3-rc1~140^2~65^2~9^2~13.

5 years agoxlat: update ETH_* constants
Dmitry V. Levin [Tue, 13 Aug 2019 11:06:57 +0000 (11:06 +0000)]
xlat: update ETH_* constants

* xlat/ethernet_protocols.in (ETH_P_LLDP): New constant introduced
by Linux kernel commit v5.3-rc1~140^2~329^2~6.

5 years agoxlat: update SO_* constants
Dmitry V. Levin [Sun, 11 Aug 2019 13:11:10 +0000 (13:11 +0000)]
xlat: update SO_* constants

* xlat/sock_options.in (SO_BINDTOIFINDEX): New constant introduced
by Linux commit v5.1-rc1~178^2~508.
(SO_RCVTIMEO_NEW, SO_SNDTIMEO_NEW): New constants introduced by Linux
commit v5.1-rc1~178^2~363^2.
(SO_DETACH_REUSEPORT_BPF): New constant introduced by Linux commit
v5.3-rc1~140^2~179^2~12.

5 years ago* xlat/setsock_options.in: Regenerate using maint/gen_xlat_defs.sh
Dmitry V. Levin [Sun, 11 Aug 2019 13:11:10 +0000 (13:11 +0000)]
* xlat/setsock_options.in: Regenerate using maint/gen_xlat_defs.sh

5 years agoxlat: provide fallback definition for MAP_UNINITIALIZED
Dmitry V. Levin [Sun, 11 Aug 2019 13:11:10 +0000 (13:11 +0000)]
xlat: provide fallback definition for MAP_UNINITIALIZED

Linux commit v5.3-rc1~65^2~86 fixed the definition of MAP_UNINITIALIZED
flag that used to depend on CONFIG_MMAP_ALLOW_UNINITIALIZED.

* xlat/mmap_flags.in (MAP_UNINITIALIZED): Add fallback definition.

5 years agocount: add ability to sort on errors field
Eugene Syromyatnikov [Tue, 4 Sep 2018 17:20:36 +0000 (19:20 +0200)]
count: add ability to sort on errors field

For completeness.

* count.c (error_cmp): New function.
(set_sortby): Add sort keys for errors field.
* strace.1.in (.SH OPTIONS) <-S>: Document it.
* strace.c (usage): Likewise.
* tests/strace-S.test: Check it.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agocount: provide alternative names for sorting options
Eugene Syromyatnikov [Tue, 4 Sep 2018 11:22:11 +0000 (13:22 +0200)]
count: provide alternative names for sorting options

as some might be easier to remember than others.

* count.c (set_sortby): Add aliases for the existing sorting options.
* strace.1.in (.SH OPTIONS) <-S>: Document new aliases.
* tests/strace-S.test: Check new sort keys.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agocount: rewrite sort function selection using a table
Eugene Syromyatnikov [Tue, 4 Sep 2018 11:22:11 +0000 (13:22 +0200)]
count: rewrite sort function selection using a table

* count.c (set_sortby): Replace nested if's with iteration over a table.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agotests: extend -S option check
Dmitry V. Levin [Tue, 6 Aug 2019 13:38:20 +0000 (13:38 +0000)]
tests: extend -S option check

* tests/strace-S.test: Check default sorting method and "-S time".

5 years agosyscall: track syscall system time a bit more explicitly
Eugene Syromyatnikov [Mon, 3 Sep 2018 02:57:13 +0000 (04:57 +0200)]
syscall: track syscall system time a bit more explicitly

Before, it relied on implicit assumptions that syscall-exit event is
right the next one after syscall-enter.  Also, there's some additional
debugging output that might help someone someday.

* count.c (count_syscall): Calculate system time as difference of tcp's
stime and ltime.
* defs.h (struct tcb): Add ltime, atime fields, remove dtime.
* strace.c (droptcb): Print total system time spent by a tcb.
(startup_tcb): Store initial system time in atime.
(next_event): Update stime directly.
* syscall.c (syscall_entering_finish): Store current system time in
tcb's ltime field.
(syscall_exiting_finish): Likewise.

5 years agocount: substract overhead per call
Eugene Syromyatnikov [Sun, 2 Sep 2018 20:07:07 +0000 (22:07 +0200)]
count: substract overhead per call

* count.c (zero_ts): New variable.
(count_syscall): Calculate the spent time in the wts variable, then add
it to cc->time.
(call_summary_pers): Do not perform overhead correction.

5 years agoutil: add ts_min and ts_max
Eugene Syromyatnikov [Sun, 2 Sep 2018 18:03:27 +0000 (20:03 +0200)]
util: add ts_min and ts_max

* defs.h (ts_min, ts_max): New declarations.
* util.c (ts_min, ts_max): New functions.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agocount: use parse_ts for parsing overhead value
Eugene Syromyatnikov [Sun, 2 Sep 2018 19:56:47 +0000 (21:56 +0200)]
count: use parse_ts for parsing overhead value

* count.c (set_overhead): Change argument type to const char *, call
parse_ts to parse it and set to overhead.
* defs.h (set_overhead): Update declaration.
* strace.c: (init) <case 'O'>: do not parse argument, pass optarg to
set_overhead call.
* tests/count.test (GENERIC, WALLCLOCK, WALLCLOCK1, HALFCLOCK): New
variables with expected patterns.
Add checks for the new -O syntax.

5 years agodelay: use parse_ts for parsing delay value
Eugene Syromyatnikov [Sun, 2 Sep 2018 19:28:41 +0000 (21:28 +0200)]
delay: use parse_ts for parsing delay value

* delay.c (fill_delay_data): Change intval argument to struct timespec
*val, assign val to ts.
* delay.h (fill_delay_data): Update function declaration.
* filter_qualify.c (parse_delay_token): Parse input with parse_ts,
supply the resulting struct timespec to fill_delay_data.
* tests/delay.c (check_): New function for providing diagnostic in case
of check failure.
(check_delay): Use it.
* tests/delay.test: Check new delay syntax.

5 years agoutil.c: add parse_ts
Eugene Syromyatnikov [Sun, 2 Sep 2018 18:04:27 +0000 (20:04 +0200)]
util.c: add parse_ts

* defs.h (parse_ts): New declaration.
* util.c (parse_ts): New function.

5 years agocount: fix types in sorting comparison callbacks
Eugene Syromyatnikov [Sun, 2 Sep 2018 21:05:27 +0000 (23:05 +0200)]
count: fix types in sorting comparison callbacks

* count.c (time_cmp. syscall_cmp): Change arguments type
to "const void *", change indices cast type to "unsigned int *".
(count cmp): Likewise.  Change count variables type to unsigned int.
(sortfun): Specify types of arguments.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agov4l2: improve control ID printing
Eugene Syromyatnikov [Sun, 19 Aug 2018 18:17:13 +0000 (20:17 +0200)]
v4l2: improve control ID printing

Control ID space is hierarchical, so, higher bits provide information
about control class.

* v4l2.c (print_v4l2_cid): New function.
(print_v4l2_control): Use print_v4l2_cid for printing control ID field.
* tests/ioctl_v4l2.c: Add checks for control ID printing.

5 years agotests: add syslog-success test
Eugene Syromyatnikov [Thu, 27 Sep 2018 05:22:32 +0000 (07:22 +0200)]
tests: add syslog-success test

* tests/.gitignore: Add syslog-success
* tests/Makefile.am (check_PROGRAMS): Likewise.
(DECODER_TESTS): Add syslog-success.test.
* tests/syslog-success.c: New file.
* tests/syslog-success.test: New test.
* tests/syslog.c: Add support for running under syscall retval
injection, add checks.

5 years agosyslog: decode log level in SYSLOG_ACTION_CONSOLE_LEVEL command
Eugene Syromyatnikov [Thu, 27 Sep 2018 05:17:27 +0000 (07:17 +0200)]
syslog: decode log level in SYSLOG_ACTION_CONSOLE_LEVEL command

* xlat/syslog_console_levels.in: New file.
* syslog.c: Include "xlat/syslog_console_levels.h".
(SYS_FUNC(syslog)): Add SYSLOG_ACTION_CONSOLE_LEVEL case.
* tests/syslog.c: Add checks.

5 years agosyslog: fix argument printing
Eugene Syromyatnikov [Thu, 27 Sep 2018 05:12:18 +0000 (07:12 +0200)]
syslog: fix argument printing

* syslog.c (SYS_FUNC(syslog)): Store conversion to int of tcp->u_arg[2]
in len; print address using printaddr64 (as syslog doesn't use compat
for x32), and third argument as int (as it has this type in the syscall
handler).
* tests/syslog.c: Add checks.

5 years agosyslog: do not print bufp and len for commands that ignore them
Eugene Syromyatnikov [Wed, 26 Sep 2018 22:42:27 +0000 (00:42 +0200)]
syslog: do not print bufp and len for commands that ignore them

* syslog.c (SYS_FUNC(syslog)): Defer printing of comma after the first
argument to the specific command handlers, return RVAL_DECODED without
additional printing for SYSLOG_ACTION_CLOSE, SYSLOG_ACTION_OPEN,
SYSLOG_ACTION_CLEAR, SYSLOG_ACTION_CONSOLE_OFF,
SYSLOG_ACTION_CONSOLE_ON, SYSLOG_ACTION_SIZE_UNREAD,
SYSLOG_ACTION_SIZE_BUFFER.
* tests/syslog.c: Add checks.

5 years agosyslog: fix switch statement indentation
Eugene Syromyatnikov [Wed, 26 Sep 2018 22:27:21 +0000 (00:27 +0200)]
syslog: fix switch statement indentation

* syslog.c (SYS_FUNC(syslog)): Decrease indentation level of case
clauses in the switch statement.

5 years agosyslog: print syslog command with verbose style, as it is not in UAPI
Eugene Syromyatnikov [Wed, 26 Sep 2018 16:56:15 +0000 (18:56 +0200)]
syslog: print syslog command with verbose style, as it is not in UAPI

* syslog.c (SYS_FUNC(syslog)): Print syslog_action_type using
XLAT_STYLE_VERBOSE.
* tests/syslog.c: Update expected output.

5 years agotests: update hppa workaround in remap_file_pages test
Dmitry V. Levin [Mon, 5 Aug 2019 19:01:36 +0000 (19:01 +0000)]
tests: update hppa workaround in remap_file_pages test

... to cater for the change of MAP_TYPE on hppa introduced
by Linux kernel commit v4.17-rc1~146^2~9.

* tests/remap_file_pages.c (main) [__hppa__ && MAP_TYPE != 0x03]
(MAP_TYPE_str): Define to "0x2b /* MAP_??? */".

5 years agoRemove AUDIT_ARCH_* fallback definitions from arch_get_personality.c files
Dmitry V. Levin [Mon, 5 Aug 2019 10:58:30 +0000 (10:58 +0000)]
Remove AUDIT_ARCH_* fallback definitions from arch_get_personality.c files

Since xlat/audit_arch.h provides definitions for all AUDIT_ARCH_*
constants, remove their fallback definitions from other files.

* get_personality.c [SUPPORTED_PERSONALITIES > 1]: Include
"xlat/elf_em.h" and "xlat/audit_arch.h" under XLAT_MACROS_ONLY.
* linux/aarch64/arch_get_personality.c (AUDIT_ARCH_ARM): Remove.
* linux/powerpc64/arch_get_personality.c (AUDIT_ARCH_PPC): Remove.
* linux/riscv/arch_get_personality.c (AUDIT_ARCH_RISCV32): Remove.
* linux/s390x/arch_get_personality.c (AUDIT_ARCH_S390): Remove.
* linux/sparc64/arch_get_personality.c (AUDIT_ARCH_SPARC): Remove.
* linux/tile/arch_get_personality.c (AUDIT_ARCH_TILEGX32,
AUDIT_ARCH_TILEPRO): Remove.
* linux/x86_64/arch_get_personality.c (AUDIT_ARCH_I386): Remove.

5 years agoxlat: update audit_arch.in
Eugene Syromyatnikov [Sun, 25 Nov 2018 15:51:14 +0000 (16:51 +0100)]
xlat: update audit_arch.in

* xlat/audit_arch.in: Add fallback definitions.
(__AUDIT_ARCH_CONVENTION_MIPS64_N32, __AUDIT_ARCH_64BIT,
__AUDIT_ARCH_LE): New macros.
(AUDIT_ARCH_V850): New constant.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agoxlat: add elf_em.in
Eugene Syromyatnikov [Thu, 22 Nov 2018 09:45:02 +0000 (10:45 +0100)]
xlat: add elf_em.in

For now, it's a source of fallback values for AUDIT_ARCH_* constants.

* xlat/elf_em.in: New file.
* xlat/audit_arch.in (AUDIT_ARCH_ARM, AUDIT_ARCH_ARMEB, AUDIT_ARCH_FRV,
AUDIT_ARCH_MICROBLAZE, AUDIT_ARCH_OPENRISC): Define unconditionally.
* printsiginfo.c: Include "xlat/elf_em.h".
* tests/ptrace_syscall_info.c: Likewise.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agostrace.c: sync up strace -h message with the man page
Eugene Syromyatnikov [Wed, 24 Jul 2019 08:44:31 +0000 (10:44 +0200)]
strace.c: sync up strace -h message with the man page

Especially synopsis.

* strace.c (usage): copy synopsis over from the man page; add "-A"
and "-qq" options description.

5 years agostrace.1.in: add missing options to synopsis
Eugene Syromyatnikov [Wed, 24 Jul 2019 08:41:32 +0000 (10:41 +0200)]
strace.1.in: add missing options to synopsis

* strace.1.in (.SH SYNOPSIS): add second "-q", "-w", second "-y", "-z",
and "-Z" to normal call variant; add "-w", "-z" and "-Z" to syscall
statistics call variant.

5 years agostrace.c: split lines in strace -h output to fit into 80 columns
Eugene Syromyatnikov [Wed, 24 Jul 2019 08:26:21 +0000 (10:26 +0200)]
strace.c: split lines in strace -h output to fit into 80 columns

* strace.c (usage): split "-yy", "-c", "-e" options descriptions to fit
into 80 columns width.

5 years agostrace.c: move -v to Output format section in strace -h message
Eugene Syromyatnikov [Wed, 24 Jul 2019 08:20:52 +0000 (10:20 +0200)]
strace.c: move -v to Output format section in strace -h message

And also reword it into a more general and concise form in order to fit
into 80-columnt width.

* strace.c (usage): Move "-v" option to the "Output format" option of
the help message, reword its description.

5 years agostrace.c: add "-k" to strace -h list of options
Eugene Syromyatnikov [Wed, 24 Jul 2019 07:52:05 +0000 (09:52 +0200)]
strace.c: add "-k" to strace -h list of options

It is mentioned in the "Output format" section below, but not in the
usage section.

* strace.c (usage): Define K_OPT macro with a value that depends
on ENABLE_STACKTRACE macro presence, use it in the help output, undefine
it.

5 years agostrace.1.in: rewrite supported -e status options in a more compact form
Eugene Syromyatnikov [Wed, 24 Jul 2019 00:13:11 +0000 (02:13 +0200)]
strace.1.in: rewrite supported -e status options in a more compact form

* strace.1.in (.SS Filtering): Rewrite -e status value options in a
sublist.

5 years agostrace.1.in: reformat mpers support matrix table
Eugene Syromyatnikov [Tue, 23 Jul 2019 23:51:03 +0000 (01:51 +0200)]
strace.1.in: reformat mpers support matrix table

In order to make it much less wider.

* strace.1.in (.SH MULTIPLE PERSONALITY SUPPORT): Move additional text
in x86_64 line to notes under the table, clarify PowerPC specifics.

5 years agostrace.1.in: compact small named lists
Eugene Syromyatnikov [Tue, 23 Jul 2019 23:46:33 +0000 (01:46 +0200)]
strace.1.in: compact small named lists

And also rewrite nested .RS/.RE abomination.

* strace.1.in (.SS Output format): compact -X option values variants
using ".TQ".
(.SS Tampering): Rewrite -e inject=:when= expression variants using
".TP"/".TQ".
(.SH MULTIPLE PERSONALITY SUPPORT): compact optional features list using
".TQ".

5 years agostrace.1.in: rewrite conditional parts
Eugene Syromyatnikov [Tue, 23 Jul 2019 23:43:25 +0000 (01:43 +0200)]
strace.1.in: rewrite conditional parts

The current implementation doesn't work as intended since in case the
condition is false, .ig has no effect and it results in "warning: macro
'end_unwind_opt' not defined".  Rewrite it into something more dumb and
verbose, but hopefully correct.

* strace.1.in (.SH SYNOPSYS, .SS Output format): Prepend each
conditional line with respective ".if" instead of trying to wrap
it in ".ig".

5 years agostrace.1.in: add AUTHORS section
Eugene Syromyatnikov [Tue, 23 Jul 2019 18:57:25 +0000 (20:57 +0200)]
strace.1.in: add AUTHORS section

* strace.1.in: Add .SH AUTHORS, refer to the CREDITS file.

5 years agostrace.1.in: add a link to the current project's home page
Eugene Syromyatnikov [Tue, 23 Jul 2019 18:50:18 +0000 (20:50 +0200)]
strace.1.in: add a link to the current project's home page

* strace.1.in (.SH SEE ALSO): Add a link to strace's home page.

5 years agostrace.1.in: reorder options
Eugene Syromyatnikov [Tue, 23 Jul 2019 18:37:24 +0000 (20:37 +0200)]
strace.1.in: reorder options

In an attempt to make the order more sensible.

* strace.1.in (.SH OPTIONS): Insert ".SS General" at the beginning of
the section; move ".SS Startup" after ".SS General"; move ".SS Tracing"
after ".SS Startup"; move ".SS Filtering" after ".SS Startup"; insert
".SS Tampering" after ".SS Statistics"; move "-e expr" from ".SS
Filtering" to ".SS General"; move "-e abbrev", "-e verbose", "-e raw",
"-e read", "-e write", "-e kvm=vcpu" and "-v" from ".SS Filtering"
to ".SS Output format"; move "-e inject" and "-e fault" from
".SS Filtering" to ".SS Tampering".

5 years agoTreat PowerPC 64 LE as a separate architecture
Eugene Syromyatnikov [Wed, 24 Jul 2019 14:57:34 +0000 (16:57 +0200)]
Treat PowerPC 64 LE as a separate architecture

That seems to be the easiest way to properly handle the fact that
PPC64LE does not have a meaningful m32 personality.

* configure.ac: Move AC_C_BIGENDIAN before arch detection; determine
powerpc64/powerpc64le arch based on $ac_cv_c_bigendian value.
* linux/dummy.h [POWERPC64LE] (sys_oldselect): Redirect to printargs.
* linux/powerpc64le/arch_defs_.h: New file.
* linux/powerpc64le/arch_regs.c: Likewise.
* linux/powerpc64le/arch_rt_sigframe.c: Likewise.
* linux/powerpc64le/errnoent.h: Likewise.
* linux/powerpc64le/get_error.c: Likewise.
* linux/powerpc64le/get_scno.c: Likewise.
* linux/powerpc64le/get_syscall_args.c: Likewise.
* linux/powerpc64le/ioctls_arch0.h: Likewise.
* linux/powerpc64le/ioctls_inc0.h: Likewise.
* linux/powerpc64le/raw_syscall.h: Likewise.
* linux/powerpc64le/rt_sigframe.h: Likewise.
* linux/powerpc64le/set_error.c: Likewise.
* linux/powerpc64le/set_scno.c: Likewise.
* linux/powerpc64le/syscallent.h: Likewise.
* linux/powerpc64le/userent.h: Likewise.
* Makefile.am (EXTRA_DIST): Add them.
* tests/ipc_msg.c: Check for POWERPC64LE definition in addition to
POWERPC64.
* util.c (getllval): Add check for POWERPC64LE definition in addition to
POWERPC64.
* strace.1.in (.SH MULTIPLE PERSONALITY SUPPORT): Mention that only big
endian PowerPC 64 has mpers support.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agoFix invalid free in trace_close_memstream
Pierre Marsais [Sun, 4 Aug 2019 15:39:29 +0000 (16:39 +0100)]
Fix invalid free in trace_close_memstream

In maybe_switch_tcbs we exchange the pointers to the memstream's buffers
between 2 tcb, however the libc doesn't know and keeps updating the
tcb->memfptr as if the exchange didn't happen.  This leads to
unsynchronized tcb->memfptr and tcb->outf and invalid frees.
Adding a new indirection fixes the problem.

* stage_output.c (struct staged_output_data): New struct.
(strace_open_memstream, strace_close_memstream): Use it.
* defs.h (struct tcb): Replace real_outf, memfptr, and memfloc
with a pointer to struct staged_output_data.
* strace.c (maybe_switch_tcbs): Use it.
* syscall.c (print_syscall_resume): Ditto.

Signed-off-by: Pierre Marsais <pierre.marsais@lse.epita.fr>
5 years agotests: fix expected output for some ipc tests
Dmitry V. Levin [Sun, 4 Aug 2019 08:47:00 +0000 (08:47 +0000)]
tests: fix expected output for some ipc tests

* tests/gen_tests.in (ipc_msgbuf-Xraw, ipc_shm, ipc_shm-Xabbrev,
ipc_shm-Xverbose): Adjust -a argument.

5 years agotests: check the latest MSG_TRUNC decoding fix
Dmitry V. Levin [Fri, 2 Aug 2019 16:53:02 +0000 (16:53 +0000)]
tests: check the latest MSG_TRUNC decoding fix

* tests/recv-MSG_TRUNC.c: New file.
* tests/recvfrom-MSG_TRUNC.c: Likewise.
* tests/gen_tests.in (recv-MSG_TRUNC, recvfrom-MSG_TRUNC): New entries.
* tests/pure_executables.list: Add recv-MSG_TRUNC and
recvfrom-MSG_TRUNC.
* tests/.gitignore: Likewise.

5 years agonet: Fix access beyond tracee buffer for MSG_TRUNC receives
Jeremy Kerr [Fri, 2 Aug 2019 03:01:29 +0000 (11:01 +0800)]
net: Fix access beyond tracee buffer for MSG_TRUNC receives

The recv(), recvfrom() and recvmsg() calls allow a MSG_TRUNC flag, which
indicates that the kernel should return the available size of an
incoming message, rather than the received size.

When strace-ing a truncated recv(), strace will try to access a
return-value size area of the tracee's buffer, which may be larger than
the actual buffer:

  $ obj/strace -e trace=recvfrom ~/tmp/recv-test
  recvfrom(3, "\1\2\3\4\0\0\0\0", 4, MSG_TRUNC, NULL, NULL) = 8

If I add a non-readable guard page after the tracee's recv buffer, we
see strace failing to read the vm area:

  $ obj/strace -e trace=recvfrom ~/tmp/recv-test+guard
  recvfrom(3, obj/strace: umoven: short read (4 < 8) @0x7f0b0d7ddffc
  0x7f0b0d7ddffc, 4, MSG_TRUNC, NULL, NULL) = 8

This change restricts the maximum read size to the size of the tracee's
actual buffer.

The recvmsg() handler will do the right thing by using the .iov_len
data, so no change is required there.

* net.c (sys_recv, sys_recvfrom): Clamp maximum sockbuf size.

5 years agoAdd xlat description structure
Eugene Syromyatnikov [Sun, 19 Aug 2018 17:53:06 +0000 (19:53 +0200)]
Add xlat description structure

Rename struct xlat to struct xlat_data and make struct xlat an xlat
descriptor that contains various information about xlat.
So far it's the type and the number of items.

As a result, xlookup/printxval now have enough information for handling
xlat depending on its type, so *index/*_search API is not needed any
longer.

* xlat.h (struct xlat_data): Rename from struct xlat.
(struct xlat): New type definition.
* xlat.c (xlat_search, printxval_sized, printxval_searchn_ex, xlat_idx,
printxval_indexn_ex, printxval_dispatch_ex): Remove.
(xlookup): Handle xlat_data based on xlat type.
(xlat_search_eq_or_less, xlookup_le): New functions.
(sprintflags_ex, printflags_ex): Update.
* xlat/gen.sh (gen_header): Add handling for #sorted, generate new
struct xlat descriptor.
* defs.h (arp_hardware_types_size, ethernet_protocols_size,
inet_protocols_size, evdev_abs_size, xlat_search, xlat_idx,
printxval_searchn_ex, printxval_searchn, printxval_search,
printxval_search_ex, printxval_indexn_ex, printxval_indexn,
printxval_index, printxval_index_ex, printxval_dispatch_ex,
printxval_dispatch): Remove.
(enum xlat_style_private_flag_bits): Remove PAF_INDEX_XLAT_SORTED_BIT
and PAF_INDEX_XLAT_VALUE_INDEXED_BIT.
(enum xlat_style_private_flag): Remove PAF_INDEX_XLAT_SORTED and
PAF_INDEX_XLAT_VALUE_INDEXED.
(print_array_ex): Remove index_xlat_size argument.
(xlookup_le): New declaration.
(printxval_ex): New macro.
* dyxlat.c (struct dyxlat): Remove used field (use xlat.size instead),
embed struct xlat, add pointer to struct xlat_data.
(MARK_END): Remove.
(dyxlat_alloc, dyxlat_free, dyxlat_get, dyxlat_add_pair): Update in
accordance with the structure changes.
* evdev.c (evdev_abs_size): Remove.
(keycode_ioctl): Use printxval instead of printxval_index.
(decode_bitset): Remove.
(decode_bitset_): Rename to decode_bitset, remove decode_nr_size and xt
arguments, call printxval instead of printxval_dispatch.
(bit_ioctl, evdev_read_ioctl): Do not pass xlat type to decode_bitset.
* fsconfig.c (SYS_FUNC(fsconfig)): Use printxval instead of
printxval_index.
* print_fields.h (PRINT_FIELD_XVAL_SORTED_SIZED,
PRINT_FIELD_XVAL_INDEX): Remove.
* nlattr.h (struct decode_nla_xlat_opts): Remove xlat_size and xt
fields.
* nlattr.c (decode_nla_meminfo): Do not pass
PAF_INDEX_XLAT_VALUE_INDEXED flag and netlink_sk_meminfo_indices size
in a print_array_ex call.
(decode_nla_xval): Call printxval_ex instead of printxval_dispatch_ex.
(decode_nla_ether_proto, decode_nla_ip_proto): Do not pass xlat_size and
xt fields in opts.
(decode_nla_flags): Remove XT_INDEXED unsupported warning.
* process.c (struct_user_offsets_data): Rename from struct_user_offsets,
change type to struct xlat_data[].
(struct_user_offsets): New xlat description.
(print_user_offset_addr): Rewrite using xlookup_le.
* util.c (print_array_ex): Remove index_xlat_size argument, simply call
printxval_ex for index printing.
* aio.c (tprint_lio_opcode): Use printxval_ex instead of
printxval_indexn_ex.
* bpf.c: Use printxval instead of printxval_index; use PRINT_FIELD_XVAL
instead of PRINT_FIELD_XVAL_INDEX.
* bpf_filter.c (print_bpf_filter_code): Use printxval instead of
printxval_index.
* ioctl.c (evdev_decode_number): Use printxval instead of
printxval_indexn.
* kvm.c (kvm_ioctl_decode_check_extension): Use printxval64 instead of
printxval_index.
(kvm_ioctl_run_attach_auxstr): Use xlookup instead of xlat_idx.
* net.c: Use printxval instead of printxval_search/printxval_index, use
printxval_ex instead of printxval_searchn_ex.
* netlink.c (get_fd_nl_family): Rewrite using xlat descriptor structure.
* netlink_packet_diag.c (decode_packet_diag_msg): Use PRINT_FIELD_XVAL
instead of PRINT_FIELD_XVAL_SORTED_SIZED.
* netlink_smc_diag.c (decode_smc_diag_shutdown): Remove ARRSZ_PAIR
wrapper.
(decode_smc_diag_fallback): Use printxval_ex instead of
printxval_search_ex.
(decode_smc_diag_msg): Use PRINT_FIELD_XVAL instead of
PRINT_FIELD_XVAL_INDEX.
* print_statfs.c (print_statfs_type): Use printxval instead of
printxval_search.
* ptrace_syscall_info.c (print_ptrace_syscall_info): Use
PRINT_FIELD_XVAL instead of PRINT_FIELD_XVAL_INDEX.
* rtnl_link.c (decode_ifla_inet6_flags, decode_ifla_inet6_agm):
Likewise.
(decode_nla_tun_type, decode_ifla_xdp_attached): Remove xlat_size,
xt fields.
(decode_ifla_inet_conf, decode_ifla_inet6_conf, decode_ifla_inet6_stats,
decode_ifla_inet6_icmp6_stats): Remove PAF_INDEX_XLAT_VALUE_INDEXED flag
and ARRSZ_PAIR wrapper in print_array_ex calls.
(decode_ifinfomsg): Use PRINT_FIELD_XVAL instead of
PRINT_FIELD_XVAL_SORTED_SIZED.
* rtnl_route.c (decode_nla_rt_proto): Use printxval instead of
printxval_search.
* sock.c (print_ifreq): Use PRINT_FIELD_XVAL instead of
PRINT_FIELD_XVAL_SORTED_SIZED.
* sockaddr.c (print_sockaddr_data_ll, print_sockaddr_data_bt,
print_sockaddr): Use printxval instead of printxval_search and
printxval_index.
* time.c (getitimer, osf_getitimer, setitimer, osf_setitimer,
printclockname): Use printxval instead of printxval_index.
(do_adjtimex): Use xlookup instead of xlat_idx.
* tests/btrfs.c: Update xlat handling, use struct xlat_data instead of
struct xlat for XLAT() arrays.
* tests/ioctl_block.c: Likewise.
* tests/ioctl_rtc.c: Likewise.
* tests/printflags.c: Likewise.
* tests/printxval.c: Likewise.
* tests/prlimit64.c: Likewise.
* tests/setrlimit.c: Likewise.
* tests/socketcall.c: Likewise.
* tests/xgetrlimit.c: Likewise.
* tests/xstatfsx.c: Likewise.
* xlat/af_packet_versions.in: Add #value_indexed.
* xlat/arp_hardware_types.in: Add #sorted.
* xlat/ax25_protocols.in: Likewise.
* xlat/bluetooth_l2_cid.in: Likewise.
* xlat/bluetooth_l2_psm.in: Likewise.
* xlat/ethernet_protocols.in: Likewise.
* xlat/evdev_ff_types.in: Likewise.
* xlat/fsmagic.in: Likewise.
* xlat/hw_breakpoint_type.in: Likewise.
* xlat/iffflags.in: Likewise.
* xlat/inet6_if_flags.in: Likewise.
* xlat/inet_protocols.in: Likewise.
* xlat/msgctl_flags.in: Likewise.
* xlat/perf_hw_cache_id.in: Likewise.
* xlat/perf_hw_cache_op_id.in: Likewise.
* xlat/perf_hw_cache_op_result_id.in: Likewise.
* xlat/perf_hw_id.in: Likewise.
* xlat/perf_sw_ids.in: Likewise.
* xlat/perf_type_id.in: Likewise.
* xlat/routing_protocols.in: Likewise.
* xlat/semctl_flags.in: Likewise.
* xlat/shmctl_flags.in: Likewise.
* xlat/smc_decl_codes.in: Likewise.
* xlat/sock_ax25_options.in: Likewise.
* xlat/sock_bluetooth_options.in: Likewise.
* xlat/sock_dccp_options.in: Likewise.
* xlat/sock_tipc_options.in: Likewise.
* xlat/socketlayers.in: Likewise.
* xlat/v4l2_control_classes.in: Likewise.
* xlat/v4l2_pix_fmts.in: Likewise.
* xlat/v4l2_sdr_fmts.in: Likewise.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agoNEWS: retroactively mention that -z/-Z fix addresses Debian bug #176376
Eugene Syromyatnikov [Tue, 23 Jul 2019 23:05:57 +0000 (01:05 +0200)]
NEWS: retroactively mention that -z/-Z fix addresses Debian bug #176376

5 years agoxlat/v4l2_pix_fmts.in: work around V4L2_PIX_FMT_BGRA444 value change
Eugene Syromyatnikov [Tue, 23 Jul 2019 22:32:53 +0000 (00:32 +0200)]
xlat/v4l2_pix_fmts.in: work around V4L2_PIX_FMT_BGRA444 value change

* xlat/v4l2_pix_fmts.in: Undefine V4L2_PIX_FMT_BGRA444 as it has changed
its value in Linux commit v5.2-rc5-403-g22be8233b34f.

5 years agoREADME-configure: recommend 'make -k check' instead of 'make check'
Anatoly Pugachev [Thu, 18 Jul 2019 15:02:56 +0000 (18:02 +0300)]
README-configure: recommend 'make -k check' instead of 'make check'

* maint/install.texi: Replace 'make check' with 'make -k check'.
* README-configure: Regenerate.

5 years agoGeneralise hardware address printing
Eugene Syromyatnikov [Fri, 31 Aug 2018 04:00:29 +0000 (06:00 +0200)]
Generalise hardware address printing

* defs.h [!MAX_ADDR_LEN] (MAX_ADDR_LEN): New macro.
(sprint_hwaddr): New declaration.
(print_hwaddr): New inline function, a wrapper for sprint_hwaddr.
* print_fields.h (PRINT_FIELD_HWADDR_SZ): New macro.
* print_mac.c: Include "xlat/arp_hardware_types.h" under
XLAT_MACROS_ONLY.
[!MAX_ADDR_LEN] (MAX_ADDR_LEN): Remove.
(sprint_hwaddr): New function.
* sock.c (print_ifreq) <SIOCSIFHWADDR, SIOCGIFHWADDR>: Print hardware
address using PRINT_FIELD_HWADDR_SZ.

5 years agoopen: implement sprint_open_modes using sprintflags_ex
Eugene Syromyatnikov [Fri, 31 Aug 2018 04:21:21 +0000 (06:21 +0200)]
open: implement sprint_open_modes using sprintflags_ex

* defs.h (sprintflags_ex): Add "sep" argument.
(sprintflags): Pass '\0' in "sep" argument.
* open.c (sprint_open_modes): Use sprintflags_ex for printing
open_mode_flags.
* xlat.c (sprintflags_ex): Add "sep" argument, use it as initial
separator (if not nul).

5 years agoConsistently define __NR_* constants
Dmitry V. Levin [Tue, 16 Jul 2019 17:46:47 +0000 (17:46 +0000)]
Consistently define __NR_* constants

Include <asm/unistd.h> from "scno.h", include "scno.h" instead of
<asm/unistd.h>, do not include <asm/unistd.h> where "scno.h" is already
included.

* scno.head: Include <asm/unistd.h>.
* clone.c: Include "scno.h" instead of <asm/unistd.h>.
* syscall.c: Likewise.
* tests/_newselect.c: Likewise.
* tests/accept.c: Likewise.
* tests/accept_compat.h: Likewise.
* tests/access.c: Likewise.
* tests/acct.c: Likewise.
* tests/aio.c: Likewise.
* tests/alarm.c: Likewise.
* tests/answer.c: Likewise.
* tests/attach-f-p.c: Likewise.
* tests/brk.c: Likewise.
* tests/chmod.c: Likewise.
* tests/chown.c: Likewise.
* tests/chown32.c: Likewise.
* tests/chroot.c: Likewise.
* tests/clock_adjtime.c: Likewise.
* tests/clock_nanosleep.c: Likewise.
* tests/clock_xettime.c: Likewise.
* tests/creat.c: Likewise.
* tests/delay.c: Likewise.
* tests/delete_module.c: Likewise.
* tests/dev-yy.c: Likewise.
* tests/dup2.c: Likewise.
* tests/dup3.c: Likewise.
* tests/epoll_create.c: Likewise.
* tests/epoll_create1.c: Likewise.
* tests/epoll_ctl.c: Likewise.
* tests/epoll_pwait.c: Likewise.
* tests/epoll_wait.c: Likewise.
* tests/eventfd.c: Likewise.
* tests/faccessat.c: Likewise.
* tests/fadvise64.c: Likewise.
* tests/fadvise64_64.c: Likewise.
* tests/fallocate.c: Likewise.
* tests/fanotify_init.c: Likewise.
* tests/fanotify_mark.c: Likewise.
* tests/fchdir.c: Likewise.
* tests/fchmod.c: Likewise.
* tests/fchmodat.c: Likewise.
* tests/fchown.c: Likewise.
* tests/fchown32.c: Likewise.
* tests/fchownat.c: Likewise.
* tests/fcntl.c: Likewise.
* tests/fcntl64.c: Likewise.
* tests/fdatasync.c: Likewise.
* tests/file_handle.c: Likewise.
* tests/flock.c: Likewise.
* tests/fstat.c: Likewise.
* tests/fstat64.c: Likewise.
* tests/fstatat64.c: Likewise.
* tests/fstatfs.c: Likewise.
* tests/fstatfs64.c: Likewise.
* tests/fsync.c: Likewise.
* tests/ftruncate.c: Likewise.
* tests/ftruncate64.c: Likewise.
* tests/futex.c: Likewise.
* tests/futimesat.c: Likewise.
* tests/get_mempolicy.c: Likewise.
* tests/get_sigset_size.c: Likewise.
* tests/getcpu.c: Likewise.
* tests/getcwd.c: Likewise.
* tests/getdents.c: Likewise.
* tests/getdents64.c: Likewise.
* tests/getegid32.c: Likewise.
* tests/geteuid32.c: Likewise.
* tests/getgid.c: Likewise.
* tests/getgid32.c: Likewise.
* tests/getgroups.c: Likewise.
* tests/getgroups32.c: Likewise.
* tests/getpgrp.c: Likewise.
* tests/getpid.c: Likewise.
* tests/getrandom.c: Likewise.
* tests/getresgid.c: Likewise.
* tests/getresgid32.c: Likewise.
* tests/getresuid.c: Likewise.
* tests/getresuid32.c: Likewise.
* tests/getrlimit.c: Likewise.
* tests/getrusage.c: Likewise.
* tests/gettid.c: Likewise.
* tests/getuid.c: Likewise.
* tests/getuid32.c: Likewise.
* tests/getxxid.c: Likewise.
* tests/init_module.c: Likewise.
* tests/inject-nf.c: Likewise.
* tests/inotify.c: Likewise.
* tests/inotify_init1.c: Likewise.
* tests/ioctl_inotify.c: Likewise.
* tests/ioctl_loop.c: Likewise.
* tests/ioctl_perf.c: Likewise.
* tests/ioctl_uffdio.c: Likewise.
* tests/ioperm.c: Likewise.
* tests/iopl.c: Likewise.
* tests/ioprio.c: Likewise.
* tests/ipc.c: Likewise.
* tests/ipc_msgbuf.c: Likewise.
* tests/kexec_load.c: Likewise.
* tests/keyctl.c: Likewise.
* tests/kill.c: Likewise.
* tests/ksysent.c: Likewise.
* tests/lchown.c: Likewise.
* tests/lchown32.c: Likewise.
* tests/libmmsg.c: Likewise.
* tests/libsocketcall.c: Likewise.
* tests/link.c: Likewise.
* tests/linkat.c: Likewise.
* tests/llseek.c: Likewise.
* tests/localtime.c: Likewise.
* tests/lookup_dcookie.c: Likewise.
* tests/lseek.c: Likewise.
* tests/lstat.c: Likewise.
* tests/lstat64.c: Likewise.
* tests/madvise.c: Likewise.
* tests/migrate_pages.c: Likewise.
* tests/mkdir.c: Likewise.
* tests/mkdirat.c: Likewise.
* tests/mknod.c: Likewise.
* tests/mknodat.c: Likewise.
* tests/mlock.c: Likewise.
* tests/modify_ldt.c: Likewise.
* tests/move_pages.c: Likewise.
* tests/mq_sendrecv.c: Likewise.
* tests/newfstatat.c: Likewise.
* tests/nsyscalls.c: Likewise.
* tests/old_mmap.c: Likewise.
* tests/oldfstat.c: Likewise.
* tests/oldlstat.c: Likewise.
* tests/oldselect-efault.c: Likewise.
* tests/oldselect.c: Likewise.
* tests/oldstat.c: Likewise.
* tests/open.c: Likewise.
* tests/openat.c: Likewise.
* tests/osf_utimes.c: Likewise.
* tests/pause.c: Likewise.
* tests/perf_event_open.c: Likewise.
* tests/perf_event_open_nonverbose.c: Likewise.
* tests/pipe.c: Likewise.
* tests/pipe2.c: Likewise.
* tests/poll.c: Likewise.
* tests/ppoll.c: Likewise.
* tests/prctl-arg2-intptr.c: Likewise.
* tests/prctl-dumpable.c: Likewise.
* tests/prctl-no-args.c: Likewise.
* tests/prctl-pdeathsig.c: Likewise.
* tests/prctl-seccomp-filter-v.c: Likewise.
* tests/prctl-seccomp-strict.c: Likewise.
* tests/prctl-securebits.c: Likewise.
* tests/prctl-spec-inject.c: Likewise.
* tests/prctl-tid_address.c: Likewise.
* tests/prctl-tsc.c: Likewise.
* tests/prlimit64.c: Likewise.
* tests/process_vm_readv.c: Likewise.
* tests/process_vm_writev.c: Likewise.
* tests/pselect6.c: Likewise.
* tests/ptrace.c: Likewise.
* tests/qual_inject-error-signal.c: Likewise.
* tests/qual_inject-retval.c: Likewise.
* tests/qual_inject-signal.c: Likewise.
* tests/quotactl-xfs.c: Likewise.
* tests/quotactl.c: Likewise.
* tests/read-write.c: Likewise.
* tests/readahead.c: Likewise.
* tests/readdir.c: Likewise.
* tests/readlink.c: Likewise.
* tests/readlinkat.c: Likewise.
* tests/reboot.c: Likewise.
* tests/rename.c: Likewise.
* tests/renameat.c: Likewise.
* tests/request_key.c: Likewise.
* tests/rmdir.c: Likewise.
* tests/rt_sigpending.c: Likewise.
* tests/rt_sigprocmask.c: Likewise.
* tests/rt_sigsuspend.c: Likewise.
* tests/rt_sigtimedwait.c: Likewise.
* tests/rt_tgsigqueueinfo.c: Likewise.
* tests/s390_guarded_storage.c: Likewise.
* tests/s390_pci_mmio_read_write.c: Likewise.
* tests/s390_runtime_instr.c: Likewise.
* tests/s390_sthyi.c: Likewise.
* tests/sched_get_priority_mxx.c: Likewise.
* tests/sched_rr_get_interval.c: Likewise.
* tests/sched_xetaffinity.c: Likewise.
* tests/sched_xetattr.c: Likewise.
* tests/sched_xetparam.c: Likewise.
* tests/sched_xetscheduler.c: Likewise.
* tests/sched_yield.c: Likewise.
* tests/seccomp-filter-v.c: Likewise.
* tests/seccomp-filter.c: Likewise.
* tests/seccomp-strict.c: Likewise.
* tests/seccomp_get_action_avail.c: Likewise.
* tests/select.c: Likewise.
* tests/sendfile.c: Likewise.
* tests/sendfile64.c: Likewise.
* tests/setdomainname.c: Likewise.
* tests/setfsgid.c: Likewise.
* tests/setfsgid32.c: Likewise.
* tests/setfsuid.c: Likewise.
* tests/setfsuid32.c: Likewise.
* tests/setgid.c: Likewise.
* tests/setgid32.c: Likewise.
* tests/setgroups.c: Likewise.
* tests/setgroups32.c: Likewise.
* tests/sethostname.c: Likewise.
* tests/setns.c: Likewise.
* tests/setregid.c: Likewise.
* tests/setregid32.c: Likewise.
* tests/setresgid.c: Likewise.
* tests/setresgid32.c: Likewise.
* tests/setresuid.c: Likewise.
* tests/setresuid32.c: Likewise.
* tests/setreuid.c: Likewise.
* tests/setreuid32.c: Likewise.
* tests/setrlimit.c: Likewise.
* tests/setuid.c: Likewise.
* tests/setuid32.c: Likewise.
* tests/sigaction.c: Likewise.
* tests/signal.c: Likewise.
* tests/signalfd4.c: Likewise.
* tests/sigpending.c: Likewise.
* tests/sigprocmask.c: Likewise.
* tests/sigreturn.c: Likewise.
* tests/sigsuspend.c: Likewise.
* tests/socketcall.c: Likewise.
* tests/splice.c: Likewise.
* tests/stack-fcall-3.c: Likewise.
* tests/stat.c: Likewise.
* tests/stat64.c: Likewise.
* tests/statfs.c: Likewise.
* tests/statfs64.c: Likewise.
* tests/status-none-threads.c: Likewise.
* tests/status-unfinished-threads.c: Likewise.
* tests/statx.c: Likewise.
* tests/swap.c: Likewise.
* tests/sxetmask.c: Likewise.
* tests/symlink.c: Likewise.
* tests/symlinkat.c: Likewise.
* tests/sync.c: Likewise.
* tests/sync_file_range.c: Likewise.
* tests/sync_file_range2.c: Likewise.
* tests/syslog.c: Likewise.
* tests/tee.c: Likewise.
* tests/threads-execve.c: Likewise.
* tests/time.c: Likewise.
* tests/timer_create.c: Likewise.
* tests/timer_xettime.c: Likewise.
* tests/timerfd_xettime.c: Likewise.
* tests/times-fail.c: Likewise.
* tests/times.c: Likewise.
* tests/truncate.c: Likewise.
* tests/truncate64.c: Likewise.
* tests/ugetrlimit.c: Likewise.
* tests/umount.c: Likewise.
* tests/umount2.c: Likewise.
* tests/umoven-illptr.c: Likewise.
* tests/umovestr-illptr.c: Likewise.
* tests/uname.c: Likewise.
* tests/unix-pair-send-recv.c: Likewise.
* tests/unlink.c: Likewise.
* tests/unlinkat.c: Likewise.
* tests/unshare.c: Likewise.
* tests/ustat.c: Likewise.
* tests/utime.c: Likewise.
* tests/utimensat.c: Likewise.
* tests/utimes.c: Likewise.
* tests/vhangup.c: Likewise.
* tests/vmsplice.c: Likewise.
* tests/waitid.c: Likewise.
* tests/waitpid.c: Likewise.
* tests/xet_robust_list.c: Likewise.
* tests/xet_thread_area_x86.c: Likewise.
* tests/xetitimer.c: Likewise.
* tests/xetpgid.c: Likewise.
* tests/xetpriority.c: Likewise.
* tests/xettimeofday.c: Likewise.
* strace.c: Do not include <asm/unistd.h>.
* ucopy.c: Likewise.
* tests/add_key.c: Likewise.
* tests/aio_pgetevents.c: Likewise.
* tests/bpf-obj_get_info_by_fd.c: Likewise.
* tests/bpf.c: Likewise.
* tests/copy_file_range.c: Likewise.
* tests/execveat.c: Likewise.
* tests/finit_module.c: Likewise.
* tests/fsconfig.c: Likewise.
* tests/fsmount.c: Likewise.
* tests/fsopen.c: Likewise.
* tests/fspick.c: Likewise.
* tests/getegid.c: Likewise.
* tests/geteuid.c: Likewise.
* tests/getppid.c: Likewise.
* tests/inotify_init.c: Likewise.
* tests/io_uring_enter.c: Likewise.
* tests/io_uring_register.c: Likewise.
* tests/io_uring_setup.c: Likewise.
* tests/kcmp.c: Likewise.
* tests/kern_features.c: Likewise.
* tests/kernel_version.c: Likewise.
* tests/kexec_file_load.c: Likewise.
* tests/maybe_switch_current_tcp.c: Likewise.
* tests/mbind.c: Likewise.
* tests/membarrier.c: Likewise.
* tests/memfd_create.c: Likewise.
* tests/mlock2.c: Likewise.
* tests/move_mount.c: Likewise.
* tests/open_tree.c: Likewise.
* tests/pidfd_send_signal.c: Likewise.
* tests/pkey_alloc.c: Likewise.
* tests/pkey_free.c: Likewise.
* tests/pkey_mprotect.c: Likewise.
* tests/preadv2-pwritev2.c: Likewise.
* tests/ptrace_syscall_info.c: Likewise.
* tests/remap_file_pages.c: Likewise.
* tests/renameat2.c: Likewise.
* tests/riscv_flush_icache.c: Likewise.
* tests/set_mempolicy.c: Likewise.
* tests/test_printstrn.c: Likewise.
* tests/test_ucopy.c: Likewise.
* tests/userfaultfd.c: Likewise.

5 years agoaarch64: remove syscall numbers range [1024...1079] from syscallent.h
Dmitry V. Levin [Tue, 16 Jul 2019 17:46:47 +0000 (17:46 +0000)]
aarch64: remove syscall numbers range [1024...1079] from syscallent.h

Remove support for decoding syscalls in range [1024...1079] on aarch64
as this range has never been implemented in mainline kernel releases.

* linux/aarch64/syscallent.h [1024...1079]: Remove.
* NEWS: Mention this change.

5 years agotests: skip socketcall test on arm eabi
Dmitry V. Levin [Tue, 16 Jul 2019 17:46:47 +0000 (17:46 +0000)]
tests: skip socketcall test on arm eabi

arm eabi has no socketcall even if __NR_socketcall is defined.

* tests/socketcall.c: Conditionalize on !__ARM_EABI__ along with
__NR_socketcall.

5 years agotests: robustify statx test
Dmitry V. Levin [Tue, 16 Jul 2019 17:46:47 +0000 (17:46 +0000)]
tests: robustify statx test

Do not assume that <linux/stat.h> defines struct statx.

* configure.ac (AC_CHECK_TYPES): Check for struct statx in
<linux/stat.h>.
* tests/statx.c: Conditionalize on HAVE_STRUCT_STATX along with
__NR_statx.

5 years agotests: robustify old_mmap test
Dmitry V. Levin [Tue, 16 Jul 2019 17:46:47 +0000 (17:46 +0000)]
tests: robustify old_mmap test

Do not assume that old mmap syscall is implemented in the kernel
when __NR_mmap is defined.

* tests/alarm.c (main): Print mmap return code using sprintrc,
do not invoke mprotect if mmap is not implemented.

5 years agotests: robustify alarm test
Dmitry V. Levin [Tue, 16 Jul 2019 17:46:47 +0000 (17:46 +0000)]
tests: robustify alarm test

Do not assume that alarm syscall always succeeds.

* tests/alarm.c (main): Use sprintrc.

5 years agodefs.h: add ability to pass style to printxval_index_ex macro
Eugene Syromyatnikov [Fri, 1 Mar 2019 18:31:41 +0000 (19:31 +0100)]
defs.h: add ability to pass style to printxval_index_ex macro

So it matches its name.

* defs.h (printxval_index_ex): Add style__ macro, pass it as the 5th
argument to the printxval_indexn_ex call.

5 years agotests: extend coverage of syslog tests
Bharath Vedartham [Thu, 28 Feb 2019 12:51:13 +0000 (18:21 +0530)]
tests: extend coverage of syslog tests

The current syslog test covers only those cases where the type parameter
is one of SYSLOG_ACTION_READ, SYSLOG_ACTION_READ_ALL,
SYSLOG_ACTION_READ_CLEAR as per codecov.

Add test case to cover the default case.

* tests/syslog.c (SYSLOG_ACTION_SIZE_BUFFER): New macro.
(main): Check SYSLOG_ACTION_SIZE_BUFFER decoding.

Co-Authored-by: Eugene Syromyatnikov <evgsyr@gmail.com>
5 years agoaio: assorted iocb decoder updates
Eugene Syromyatnikov [Mon, 27 Aug 2018 20:17:17 +0000 (22:17 +0200)]
aio: assorted iocb decoder updates

* xlat/aio_iocb_flags.in: New file.
* defs.h (pollflags, rwf_flags): New declarations.
* configure.ac (AC_CHECK_MEMBERS): Check for aio_flags and aio_rw_flags
fields of struct iocb.
* aio.c [HAVE_STRUCT_IOCB_AIO_FLAGS]: Include "xlat/aio_iocb_flags.h".
(AIO_RW_FLAGS_FIELD): New macro definition, defined based on the
presence of HAVE_STRUCT_IOCB_AIO_RW_FLAGS macro.
(iocb_sub): Add SUB_POLL.
(tprint_lio_opcode): Change IOCB_CMD_POLL subtype to SUB_POLL.
(print_common_flags): Conditionalize on HAVE_STRUCT_IOCB_AIO_FLAGS
instead of IOCB_FLAG_RESFD.  Print aio_flags using aio_iocb_flags xlat.
(print_iocb_header): Always print aio_data.  Print aio_rw_flags if it
is non-zero.  Print aio_reqprio based on the presence of
IOCB_FLAG_IOPRIO flag in aio_flags (use print_ioprio if it set and print
as a signed integer otherwise).
(print_iocb): Decode SUB_POLL subtype.
* tests/aio.c: Update expected output.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agoioprio: add print_ioprio function
Eugene Syromyatnikov [Mon, 27 Aug 2018 20:16:17 +0000 (22:16 +0200)]
ioprio: add print_ioprio function

That respects xlat style settings.

* ioprio.c (print_ioprio): New function.
* defs.h (print_ioprio): New declaration.

5 years agotests: serialize bpf-obj_get_info_by_fd based executables
Dmitry V. Levin [Mon, 15 Jul 2019 15:54:51 +0000 (15:54 +0000)]
tests: serialize bpf-obj_get_info_by_fd based executables

Concurrent execution of many bpf-obj_get_info_by_fd based tests may
lead to a temporary resource shortage that causes them to fail with
the following error diagnostics:

BPF_MAP_CREATE failed: Operation not permitted

Avoid this issue by serializing execution of all relevant tests.

* tests/lock_file.c: New file.
* tests/Makefile.am (libtests_a_SOURCES): Add lock_file.c
* tests/tests.h (lock_file_by_dirname): New prototype.
* tests/bpf-obj_get_info_by_fd.c (main): Call lock_file_by_dirname
to obtain an exclusive lock on bpf-obj_get_info_by_fd executable.

References: https://github.com/strace/strace/issues/74
References: https://github.com/strace/strace/issues/105

5 years agotests: fix build and run on alpha with fresh kernel headers
Dmitry V. Levin [Mon, 15 Jul 2019 17:11:27 +0000 (17:11 +0000)]
tests: fix build and run on alpha with fresh kernel headers

Fix tests on alpha with Linux kernel headers containing commits
v5.1-rc1~160^2~3^2~12 and v5.1-rc1~160^2~3^2~1.

* tests/getegid.c: Include "scno.h".
(main): Use sprintrc.
* tests/geteuid.c: Likewise.
* tests/getppid.c: Likewise.
* tests/getgid.c [__NR_getgid == __NR_getxgid]: Skip.
* tests/getuid.c [__NR_getuid == __NR_getxuid]: Skip.
* tests/getpid.c [__NR_getpid == __NR_getxpid]: Skip.
* tests/umount2.c (__NR_umount2): Remove.
(TEST_SYSCALL_NR): New macro.
(main): Use it instead of __NR_umount2.
* tests/ksysent.sed: Remove new __NR_get[gup]id aliases to traditional
__NR_getx[gup]id names (on alpha).
Prioritize __NR_umount over __NR_umount2, __NR_osf_shmat over __NR_shmat.
* NEWS: Mention these fixes.

5 years agocopyright-year-gen, file-date-gen: enhance error diagnostics
Dmitry V. Levin [Mon, 15 Jul 2019 12:04:48 +0000 (12:04 +0000)]
copyright-year-gen, file-date-gen: enhance error diagnostics

* copyright-year-gen: Prefix error message with the script name.
* file-date-gen: Likewise.  Bail out in case of invalid date.

5 years agoconfigure.ac: honor exit status of commands run by m4_esyscmd
Dmitry V. Levin [Mon, 15 Jul 2019 12:04:48 +0000 (12:04 +0000)]
configure.ac: honor exit status of commands run by m4_esyscmd

If the command run by m4_esyscmd exits with non-zero exit status,
autom4te shall terminate.

* m4/st_esyscmd_s.m4: New file.
* configure.ac: Replace m4_esyscmd with st_esyscmd_s.

References: https://github.com/strace/strace/issues/105

5 years agotests: test evdev bitset decoding more thoroughly
Eugene Syromyatnikov [Fri, 12 Jul 2019 12:31:44 +0000 (14:31 +0200)]
tests: test evdev bitset decoding more thoroughly

* tests/ioctl_evdev-success-v.test: Inject various values.
* tests/ioctl_evdev-success.test: Likewise.
* tests/ioctl_evdev-success.c (NUM_WORDS): New macro.
(struct evdev_check): Constify arg_ptr and print_arg args.
(invoke_test_syscall, test_evdev, print_input_absinfo, print_input_id,
print_mtslots): Add const qualifiers.
(print_getbit): Add const qualifiers, rewrite to expect trailing NULL
in the string array instead of leading string count.
(main): Set size for ev_more, ev_less, ev_zero arrays; replace leading
count element in ev_more_str, ev_less_str, ev_zero_str with trailing
NULL; replace ev_more_str and ev_less_str with ev_more_str_2/ev_less_str_2
and ev_more_str_3/ev_less_str_3 that differ by presence of flags that reside
beyond first two bytes; add static and const qualifiers where possible;
add key/key_sts_8/key_str_16 values; update a to provide either ev_more_str_2
or ev_more_str_3 and either key_str_8 or key_str_16 depending on inject_retval
value.

5 years agoevdev: fix array size calculation in decode_bitset_
Eugene Syromyatnikov [Fri, 12 Jul 2019 12:57:28 +0000 (14:57 +0200)]
evdev: fix array size calculation in decode_bitset_

max_nr is in bits (as it is a number of flags), result is in bytes, and
the array allocation has to be in personality words.

There's still an open question, however, what to do on big-endian
architectures when a non-divisible-by-4 value is returned.

* evdev.c (decode_bitset_): Declare size_bits, initialise it and use it
later instead of size; round up size by personality's word boundary.

5 years agoevdev: avoid bit vector decoding on non-successful and 0 return codes
Eugene Syromyatnikov [Fri, 12 Jul 2019 12:38:33 +0000 (14:38 +0200)]
evdev: avoid bit vector decoding on non-successful and 0 return codes

Reported by Clang.

    strace/evdev.c:157:3: note: The value 0 is assigned to 'size'
    #                size = tcp->u_rval * 8;
    #                ^~~~~~~~~~~~~~~~~~~~~~
    strace/evdev.c:158:2: warning: Declared variable-length array (VLA)
    has zero size
    #        char decoded_arg[size];
    #        ^

* evdev.c (decode_bitset_): Bail out before decoded_arg VLA definition.

5 years agofilter_qualify: export trace_set set
Chen Jingpiao [Thu, 3 May 2018 12:59:20 +0000 (20:59 +0800)]
filter_qualify: export trace_set set

In preparation for seccomp-assisted syscall filtering, export
trace_set set, which will be used to derive the BPF program.

* filter_qualify.c (trace_set): Remove static qualifier.
* number_set.h (trace_set): New declaration.

5 years agoPost-release administrivia
Dmitry V. Levin [Sat, 13 Jul 2019 11:48:01 +0000 (11:48 +0000)]
Post-release administrivia

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

5 years agoPrepare for 5.2 release v5.2
Dmitry V. Levin [Fri, 12 Jul 2019 12:13:14 +0000 (12:13 +0000)]
Prepare for 5.2 release

* NEWS: Update for 5.2 release.

5 years agoUpdate .mailmap
Dmitry V. Levin [Fri, 12 Jul 2019 12:13:14 +0000 (12:13 +0000)]
Update .mailmap

* .mailmap: Add both email addresses of Zhibin Li to avoid duplication
in CREDITS file.

5 years agoUpdate copyright headers
Dmitry V. Levin [Thu, 11 Jul 2019 17:51:22 +0000 (17:51 +0000)]
Update copyright headers

Headers updated automatically using maint/update_copyright_years.sh
script.

5 years agomaint/update_copyright_years.sh: take all commits into account
Dmitry V. Levin [Thu, 11 Jul 2019 17:51:22 +0000 (17:51 +0000)]
maint/update_copyright_years.sh: take all commits into account

This helps to avoid accidental shrinking of copyright years range.

* maint/update_copyright_years.sh: Take all commits into account
to find copyright years of the earliest and the latest commit.

5 years agoFix preprocessor indentation
Dmitry V. Levin [Thu, 11 Jul 2019 17:51:22 +0000 (17:51 +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 agotests: check status qualifier
Paul Chaignon [Mon, 1 Apr 2019 20:50:45 +0000 (22:50 +0200)]
tests: check status qualifier

This change adds 8 test cases for -e status with unfinished, failed,
none, successful, detached, and the whole set.  The test cases for
failed, successful, and the whole set use chdir(2).  Threaded test cases
for unfinished and none rely on a child thread execve'ing the lead
thread.  There are additional single-threaded tests for status=none and
status=unfinished.  The test case for detached interrupts strace while
attached to a sleeping process.

* tests/status.c: New file.
* tests/status-all.c: Likewise.
* tests/status-failed.c: Likewise.
* tests/status-detached.expected: Likewise.
* tests/status-none.c: Likewise.
* tests/status-none-threads.c: Likewise.
* tests/status-successful.c: Likewise.
* tests/status-unfinished-threads.c: Likewise.
* tests/status-unfinished.c: Likewise.
* tests/status-detached.test: New test.
* tests/status-none-threads.test: Likewise.
* tests/status-unfinished-threads.test: Likewise.
* tests/tests.h (test_status_chdir): New prototype.
* tests/.gitignore: Add status-all, status-failed, status-none,
status-none-threads, status-successful, status-unfinished,
and status-unfinished-threads.
* tests/gen_tests.in: Add status-all, status-failed, status-successful,
status-none, and status-unfinished.
* tests/pure_executables.list: Likewise.
* tests/Makefile.am (libtests_a_SOURCES): Add status.c.
(check_PROGRAMS): Add status-none-threads and status-unfinished-threads.
(status_none_threads_LDADD, status_unfinished_threads_LDADD): New
variables.
(MISC_TESTS): Add status-detached.test, status-none-threads.test, and
status-unfinished-threads.test.
(EXTRA_DIST): Add status-detached.expected.

Co-Authored-by: Burkhard Kohl <burkhard.kohl@intel.com>
Signed-off-by: Paul Chaignon <paul.chaignon@gmail.com>
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agoImplement -e status=set option
Paul Chaignon [Sat, 15 Jun 2019 05:32:03 +0000 (07:32 +0200)]
Implement -e status=set option

The status qualifier enables filtering based on the return status of
syscalls.  -z and -Z become aliases for -e status=successful and -e
status=failed.  Staged output is only enabled when at least one status
is filtered, that is, when the set is incomplete.

* signal.c (popcount32): Move ...
* defs.h (popcount32): ... here.
(not_failing_only, failing_only): Remove.
* filter_qualify.c (status_set): New number_set variable.
(statuses): New variable for names of statuses.
(statusstr_to_uint, qualify_status): New functions.
(qual_options): Handle status qualifier.
* number_set.c (get_number_setbit, is_complete_set): New functions.
* number_set.h (is_complete_set): New prototype.
(status_t): New enumeration for statuses.
(status_set): New prototype.
* strace.1.in: Document new status qualifier.
* strace.c (not_failing_only, failing_only): Remove.
(droptcb): Handle status=detached option.
(init): Handle new status qualifier, set status_set variable on -z and -Z
options, warn on -zZ and -Zz, use is_complete_set.
(maybe_switch_tcbs): Reopen memstream after tcb switch.
(print_event_exit): Handle status=unfinished option.
* syscall.c (syscall_entering_trace): Use is_complete_set.
(syscall_exiting_trace): Use is_complete_set, handle status=unavailable
option.
* NEWS: Mention this change.

Signed-off-by: Paul Chaignon <paul.chaignon@gmail.com>
5 years agoStage output for -z and -Z options
Paul Chaignon [Sat, 15 Jun 2019 05:21:44 +0000 (07:21 +0200)]
Stage output for -z and -Z options

-z and -Z options print only successful and failing syscalls respectively.
However, failure of syscall is only known after syscall return.  Thus, we
end up with something like this on, e.g., ENOENT:

  open("does_not_exist", O_RDONLY <unfinished ...>

whereas the intended result is that the open(...) line is not shown at all.

This change fixes this issue using open_memstream.  When either the -z or
the -Z option is used, the output is staged in memory (using
open_memstream) until we know the syscall return status.  If the
open_memstream function is not available, these new options error out.

Document -z and -Z options as new features since they have never worked
properly before and were undocumented since commit v4.4.95~21.

* stage_output.c: New file.
* Makefile.am (strace_SOURCES): Add it.
* configure.ac (AC_CHECK_FUNCS): Add open_memstream.
* defs.h (struct tcb): Add real_outf, memfptr, and memfloc fields for
memstream.
(strace_open_memstream, strace_close_memstream): New prototypes.
* strace.1.in: Document -z and -Z options.
* strace.c (usage): Mention -z and -Z options.
(init): Error on -z and -Z options if open_memstream if unavailable.
(maybe_switch_tcbs): Handle switch of memstream between tcbs.
(printleader): Avoid marking staged syscalls as unfinished.
* syscall.c (syscall_entering_trace): Open memstream.
(syscall_exiting_trace): Filter failed syscalls if failing_only is set,
handle raw(tcp) case.
(print_syscall_resume): Avoid marking staged syscalls as resumed.
* NEWS: Mention this change.

Resolves: https://github.com/strace/strace/issues/49
Resolves: https://github.com/strace/strace/issues/50
Co-Authored-by: Burkhard Kohl <burkhard.kohl@intel.com>
Signed-off-by: Paul Chaignon <paul.chaignon@gmail.com>
5 years agoAdd -Z option to print only failing syscalls
Paul Chaignon [Mon, 1 Apr 2019 20:26:00 +0000 (22:26 +0200)]
Add -Z option to print only failing syscalls

Existing -z option prints only successful syscalls.
This change adds a -Z option to print only failing syscalls.

Both options will start to behave properly with the subsequent commit.

* strace.c (init): Handle new -Z option.
* defs.h (failing_only): New prototype.
* syscall.c (failing_only): New variable.
(syscall_exiting_trace): Ignore failed syscalls if failing_only is set.

References: https://github.com/strace/strace/issues/50
Co-Authored-by: Burkhard Kohl <burkhard.kohl@intel.com>
Signed-off-by: Paul Chaignon <paul.chaignon@gmail.com>
5 years agosyscall.c: rename ptrace_get_syscall_info to strace_get_syscall_info
Dmitry V. Levin [Wed, 10 Jul 2019 16:12:44 +0000 (16:12 +0000)]
syscall.c: rename ptrace_get_syscall_info to strace_get_syscall_info

... to avoid potential conflict with future glibc versions.

* syscall.c (ptrace_get_syscall_info): Rename to
strace_get_syscall_info.  All callers updated.

5 years agotests: fix build with cutting-edge glibc
Dmitry V. Levin [Wed, 10 Jul 2019 16:12:44 +0000 (16:12 +0000)]
tests: fix build with cutting-edge glibc

Fix the following compilation error:

In file included from statx.c:44:
xstatx.c:47:16: error: ‘struct libc_statx’ declared inside parameter list will not be visible outside of this definition or declaration [-Werror]

* tests/xstatx.c (struct statx): New forward declaration.

5 years agoFix misleading stray PTRACE_EVENT_EXEC diagnostics
Dmitry V. Levin [Wed, 10 Jul 2019 16:12:44 +0000 (16:12 +0000)]
Fix misleading stray PTRACE_EVENT_EXEC diagnostics

If current_tcp is to be switched, entering(current_tcp) is irrelevant.

* strace.c (maybe_switch_tcbs): Update comment.
(dispatch_event) <case TE_STOP_BEFORE_EXECVE>: Invoke
maybe_switch_current_tcp early, skip the check for a stray
PTRACE_EVENT_EXEC if current_tcp was switched.
* tests/maybe_switch_current_tcp.c: New file.
* tests/pure_executables.list: Add maybe_switch_current_tcp.
* tests/.gitignore: Likewise.
* tests/gen_tests.in (maybe_switch_current_tcp): New entry.
* tests/Makefile.am (maybe_switch_current_tcp_LDADD): New variable.

5 years agoRefactor maybe_switch_tcbs
Dmitry V. Levin [Wed, 10 Jul 2019 16:12:44 +0000 (16:12 +0000)]
Refactor maybe_switch_tcbs

Change maybe_switch_tcbs to return NULL when no switching is necessary.
Introduce maybe_switch_current_tcp as a thing wrapper around
maybe_switch_tcbs.

* strace.c (maybe_switch_current_tcp): New function.
(dispatch_event): Use it instead of maybe_switch_tcbs, move comments
and the os_release check before maybe_switch_tcbs invocation ...
(maybe_switch_tcbs): ... here.  Change return value to NULL
if no switching was performed.

5 years agotests: robustify strace -k tests against link-time optimizer
Dmitry V. Levin [Tue, 9 Jul 2019 19:27:58 +0000 (19:27 +0000)]
tests: robustify strace -k tests against link-time optimizer

Some distributions enable by default a link-time optimizer that
mangles stack_fcall sample executables in a way that renders them
unusable for test purposes.

Robustify tests to defeat link-time optimizer.

* tests/stack-fcall.h (f0, f1, f2, f3): Add second parameter.
* tests/stack-fcall.c (main): Pass main as the second parameter to f0.
* tests/stack-fcall-0.c (f0): Add second parameter f, pass the xor of it
and f0 to f1.
* tests/stack-fcall-1.c (f1): Add second parameter f, pass the xor of it
and f1 to f2.
* tests/stack-fcall-2.c (f2): Add second parameter f, pass the xor of it
and f2 to f3.
* tests/stack-fcall-3.c: Include <asm/unistd.h>.
(f3): Add second parameter f, invoke __NR_gettid syscall with the xor
of f and f3 as its argument.

5 years agoia64: optimize syscallent table
Eugene Syromyatnikov [Mon, 17 Sep 2018 00:59:15 +0000 (02:59 +0200)]
ia64: optimize syscallent table

Use shuffle_scno since all valid syscall numbers start from 1024.

* linux/syscallent_base_nr.h: New file.
* linux/ia64/syscallent_base_nr.h: Likewise.
* linux/ia64/shuffle_scno.c: Likewise.
* Makefile.am (EXTRA_DIST): Add them.
* linux/ia64/syscallent.h [SYSCALLENT_BASE_NR] (BASE_NR): Define to 0.
* syscall.c: Include "syscallent_base_nr.h".
* clone.c [IA64] (ARG_STACKSIZE, ARG_PTID, ARG_CTID, ARG_TLS): Use
shuffle_scno.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
5 years agoinotify: decode file descriptor returned by inotify_init
Eugene Syromyatnikov [Mon, 24 Sep 2018 06:02:38 +0000 (08:02 +0200)]
inotify: decode file descriptor returned by inotify_init

* inotify.c (SYS_FUNC(inotify_init)): New function.
* linux/dummy.h (sys_inotify_init): Remove macro definition.
* tests/inotify_init.c: New file.
* tests/inotify_init-y.c: Likewise.
* tests/inotify_init1-y.c: Likewise.
* tests/inotify_init1.c [PRINT_PATHS]: Print inotify fd path.
* tests/inotify_init-y.test: New test.
* tests/.gitignore: Add inotify_init, inotify_init-y, inotify_init1-y.
* tests/pure_executables.list: Likewise.
* tests/gen_tests.in (inotify_init, inotify_init1-y): New tests.
* tests/Makefile.am (DECODER_TESTS): Add inotify_init-y.test.

5 years agortnl_addr: decode IFA_RT_PRIORITY and IFA_TARGET_NETNSID
Eugene Syromyatnikov [Fri, 14 Dec 2018 18:53:25 +0000 (19:53 +0100)]
rtnl_addr: decode IFA_RT_PRIORITY and IFA_TARGET_NETNSID

* rtnl_addr.c (ifaddrmsg_nla_decoders): Decode IFA_RT_PRIORITY as u32,
decode IFA_TARGET_NETNSID as s32.

5 years agomips o32: print an error message when fetching of syscall arguments fails
Eugene Syromyatnikov [Fri, 26 Oct 2018 00:01:43 +0000 (02:01 +0200)]
mips o32: print an error message when fetching of syscall arguments fails

... instead of failing silently.

* linux/mips/get_syscall_args.c (get_syscall_args): Print an error message
when umoven fails.