summaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* rtnl_tc_action: fix tcamsg attribute decoderEugene Syromyatnikov2023-05-103-2/+80
| | | | | | | | | | | | | | | | | | | | | | | | | | | | It used the wrong attribute table initially. An example of an actual usage: tc actions add action simple sdata "foobar" index 1 * src/xlat/rtnl_tca_root_attrs.in: New file. * src/xlat/rtnl_tca_root_flags.in: Likewise. * src/rtnl_tc_action.c: Include "xlat/rtnl_tca_root_flags.h" and "xlat/rtnl_tca_root_attrs.h". (tcamsg_nla_decoders): Rename to... (tca_act_nla_decoders): ...this. (decode_tca_action, decode_tca_root_act_tab, decode_tca_root_act_flags, decode_tca_msecs): New functions. (tcamsg_nla_decoders): New decoder table. (decode_tcamsg): Use rtnl_tca_root_attrs and "TCA_ROOT_???" as xlat and dflt arguments in the decode_nlattr call. respectively. * tests/.gitignore: Add nlattr_tcamsg-Xabbrev, nlattr_tcamsg-Xraw, and nlattr_tcamsg-Xverbose. * tests/pure_executables.list: Likewise. * tests/gen_tests.in (nlattr_tcamsg-Xabbrev, nlattr_tcamsg-Xraw, nlattr_tcamsg-Xverbose): New tests. * tests/nlattr_tcamsg-Xabbrev.c: New file. * tests/nlattr_tcamsg-Xraw.c: Likewise. * tests/nlattr_tcamsg-Xverbose.c: Likewise. * tests/nlattr_tcamsg.c: Update the expected output.
* util: factor out printing of time interval in a human-readable formEugene Syromyatnikov2023-05-102-27/+14
| | | | | | | | | | Also, remove all this dance with separate fractional part printing as %f doesn't trim the trailing zeroes and checking whether %g does the right thing in all cases is too much hassle. * src/defs.h (print_ticks): New declaration. * src/util.c (print_ticks): New function. (print_clock_t): Call it.
* build: fix build on systems that do not provide open_memstreamDmitry V. Levin2023-05-101-2/+2
| | | | | * src/stage_output.c (strace_open_memstream, strace_close_memstream): Fix HAVE_OPEN_MEMSTREAM check.
* Fix preprocessor indentationDmitry V. Levin2023-05-074-8/+8
| | | | | | | | | 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:]]' src tests |grep -v '\.sh$') |while read f; do cppi < "$f" > "$f".cppi; mv "$f".cppi "$f" done
* Introduce --argv0 optionJohn Reiser2023-05-061-0/+13
| | | | | | | | | | | | | | | | This option is useful for tracing multi-call executables which interpret argv[0], such as busybox or kmod. * NEWS: Mention this. * doc/strace.1.in: Document this. * src/strace.c (usage): Likewise. (argv0): New variable. (startup_child): Use it. (GETOPT_ARGV0): New enum constant. (longopts, init): Use it. Co-authored-by: Dmitry V. Levin <ldv@strace.io> Resolves: https://github.com/strace/strace/pull/248
* Remove -l alias for the recently introduced --syscall-limit optionDmitry V. Levin2023-05-051-9/+10
| | | | | | | | | | | | | | | | | | | As strace already has a lot of short options which are hard to remember, let's avoid introducing new short options for a while. * NEWS: Mention this. * doc/strace.1.in: Update --syscall-limit documentation. * src/strace.c (print_version): Do not mention -l option. (optstring): Remove 'l'. (GETOPT_SYSCALL_LIMIT): New enum constant. (longopts, init): Use it instead of 'l'. * tests/gen_tests.in (strace--syscall-limit-status-c, strace--syscall-limit-status-summary): Replace -l with --syscall-limit. * tests/options-syntax.test: Update expected output. * tests/strace--syscall-limit-path.c: Update comment. * tests/strace--syscall-limit-status.c: Likewise. * tests/strace--syscall-limit.c: Likewise. * tests/strace--syscall-limit.test: Likewise.
* syscall: fix -c (CFLAG_ONLY_STATS) usage in conjunction with -e and -lEugene Syromyatnikov2023-05-051-33/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | * src/syscall.c (syscall_exiting_trace): Move cflag handling right before tprint_arg_end() and in the res != 1 code path, avoid printing anything if cflag is set to CFLAG_ONLY_STATS. * tests/.gitignore: Add strace--syscall-limit-c and strace--syscall-limit-status-c. * tests/Makefile.am (check_PROGRAMS): Likewise. * tests/gen_tests.in (strace--syscall-limit-c, strace--syscall-limit-status-c): New tests. * tests/strace--syscall-limit-c.c: New file. * tests/strace--syscall-limit-status-c.c: Likewise. * tests/strace--syscall-limit-status-summary.c: Likewise. * tests/strace--syscall-limit-summary.c: Likewise. * tests/strace--syscall-limit.c [!PRINT_INVALID] (PRINT_INVALID): New macro, set to 1. [!PRINT_STATS] (PRINT_STATS): New macro, set to 0. [!UNLINKAT_CNT] (UNLINKAT_CNT): New macro, set to 1. [!TOTAL_CNT] (TOTAL_CNT): New macro, set to 3. (test_chdir, test_rmdir) [!PRINT_INVALID]: Do not print syscalls with non-zero return value. (main) [PRINT_STATS]: Print the expected syscall statistics output. * NEWS: Mention it. Fixes: v5.2~6 "Implement -e status=set option" Fixes: v6.2-13-gac1d1e25d "Introduce -l/--syscall-limit options"
* mem: handle hppa MADV_* UAPI breakageEugene Syromyatnikov2023-04-304-86/+93
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Linux commit v6.2-rc1~39^2~7 has broken UAPI on PA-RISC by changing the values of some MADV_* constants; that forces some special handling for them, since we cannot have any assumptions about the version of the kernel headers and/or kernel both strace and tracees are built and/or being run on. * src/mem.c: Include "xlat/madvise_hppa_generic_cmds.h". [HPPA]: Include "xlat/madvise_hppa_old_cmds.h". (SYS_FUNC(madvise)) <advice>: New local variable, set to tcp->u_arg[2]. [HPPA] (SYS_FUNC(madvise)): Check madvise_hppa_old_cmds for the advice value and print it appropriately if it is there; then check madvise_hppa_generic_cmds and print it appropriately if it is there; then fallback to printing advice as madvise_cmds xval. [!HPPA] (SYS_FUNC(madvise)): Print advice as madvise_cmds and madvise_hppa_generic_cmds xval. * src/xlat/madvise_cmds.in: Add sorted; remove "Generated ..." comment; move hppa-specific values to madvise_hppa_old_cmds.in and their generic counterparts to madvise_hppa_generic_cmds.in. * src/xlat/madvise_hppa_generic_cmds.in: New file. * src/xlat/madvise_hppa_old_cmds.in: Likewise. * tests/.gitignore: Add madvise-Xabbrev, madvise-Xraw, and madvise-Xverbose. * tests/pure_executables.list: Likewise. * tests/gen_tests.in (advise-Xabbrev, madvise-Xraw, madvise-Xverbos): New tests. * tests/madvise.c: Add checks for the advice argument decoding. * tests/madvise-Xabbrev.c: New file. * tests/madvise-Xraw.c: Likewise. * tests/madvise-Xverbose.c: Likewise. * NEWS: Mention it. Reported-by: Matoro Mahri <matoro@users.noreply.github.com> Closes: https://github.com/strace/strace/issues/241
* xlat/gen.sh: allow skipping xlat value checkingEugene Syromyatnikov2023-04-301-9/+27
| | | | | | | | | | | | | | | This enables storing "wrong" values in xlats, so they can be referenced in cases when there are discrepancies between what UAPI headers provide and what they used to provide. * src/xlat/gen.sh (cond_def): Emit static_assert() only if $nocheckval is not enabled. (cond_xlat): Add is_shift local variable; check whether $m starts with "1<<" and set $is_shift if it is; use print_xval() only if neither is_shift nor nocheckval are set; call print_xlat_pair() if $nocheckval is set. (gen_header): Add nocheckval to local variables; handle "#checkval" and "#nocheckval" directives.
* Update copyright headersDmitry V. Levin2023-04-3013-13/+13
| | | | | Headers updated automatically using maint/update_copyright_years.sh script.
* generate_mpers_am.sh: enhance error diagnosticsDmitry V. Levin2023-04-301-0/+5
| | | | | | | * src/generate_mpers_am.sh: Explicitly issue an error if the generated list of mpers source files is empty. Resolves: https://github.com/strace/strace/issues/249
* Implement decoding of signal masks associated with signalfd file descriptorsleedagee2023-04-294-1/+48
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When signalfds are used, normal signal handling method is usually disabled, leaving strace without signals to catch and decode. This patch adds decoding of signal masks associated with signalfd file descriptors. Decoding the signalfd_siginfo struct requires additional work mentioned in github#199. Signed-off-by: leedagee <leedageea@gmail.com> * NEWS: Mention this change. * doc/strace.1.in: Document --decode-fds=signalfd. * src/strace.c (usage): Likewise. * src/number_set.h (enum decode_fd_bits): Add DECODE_FD_SIGNALFD. * src/filter_qualify.c (decode_fd_str_to_uint): Handle signalfd. * src/util.c (print_fdinfo_sigmask, printsignalfd): New functions. (printfd_pid_with_finfo): Use printsignalfd when DECODE_FD_SIGNALFD is set in decode_fd_set. * tests/signalfd4.c [PRINT_SIGNALFD]: Check decoding of signal masks associated with signalfd file descriptors. * tests/signalfd4-yy.c: New file. * tests/pure_executables.list: Add signalfd4-yy. * tests/.gitignore: Likewise. * tests/gen_tests.in (signalfd4): Add -a32. (signalfd4-yy): New test. Co-authored-by: Dmitry V. Levin <ldv@strace.io>
* util: introduce scan_fdinfo() functionDmitry V. Levin2023-04-291-12/+34
| | | | | | | | * src/util.c (scan_fdinfo_fn): New type. (scan_fdinfo, parse_fdinfo_pid): New functions. (pidfd_get_pid): Use them. Suggested-by: Masatake YAMATO <yamato@redhat.com>
* net: implement IP_LOCAL_PORT_RANGE socket option decodingEugene Syromyatnikov2023-04-281-0/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Introduced by Linux kernel commit v6.3-rc1~162^2~206^2~1. * src/net.c (print_port_range): New function. (print_getsockopt) <case SOL_IP> <case IP_LOCAL_PORT_RANGE>: Call it. (print_setsockopt) <case SOL_IP> <case IP_LOCAL_PORT_RANGE>: Ditto. * tests/.gitignore: Add ip_local_port_range, ip_local_port_range-Xabbrev, ip_local_port_range-Xraw, ip_local_port_range-Xverbose, ip_local_port_range-success, ip_local_port_range-success-Xabbrev, ip_local_port_range-success-Xraw, and ip_local_port_range-success-Xverbose. * tests/Makefile.am (check_PROGRAMS): Add ip_local_port_range-success, ip_local_port_range-success-Xabbrev, ip_local_port_range-success-Xraw, and ip_local_port_range-success-Xverbose. * tests/gen_tests.in (ip_local_port_range, ip_local_port_range-Xabbrev, ip_local_port_range-Xraw, ip_local_port_range-Xverbose, ip_local_port_range-success, ip_local_port_range-success-Xabbrev, ip_local_port_range-success-Xraw, ip_local_port_range-success-Xverbose): New tests. * tests/pure_executables.list: Add ip_local_port_range, ip_local_port_range-Xabbrev, ip_local_port_range-Xraw, and ip_local_port_range-Xverbose. * tests/ip_local_port_range.c: New file. * tests/ip_local_port_range-Xabbrev.c: Likewise. * tests/ip_local_port_range-Xraw.c: Likewise. * tests/ip_local_port_range-Xverbose.c: Likewise. * tests/ip_local_port_range-success-Xabbrev.c: Likewise. * tests/ip_local_port_range-success-Xraw.c: Likewise. * tests/ip_local_port_range-success-Xverbose.c: Likewise. * tests/ip_local_port_range-success.c: Likewise. * NEWS: Mention it.
* prctl: implement PR_[GS]ET_MDWE decodingesyr/prctl-mdweEugene Syromyatnikov2023-04-282-2/+20
| | | | | | | | | | | | | | Introduced by Linux commit v6.3-rc1~113^2~215. * src/xlat/pr_mdwe_flags.in: New file. * src/prctl.c: Include "xlat/pr_mdwe_flags.h". (SYS_FUNC(prctl)) <case PR_SET_MDWE, case PR_GET_MDWE>: Implement command decoders. * tests/.gitignore: Add prctl-mdwe. * tests/Makefile.am (check_PROGRAMS): Add prctl-mdwe. * tests/gen_tests.in (prctl-mdwe): New test. * tests/prctl-mdwe.c: New file. * NEWS: Mention it.
* io_uring: rename pad field of io_uring_buf_reg to flagsDmitry V. Levin2023-04-281-5/+3
| | | | | | | | * bundled/linux/include/uapi/linux/io_uring.h (struct io_uring_buf_reg): Rename pad to flags following the change introduced by Linux kernel commit v6.3-rc5-6-g81cf17cd3ab3. * src/io_uring.c (print_io_uring_buf_reg): Likewise. * tests/io_uring_register.c (main): Likewise.
* xlat: update V4L2_PIX_FMT_* constantsDmitry V. Levin2023-04-281-0/+6
| | | | | | | | | * src/xlat/v4l2_pix_fmts.in (V4L2_PIX_FMT_RGBX1010102, V4L2_PIX_FMT_RGBA1010102, V4L2_PIX_FMT_ARGB2101010): New constants introduced by Linux kernel commit v6.3-rc1~28^2~19^2~18. (V4L2_PIX_FMT_Y210, V4L2_PIX_FMT_Y212, V4L2_PIX_FMT_Y216): New constants introduced by Linux kernel commit v6.3-rc1~28^2~19^2~17. * NEWS: Mention this.
* xlat: update TCA_* constantsDmitry V. Levin2023-04-282-0/+2
| | | | | | | * src/xlat/rtnl_tc_attrs.in (TCA_EXT_WARN_MSG): New constant introduced by Linux kernel commit v6.3-rc1~162^2~279. * src/rtnl_tc.c (tcmsg_nla_decoders): Add TCA_EXT_WARN_MSG. * NEWS: Mention this.
* xlat: update PR_* constantsDmitry V. Levin2023-04-282-0/+4
| | | | | | | * src/xlat/prctl_options.in (PR_SET_MDWE, PR_GET_MDWE): New constants introduced by Linux kernel commit v6.3-rc1~113^2~215. * src/prctl.c (SYS_FUNC(prctl)): Handle them. * NEWS: Mention this.
* xlat: update NFT_MSG_* constantsDmitry V. Levin2023-04-282-0/+14
| | | | | | | | | * src/xlat/nf_nftables_msg_types.in (NFT_MSG_DESTROYTABLE, NFT_MSG_DESTROYCHAIN, NFT_MSG_DESTROYRULE, NFT_MSG_DESTROYSET, NFT_MSG_DESTROYSETELEM, NFT_MSG_DESTROYOBJ, NFT_MSG_DESTROYFLOWTABLE): New constants introduced by Linux kernel commit v6.3-rc1~162^2~264^2. * src/netlink.c (decode_nlmsg_flags_netfilter): Handle them. * NEWS: Mention this.
* xlat: update MFD_* constantsDmitry V. Levin2023-04-281-0/+2
| | | | | | | * src/xlat/memfd_create_flags.in (MFD_NOEXEC_SEAL, MFD_EXEC): New constants introduced by Linux kernel commit v6.3-rc1~113^2~502. * tests/memfd_create.c (main): Update expected output. * NEWS: Mention this.
* xlat: update IORING_* constantsDmitry V. Levin2023-04-281-0/+1
| | | | | | * src/xlat/uring_setup_features.in (IORING_FEAT_REG_REG_RING): New constant introduced by Linux kernel commit v6.3-rc1~209^2. * NEWS: Mention this.
* xlat: update IP_* constantsDmitry V. Levin2023-04-281-0/+1
| | | | | | * src/xlat/sock_ip_options.in (IP_LOCAL_PORT_RANGE): New constant introduced by Linux kernel commit v6.3-rc1~162^2~206^2~1. * NEWS: Mention this.
* xlat: update IFLA_BRPORT_* constantsDmitry V. Levin2023-04-282-0/+4
| | | | | | | | | | | * src/xlat/rtnl_ifla_brport_attrs.in (IFLA_BRPORT_MCAST_N_GROUPS, IFLA_BRPORT_MCAST_MAX_GROUPS): New constants introduced by Linux kernel commit v6.3-rc1~162^2~139^2~8. * src/rtnl_link.c (ifla_brport_nla_decoders): Add IFLA_BRPORT_MCAST_N_GROUPS and IFLA_BRPORT_MCAST_MAX_GROUPS. * tests/nlattr_ifla_brport.c (main): Update expected output. * tests/nlattr_ifla_linkinfo.c (main): Likewise. * NEWS: Mention this.
* xlat: update IFLA_* constantsDmitry V. Levin2023-04-282-0/+4
| | | | | | | | | * src/xlat/rtnl_link_attrs.in (IFLA_GSO_IPV4_MAX_SIZE, IFLA_GRO_IPV4_MAX_SIZE): New constants introduced by Linux kernel commit v6.3-rc1~162^2~162^2~1. * src/rtnl_link.c (ifinfomsg_nla_decoders): Add IFLA_GSO_IPV4_MAX_SIZE and IFLA_GRO_IPV4_MAX_SIZE. * NEWS: Mention this.
* xlat: update F_SEAL_* constantsDmitry V. Levin2023-04-281-0/+1
| | | | | | * xlat/f_seals.in (F_SEAL_EXEC): New constant introduced by Linux kernel commit v6.3-rc1~113^2~504. * NEWS: Mention this.
* Implement an ability to filter syscalls that operate on specific FDsEugene Syromyatnikov2023-04-226-26/+66
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Introduce -e trace-fds= qualifier that allows specifying a set of FDs of interest, operations on which are to be traced. Works in conjunction (or, more specifically, inclusive disjunction) with the path tracing functionality. * src/defs.h: Include "number_set.h". (tracing_fds): New external variable. (pathtrace_match_set): Add new fdset argument to the declaration. (pathtrace_match): Pass trace_fd_set in the new argument to the pathtrace_match_set call. (qualify_trace_fd): New function declaration. * src/filter_qualify.c (trace_fd_set): New variable. (qualify_trace_fd): New function. (qual_options): Add various FD tracing-related items. * src/number_set.h (trace_fd_set): New external variable declaration. * src/pathtrace.c (pathmatch, upathmatch): Bail out if set is NULL. (fdmatch): Add fdset argument, check fd for non-negativity and presence in fdset if fdset is non-NULL. (match_xselect_args): Add fdset argument, pass it to the fdmatch call. (pathtrace_match_set): Add fdset argument, pass it to fdmatch and match_xselect_args calls. * src/syscall.c (syscall_entering_trace): Check tracing_fds in addition to tracing_paths as a predicate for performing pathtrace_match check. * src/strace.c (tracing_fds): New variable. (init) <GETOPT_QUAL_TRACE_FD>: New enum item. (init) <longopts>: Add"trace-fds" option. (init) <case GETOPT_QUAL_TRACE_FD>: Call qualify_trace_fd. (usage): Document -e trace-fds. * doc/strace.1.in: Likewise. * tests/.gitignore: Add dup-trace-fds-0, dup-trace-fds-0-9, dup-trace-fds-0-P, dup-trace-fds-not-9, dup2-e-fd-0, dup2-e-fd-0-9, dup2-e-fd-0-P, dup2-e-fd-not-9, ppoll-e-trace-fds-23, ppoll-e-trace-fds-23-42, ppoll-e-trace-fds-not-9-42-P, select-trace-fd-7, select-trace-fd-7-9, and select-trace-fd-7-P. * tests/Makefile.am (check_PROGRAMS): Add ppoll-e-trace-fds-23, ppoll-e-trace-fds-23-42, ppoll-e-trace-fds-not-9-42-P, select-trace-fd-7, select-trace-fd-7-9, and select-trace-fd-7-P. * tests/dup-P.c (PATH_TRACING): Set to 1. * tests/dup2-P.c (PATH_TRACING): Likewise. * tests/dup.c: Accommodate test for checking tracing-fds functionality. * tests/dup2.c: Likewise. * tests/ppoll.c: Likewise. * tests/xselect.c: Likewise. * tests/gen_tests.in (dup-trace-fds-0, dup-trace-fds-0-9, dup-trace-fds-0-P, dup-trace-fds-not-9, dup2-e-fd-0, dup2-e-fd-0-9, dup2-e-fd-0-P, dup2-e-fd-not-9, ppoll-e-trace-fds-23, ppoll-e-trace-fds-23-42, ppoll-e-trace-fds-not-9-42-P, select-trace-fd-7, select-trace-fd-7-9, select-trace-fd-7-P): New tests. * tests/options-syntax.test: Add trace-fds-related option syntax checks. * tests/pure_executables.list: Add dup-trace-fds-0, dup-trace-fds-0-9, dup-trace-fds-0-P, dup-trace-fds-not-9, dup2-e-fd-0, dup2-e-fd-0-9, dup2-e-fd-0-P, and dup2-e-fd-not-9. * tests/dup-trace-fds-0-9.c: New file. * tests/dup-trace-fds-0-P.c: Likewise. * tests/dup-trace-fds-0.c: Likewise. * tests/dup-trace-fds-not-9.c: Likewise. * tests/dup2-e-fd-0-9.c: Likewise. * tests/dup2-e-fd-0-P.c: Likewise. * tests/dup2-e-fd-0.c: Likewise. * tests/dup2-e-fd-not-9.c: Likewise. * tests/ppoll-e-trace-fds-23-42.c: Likewise. * tests/ppoll-e-trace-fds-23.c: Likewise. * tests/ppoll-e-trace-fds-not-9-42-P.c: Likewise. * tests/select-trace-fd-7-9.c: Likewise. * tests/select-trace-fd-7-P.c: Likewise. * tests/select-trace-fd-7.c: Likewise. * NEWS: Mention it. Suggested-by: Marty Leisner <maleisner@gmail.com> Link: https://lists.strace.io/pipermail/strace-devel/2023-March/011209.html
* strauss: add a couple of new tipsEugene Syromyatnikov2023-04-221-0/+17
| | | | | | * src/strauss.c (tips_tricks_tweaks): Add a note about the historical handling of "(deleted)" in file paths got from procfs and about system time accounting.
* strauss: rely on strace--tips test instead of forcibly trimming linesEugene Syromyatnikov2023-04-221-2/+2
| | | | | | | | | | | | | | | | | The regression introduced in commit v5.19~99 "strauss: tips whitespace and phrasing cleanups" (and subsequently fixed in v6.2-6-g5b4f05f42 "strauss: add missing line separators") highlights the issue with the current approach with respect to tips formatting: it masks the issues related to overlong lines in favor to the pretty formatting; however, the presence of a (working) strace--tips test, that checks the correctness of the tips rendering, makes this trimming superfluous. Drop it and rely on the testing with respect to the guaranteeing the proper wrapping of (overly) long tip lines. * src/strauss.c (print_totd): Do not provide precision to the format specification that prints tip line. References: v6.2-6-g5b4f05f42 "strauss: add missing line separators"
* Introduce -l/--syscall-limit optionsSahil Siddiq2023-04-033-1/+23
| | | | | | | | | | | | | | | Add new options to detach strace after capturing the specified number of syscalls. * src/defs.h (syscall_limit): New variable declaration. * src/strace.c (syscall_limit): New variable. (usage): Mention new options. (init): Handle them. (next_event): Break the event loop when syscall_limit == 0. * src/syscall.c (syscall_exiting_trace): Update syscall_limit. Signed-off-by: Sahil Siddiq <icegambit91@gmail.com> Resolves: https://github.com/strace/strace/issues/179
* open_by_handle_at: add RVAL_FD to return valueKossi Glokpor2023-04-031-1/+1
| | | | | | | | | | Mark the return value of open_by_handle_at decoder as a file descriptor. * src/file_handle.c (SYS_FUNC(open_by_handle_at)): Add RVAL_FD flag to the return value. Signed-off-by: Kossi Glokpor <hotkatz32@gmail.com> Fixes: v4.11~121 "Implement name_to_handle_at and open_by_handle_at syscalls decoding"
* Make --tips more easily availableDmitry V. Levin2023-04-011-0/+4
| | | | | | | | | | | | | | Allow --tips option to be used without any tracing, so that tips, tricks and tweaks could be displayed without running any program or attaching to any process. * src/strace.c (init): When --tips is specified without running any program or attaching to any process, show the tips and exit. * tests/strace--tips-0.exp: New file. * tests/Makefile.am (check_DATA): Add it. * tests/strace--tips.test: Check that simple "strace --tips=0" works as expected. * tests/options-syntax.test: Update expected output.
* Update ioctl entries from linux v6.3Gleb Fotengauer-Malinovskiy2023-03-277-405/+100
| | | | | | | | | | | | * src/linux/32/ioctls_inc_align16.h: Update from linux v6.3-rc4 using ioctls_gen.sh. * src/linux/32/ioctls_inc_align32.h: Likewise. * src/linux/32/ioctls_inc_align64.h: Likewise. * src/linux/64/ioctls_inc.h: Likewise. * src/linux/x32/ioctls_inc0.h: Likewise. * src/linux/s390/ioctls_arch0.h: Likewise. * src/linux/s390x/ioctls_arch0.h: Likewise. * NEWS: Mention this.
* strauss: add missing line separatorsJakub Wilk2023-03-101-4/+4
| | | | | | | * src/strauss.c (tips_tricks_tweaks): Add missing line separators. (MAX_TIP_LINES): Bump. Resolves: https://github.com/strace/strace/pull/245
* Add config3 field to struct perf_event_attrSven Schnelle2023-03-092-0/+6
| | | | | | | | | | | | | | | | Linux kernel commit 09519ec3b19 ("perf: Add perf_event_attr::config3") aka v6.3-rc1~29^2~13 added a new config3 field to struct perf_event_attr. Add this field and implement its decoding in strace, which also fixes compilation of tests because of an array out-of-bounds warning in tests/perf_event.c. Signed-off-by: Sven Schnelle <svens@linux.ibm.com> * bundled/linux/include/uapi/linux/perf_event.h: Update to headers_install'ed Linux kernel v6.3-rc1. * src/perf_event_struct.h (struct perf_event_attr): Add config3 field. * src/perf.c (print_perf_event_attr): Print config3 field. * tests/perf_event_open.c (print_event_attr): Check it.
* mips: fix raw_syscall_0Elvira Khabirova2023-03-051-3/+13
| | | | | | | | | | | | | | | | | | | | | Some of the tests use a custom function (raw_syscall_0) for syscall invocation. The implementation for mips was flawed: it unconditionally clobbered "hi" and "lo", which is not valid for MIPS R6, because these targets lack those registers w/o DSP extension. GCC 10+ refuses to compile such constructs: [1], [2]. Fix the syscall invocation implementation for mips. [1] https://gcc.gnu.org/git/?p=gcc.git&a=commit;h=0a59215131c02dee4c8829f93d1ee678647614da [2] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91233 * src/linux/mips/raw_syscall.h (SYSCALL_CLOBBERLIST): Define. (raw_syscall_0): Use it. Signed-off-by: Elvira Khabirova <lineprinter0@gmail.com>
* Update copyright headersDmitry V. Levin2023-02-2634-29/+34
| | | | | Headers updated automatically using maint/update_copyright_years.sh script.
* Fix build on alphaDmitry V. Levin2023-02-241-4/+5
| | | | | | | | | | | | | | Workaround a bug in glibc headers that fail to provide si_trapno field in their definition of siginfo_t on alpha. Link: https://sourceware.org/bugzilla/show_bug.cgi?id=30173 Resolves: https://github.com/strace/strace/issues/220 * configure.ac (AC_CHECK_MEMBERS): Add siginfo_t.si_trapno. * src/printsiginfo.c [ALPHA]: Guard use of si_trapno with HAVE_SIGINFO_T_SI_TRAPNO. * tests/ptrace.c [ALPHA]: Likewise. * NEWS: Mention this fix.
* filter_seccomp: do not call PR_SET_NO_NEW_PRIVS if privileged enoughDmitry V. Levin2023-02-231-5/+11
| | | | | | | | | If strace process is privileged enough to add SECCOMP_MODE_FILTER without PR_SET_NO_NEW_PRIVS, there is no need to do the latter. * src/filter_seccomp.c (init_seccomp_filter): Try to add SECCOMP_MODE_FILTER first, and if it failed with EACCES, do PR_SET_NO_NEW_PRIVS and try to add SECCOMP_MODE_FILTER again.
* dyxlat: make the type of the xlat created by dyxlat_alloc customizableMasatake YAMATO2023-02-213-4/+4
| | | | | | | | | | * src/defs.h (dyxlat_alloc): Add xlat_type argument. * src/dyxlat.c (dyxlat_alloc): Likewise. * src/socketutils.c (genl_families_xlat): Pass XT_NORMAL to dyxlat_alloc invocation. Signed-off-by: Masatake YAMATO <yamato@redhat.com> Signed-off-by: Dmitry V. Levin <ldv@strace.io>
* ioctl: use finfo as hints for resolving overlapping ioctl commandsMasatake YAMATO2023-02-204-2/+57
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Such an overlapping can be observed, e.g. when running vi under strace: ioctl(0, SNDCTL_TMR_START or TCSETS, {B38400 ... After this change, when the file descriptor corresponds to a terminal device, strace would be able to resolve the collision between ioctl commands from different subsystems: ioctl(0, TCSETS, {B38400 ... * src/defs.h (term_ioctl_decode_command_number): New function declaration. * src/ioctl.c (ioctl_decode_command_number): Add a new argument for passing finfo that can be used as hints for decoding ioctl commands. Handle the code `T'. (SYS_FUNC(ioctl)): Pass finfo as hints to ioctl_decode_command_number. * src/term.c: Include "xlat/term_cmds_overlapping.h". (term_ioctl_decode_command_number): Decode the command in this earlier stage if the corresponding file descriptor corresponds to a terminal device. * src/xlat/term_cmds_overlapping.in: New file listing overlapping tty ioctl commands. * tests/ioctl_termios.c (main): Extend cmds[] in checks[]. (main::checks::cmds): Add new member "pass_invalid_fd". Omit " or ..." substring in case of TCSETS, TCSETSW, and TCSETSF for a valid tty descriptor. Add test commands for invalid descriptors. Signed-off-by: Masatake YAMATO <yamato@redhat.com> Signed-off-by: Dmitry V. Levin <ldv@strace.io>
* ioctl: pass finfo to ioctl_decode() as hints for decodingMasatake YAMATO2023-02-201-3/+8
| | | | | | | | | | Just pass the data, a real use case comes in subsequent commits. * src/ioctl.c (ioctl_decode): Add "finfo" argument. (SYS_FUNC(ioctl)): Pass the finfo for the target fd to ioctl_decode. Signed-off-by: Masatake YAMATO <yamato@redhat.com> Signed-off-by: Dmitry V. Levin <ldv@strace.io>
* ioctl: prepare finfo only when ioctl command can overlapMasatake YAMATO2023-02-201-1/+12
| | | | | | | | | | | | If an ioctl decoder does not deal with overlapping commands, avoid issuing extra syscalls required to obtain finfo. * src/ioctl.c (ioctl_command_overlaps): New function. (SYS_FUNC(ioctl)): Call getfdpath_pid only when ioctl_command_overlaps returns true. Signed-off-by: Masatake YAMATO <yamato@redhat.com> Signed-off-by: Dmitry V. Levin <ldv@strace.io>
* ioctl: collect finfo just before decoding ioctl commandMasatake YAMATO2023-02-203-2/+22
| | | | | | | | | | | | | | | This way finfo can be used as hints for decoding ioctl commands. * src/defs.h (get_finfo_for_dev): New declaration. (printfd_with_finfo): New inline function - a thin wrapper around printfd_pid_with_finfo. * src/util.c (get_finfo_for_dev): Remove static modifier to make it reusable the ioctl syscall decoder. (SYS_FUNC(ioctl)): Call get_finfo_for_dev and printfd_with_finfo instead of calling printfd. Signed-off-by: Masatake YAMATO <yamato@redhat.com> Signed-off-by: Dmitry V. Levin <ldv@strace.io>
* Allow to pass pre-filled finfo data to printdev() from upper layersMasatake YAMATO2023-02-192-8/+20
| | | | | | | | | | | | | | | | | | printdev() used to collect struct finfo data just before printing. However, if the finfo data can be filled somewhere else, printdev() does not have to collect the finfo data by itself. * src/defs.h (printfd_pid_with_finfo): New function declaration. (printfd_pid): Turn into a thin wrapper around printfd_pid_with_finfo. (struct finfo): New member "deleted". * src/util.c (get_finfo_for_dev): Initialize "deleted" member of finfo. (printdev): Add finfo argument. If non-NULL is specified as finfo argument, omit get_finfo_for_dev invocation. (printfd_pid): Rename to printfd_pid_with_finfo, add finfo argument and pass it on to printdev. Signed-off-by: Masatake YAMATO <yamato@redhat.com> Signed-off-by: Dmitry V. Levin <ldv@strace.io>
* util: introduce get_finfo_for_dev functionMasatake YAMATO2023-02-192-7/+47
| | | | | | | | | | | | | | | | printdev() function does two things: it first obtains the information about the given fd and then prints it. Introduce get_finfo_for_dev() to implement the first part of printdev(). struct finfo is a new data structure for keeping information passed from get_finfo_for_dev() to printdev(). * src/defs.h (struct finfo): New data structure. * src/utils.c (get_finfo_for_dev): New function derived from printdev. (printdev): Use it. Signed-off-by: Masatake YAMATO <yamato@redhat.com> Signed-off-by: Dmitry V. Levin <ldv@strace.io>
* strace: declare nflag variable as staticDmitry V. Levin2023-02-151-1/+1
| | | | | | | | | | Apparently, nflag is not used outside the compilation unit where it is defined. * src/strace.c (nflag): Add static qualifier. Reported-by: Masatake YAMATO <yamato@redhat.com> Fixes: v5.9~55 "strace: add an option for printing syscall numbers"
* treewide: replace "sed -r" with "sed -E"Dmitry V. Levin2023-02-149-16/+16
| | | | | | | | | Use -E option instead of -r to enable use extended regular expression syntax in sed expressions. It has been supported for years by GNU sed, and is now included in POSIX. Link: https://www.austingroupbugs.net/view.php?id=528 Resolves: https://github.com/strace/strace/issues/216
* xlat: update V4L2_CTRL_TYPE_* constantsDmitry V. Levin2023-02-131-0/+10
| | | | | | | | | | | | | * src/xlat/v4l2_control_types.in (V4L2_CTRL_TYPE_MPEG2_QUANTISATION, V4L2_CTRL_TYPE_MPEG2_SEQUENCE, V4L2_CTRL_TYPE_MPEG2_PICTURE): New constants introduced by Linux kernel commit v5.14-rc1~165^2~241. (V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR, V4L2_CTRL_TYPE_VP9_FRAME): New constants introduced by Linux kernel commit v5.17-rc1~114^2~207. (V4L2_CTRL_TYPE_HEVC_SPS, V4L2_CTRL_TYPE_HEVC_PPS, V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS, V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX, V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS): New constants introduced by Linux kernel commit v6.0-rc1~139^2~93. * NEWS: Mention this change.
* xlat: update V4L2_CTRL_FLAG_* constantsDmitry V. Levin2023-02-131-0/+1
| | | | | | | * src/xlat/v4l2_control_flags.in (V4L2_CTRL_FLAG_DYNAMIC_ARRAY): New constant introduced by Linux kernel commit v6.0-rc1~139^2~104. * tests/ioctl_v4l2-success.c (main): Update expected output. * NEWS: Mention this change.