]> granicus.if.org Git - strace/log
strace
6 years agotests: extend F_OFD_* decoding checks
Dmitry V. Levin [Fri, 1 Jun 2018 01:46:06 +0000 (01:46 +0000)]
tests: extend F_OFD_* decoding checks

Check that non-faulty F_OFD_* fcntl operations are decoded properly.

* tests/fcntl-common.c: Include <string.h>.
(test_flock64_ofd): New function.
(test_flock64): Invoke it, remove [F_OFD_SETLK].

6 years agotests/fcntl-common.c: define and initialize errstr
Dmitry V. Levin [Fri, 1 Jun 2018 01:46:06 +0000 (01:46 +0000)]
tests/fcntl-common.c: define and initialize errstr

Initialize errstr inside invoke_test_syscall so that its users
won't have to go into trouble of caring about clobbering errno.

* tests/fcntl-common.c (errstr): New variable.
(invoke_test_syscall): Initialize it.
(test_flock_einval, test_flock64_einval, test_flock,
test_f_owner_ex_type_pid): Use it.
* tests/fcntl.c (test_flock64_undecoded): Likewise.
* tests/fcntl64.c (test_flock64_lk64): Likewise.

6 years agotests/fcntl-common.c: add fd argument to invoke_test_syscall
Dmitry V. Levin [Fri, 1 Jun 2018 01:46:06 +0000 (01:46 +0000)]
tests/fcntl-common.c: add fd argument to invoke_test_syscall

Extend invoke_test_syscall for later use with different file
descriptors.

* tests/fcntl-common.c (invoke_test_syscall): Add fd argument, pass it
to TEST_SYSCALL_NR syscall.  All users updated.

6 years agotests: move F_OFD_SETLK* checks from fcntl64.c to fcntl-common.c
Dmitry V. Levin [Fri, 1 Jun 2018 01:46:06 +0000 (01:46 +0000)]
tests: move F_OFD_SETLK* checks from fcntl64.c to fcntl-common.c

This change enables F_OFD_SETLK* tests for fcntl as well.

* tests/fcntl64.c (test_flock64): Rename to test_flock64_lk64.
[F_OFD_SETLK]: Remove.
(test_flock64_einval): Move ...
* tests/fcntl-common.c: ... here.
(test_flock64_lk64): New protype.
(test_flock64_einval, test_flock64): New functions.
* tests/fcntl.c (test_flock64_einval): Rename to test_flock64_undecoded.
(TEST_FLOCK64_UNDECODED): New macro.
(test_flock64): Rename to test_flock64_lk64, replace TEST_FLOCK64_EINVAL
with TEST_FLOCK64_UNDECODED.

6 years agotests: move F_OWNER_* tests to fcntl-common.c
Dmitry V. Levin [Fri, 1 Jun 2018 01:46:06 +0000 (01:46 +0000)]
tests: move F_OWNER_* tests to fcntl-common.c

This change enables F_OWNER_* tests for fcntl64 as well.

* tests/fcntl.c: Move main, [TEST_FLOCK64_EINVAL],
and [TEST_F_OWNER_EX] ...
* tests/fcntl-common.c: ... here.
(test_flock64): New prototype.
* tests/fcntl64.c (main): Remove.

6 years agotests: rename struct_flock.c to fcntl-common.c
Dmitry V. Levin [Fri, 1 Jun 2018 01:46:06 +0000 (01:46 +0000)]
tests: rename struct_flock.c to fcntl-common.c

It is not limited to struct flock, more fcntl tests are going to land
in this file.

* tests/struct_flock.c: Rename to fcntl-common.c.
* tests/Makefile.am (EXTRA_DIST): Rename struct_flock.c
to fcntl-common.c.
* tests/fcntl.c: Likewise.
* tests/fcntl64.c: Likewise.

6 years agotests: check decoding of new FRA_* netlink attributes
Eugene Syromyatnikov [Wed, 23 May 2018 16:56:32 +0000 (18:56 +0200)]
tests: check decoding of new FRA_* netlink attributes

* configure.ac (AC_CHECK_TYPES): Check for struct fib_rule_port_range
in <linux/fib_rules.h>.
* tests/nlattr_fib_rule_hdr.c: Include <linux/in.h>.
(FRA_PROTOCOL, FRA_IP_PROTO, FRA_SPORT_RANGE, FRA_DPORT_RANGE): New
macro constants.
[!HAVE_STRUCT_FIB_RULE_PORT_RANGE] (struct fib_rule_port_range): New
type.
(main): Check decoding of new FRA_* netlink attributes.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agortnl_rule: decode new FRA_* attributes
Eugene Syromyatnikov [Mon, 16 Apr 2018 00:02:18 +0000 (02:02 +0200)]
rtnl_rule: decode new FRA_* attributes

* nlattr.h (DECL_NLA(ip_proto), DECL_NLA(rt_proto)): New declarations.
* nlattr.c (decode_nla_ip_proto): New function.
* rtnl_route.c (decode_nla_rt_proto): Likewise.
* rtnl_rule.c (decode_rule_port_rang): Likewise.
(fib_rule_hdr_nla_decoders) <[FRA_PROTOCOL]>: New attribute, introduced
by Linux commit v4.17-rc1~148^2~371.
(fib_rule_hdr_nla_decoders) <[FRA_IP_PROTO], [FRA_SPORT_RANGE],
[FRA_DPORT_RANGE]>: New attributes, introduced by Linux commit
v4.17-rc1~148^2~328^2~4.
* xlat/rtnl_rule_attrs.in (FRA_PROTOCOL, FRA_IP_PROTO, FRA_SPORT_RANGE,
FRA_DPORT_RANGE): New constants.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agonlattr: introduce decode_nla_xval helper
Eugene Syromyatnikov [Mon, 7 May 2018 06:40:02 +0000 (08:40 +0200)]
nlattr: introduce decode_nla_xval helper

* nlattr.c (decode_nla_xval): New function.
* nlattr.h: Include "xlat.h".
(struct decode_nla_xlat_opts): New type.
(DECL_NLA(xval)): New declaration.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoMove definitions of xlat_type and xlat_style from defs.h to xlat.h
Dmitry V. Levin [Wed, 30 May 2018 20:50:29 +0000 (20:50 +0000)]
Move definitions of xlat_type and xlat_style from defs.h to xlat.h

* defs.h (enum xlat_type, enum xlat_style, XLAT_STYLE_FORMAT_SHIFT,
XLAT_STYLE_VERBOSITY_MASK, XLAT_STYLE_FORMAT_MASK, XLAT_STYLE_SPEC_BITS,
XLAT_STYLE_MASK): Move ...
* xlat.h: ... here.

6 years agotravis: switch from gcc-7 to gcc-8
Dmitry V. Levin [Wed, 30 May 2018 10:54:34 +0000 (10:54 +0000)]
travis: switch from gcc-7 to gcc-8

* .travis.yml (matrix): Change gcc-7 to gcc-8.

6 years agotests: use syscall() for ioctl() calls with oversized arguments
Eugene Syromyatnikov [Wed, 30 May 2018 14:44:55 +0000 (16:44 +0200)]
tests: use syscall() for ioctl() calls with oversized arguments

* tests/ioctl_inotify.c (sys_ioctl): New function.
(main): Use sys_ioctl for ioctl calls with oversized arguments.
* tests/ioctl_loop.c: Likewise.
* tests/ioctl_perf.c: Likewise.

6 years agoprint_ifindex: respect xlat style settings
Eugene Syromyatnikov [Mon, 7 May 2018 06:42:24 +0000 (08:42 +0200)]
print_ifindex: respect xlat style settings

Print interface indices according to the preferred xlat style settings.

* print_ifindex.c (INI_PFX, INI_SFX): New helper macros.
[HAVE_IF_INDEXTONAME] (get_ifname): New function.
[HAVE_IF_INDEXTONAME] (print_ifindex): Implement as a wrapper around
get_ifname and print_xlat_ex.

6 years agotests/test_nlattr.h: fix pointer calculation in TEST_NLATTR_ARRAY, take 2
Eugene Syromyatnikov [Thu, 10 May 2018 17:33:52 +0000 (19:33 +0200)]
tests/test_nlattr.h: fix pointer calculation in TEST_NLATTR_ARRAY, take 2

The old code works only when an array contains exactly two items.

* tests/test_nlattr.h (TEST_NLATTR_ARRAY): Fix pointer address
for the case of incomplete read.

6 years agonlattr: print index names in netlink meminfo array
Eugene Syromyatnikov [Thu, 10 May 2018 16:29:39 +0000 (18:29 +0200)]
nlattr: print index names in netlink meminfo array

* xlat/netlink_sk_meminfo_indices.in: New file.
* nlattr.c: Include xlat/netlink_sk_meminfo_indices.h.
(decode_nla_meminfo): Use print_array_ex, pass
netlink_sk_meminfo_indices as index xlat table.
* tests/nlattr_inet_diag_msg.c: Update expected output.

6 years agoIntroduce ARRSZ_PAIR macro
Eugene Syromyatnikov [Mon, 7 May 2018 06:24:56 +0000 (08:24 +0200)]
Introduce ARRSZ_PAIR macro

A shorthand similar to ARG_STR in its purpose: it provides and ability
to pass an array an its size without variable name duplication.

* macros.h (ARRSZ_PAIR): New macro.

6 years agoprint_array: add support for printing array indices
Eugene Syromyatnikov [Mon, 7 May 2018 06:06:14 +0000 (08:06 +0200)]
print_array: add support for printing array indices

* defs.h (XLAT_STYLE_SPEC_BITS, XLAT_STYLE_MASK): New macro constants.
(tfetch_mem_fn, print_fn): New typedefs.
(enum print_array_flag_bits, enum print_array_flags): New enumerations.
(print_array_ex): Rename from print_array, add flags, index_xlat,
index_xlat_size, and index_dflt arguments.
(print_array): New static inline function, a thin wrapper around
print_array_ex.
util.c: Include "xlat.h".
(print_array): Rename to print_array_ex, add flags, index_xlat,
index_xlat_size, and index_dflt arguments.  Print array indices
according to the style settings specified by flags if PAF_PRINT_INDICES
is set.

6 years agoEnhance printing of unfetchable object addresses in sequences and arrays
Dmitry V. Levin [Tue, 29 May 2018 09:58:10 +0000 (09:58 +0000)]
Enhance printing of unfetchable object addresses in sequences and arrays

* btrfs.c (btrfs_print_tree_search): Print the address of unfetchable
object inside the sequence using printaddr_comment.
* msghdr.c (decode_msg_control): Likewise.
* execve.c (printargv): Print the address of unfetchable object inside
the array using printaddr_comment.
* netlink.c (fetch_nlmsghdr): Add in_array argument.  When in_array
is true, print the address of unfetchable object using
printaddr_comment.
* nlattr.c (fetch_nlattr): Likewise.
* tests/execve.c (main): Update expected output.
* tests/execveat.c (main): Likewise.
* tests/msg_control.c (test_scm_rights1, test_scm_rights2,
test_scm_security): Likewise.
* tests/netlink_protocol.c (send_query): Likewise.
* tests/nlattr.c (test_nlattr): Likewise.

6 years agoprint_array: enhance printing of unfetchable object addresses
Dmitry V. Levin [Tue, 29 May 2018 01:15:19 +0000 (01:15 +0000)]
print_array: enhance printing of unfetchable object addresses

When umoven_func invocation fails to fetch data, it prints the faulty
address.  If this happens to a subsequent umoven_func invocation,
the printed address may be undistinguishable from a valid data printed
by print_func, e.g. when the data is printed in a numeric form like
[0x1, 0x2, 0x3, 0xdefaced].

Fix this source of confusion by moving the printing of the faulty
address from umoven_func to print_array itself.  This change renames
umoven_func to tfetch_mem_func and changes its semantics, so that
 - tfetch_mem_func never prints anything;
 - tfetch_mem_func returns true if the fetch succeeded,
   and false otherwise.

* defs.h (print_array): Replace umoven_func argument with
tfetch_mem_func.
* util.c (print_array): Replace umoven_func argument with
tfetch_mem_func, document expected tfetch_mem_func return value
semantics.  When tfetch_mem_func returns false, print either addr
or "... /* addr */" depending on the context (inside the array or not).
* bpf.c (print_ebpf_prog, print_bpf_prog_info,
BEGIN_BPF_CMD_DECODER(BPF_PROG_QUERY)): Replace umoven_or_printaddr
argument of print_array with tfetch_mem.
* bpf_filter.c (print_bpf_fprog): Likewise.
* btrfs.c (btrfs_print_logical_ino_container,
btrfs_print_ino_path_container, btrfs_print_qgroup_inherit,
btrfs_ioctl): Likewise.
* dm.c (dm_decode_dm_target_deps): Likewise.
* epoll.c (epoll_wait_common): Likewise.
* file_ioctl.c (file_ioctl): Likewise.
* ipc_sem.c (tprint_sembuf_array): Likewise.
* kexec.c (print_kexec_segments): Likewise.
* mem.c (SYS_FUNC(subpage_prot)): Likewise.
* net.c (print_getsockopt): Likewise.
* netlink.c (decode_nlmsgerr_attr_cookie): Likewise.
* netlink_netlink_diag.c (decode_netlink_diag_groups): Likewise.
* netlink_packet_diag.c (decode_packet_diag_mclist): Likewise.
* netlink_unix_diag.c (decode_unix_diag_inode): Likewise.
* nlattr.c (decode_nla_meminfo): Likewise.
* numa.c (print_nodemask, SYS_FUNC(move_pages),
* perf_ioctl.c (perf_ioctl_query_bpf): Likewise.
* poll.c (decode_poll_entering): Likewise.
* printsiginfo.c (print_siginfo_array): Likewise.
* rtnl_tc.c (decode_tca_stab_data): Likewise.
* sock.c (decode_ifconf): Likewise.
* uid.c (print_groups): Likewise.
* io.c (SYS_FUNC(io_submit), SYS_FUNC(io_getevents)): Replace
umoven_or_printaddr argument of print_array with tfetch_mem.
(tprint_iov_upto): Replace umoven_or_printaddr_ignore_syserror
with tfetch_mem_ignore_syserror.
* v4l2.c (print_v4l2_format_fmt): Replace umoven_or_printaddr argument
of print_array with tfetch_mem.
(print_v4l2_ext_controls): Replace umoven_or_printaddr_ignore_syserror
with tfetch_mem_ignore_syserror.
* mmsghdr.c (fetch_struct_mmsghdr_or_printaddr): Rename
to fetch_struct_mmsghdr_for_print, do not print address, return bool.
(decode_mmsgvec): Replace fetch_struct_mmsghdr_or_printaddr
with fetch_struct_mmsghdr_for_print.
* tests/aio.c (main): Update expected output.
* tests/bpf.c (print_BPF_PROG_QUERY_attr5): Likewise.
* tests/ioctl_perf-success.c (main): Likewise.
* tests/ioctl_v4l2.c (main): Update expected output.
* tests/kexec_load.c (main): Likewise.
* tests/mmsg_name.c (test_mmsg_name): Update expected output.
* tests/move_pages.c (print_page_array, print_node_array): Likewise.
* tests/poll.c (print_pollfd_array_entering): Likewise.
* tests/preadv-pwritev.c (main): Likewise.
* tests/preadv2-pwritev2.c (dumpio): Likewise.
* tests/process_vm_readv_writev.c (print_iov): Likewise.
* tests/pwritev.c (print_iovec): Likewise.
* tests/readv.c (main): Likewise.
* tests/seccomp-filter-v.c
* tests/semop.c (main): Likewise.
* tests/set_mempolicy.c (print_nodes): Likewise.
* tests/setgroups.c (main): Likewise.
* tests/test_nlattr.h (print_nlattr) Likewise.

Co-Authored-by: Eugene Syromyatnikov <evgsyr@gmail.com>
6 years agoIntroduce tfetch_* family of functions and macros
Dmitry V. Levin [Mon, 28 May 2018 11:32:03 +0000 (11:32 +0000)]
Introduce tfetch_* family of functions and macros

These new functions are going to be used instead of umove_or_printaddr*
as umoven_func argument of print_array.

* defs.h (tfetch_mem64, tfetch_mem64_ignore_syserror): New
function prototypes.
(tfetch_mem, tfetch_mem_ignore_syserror): New static inline
wrappers.
(tfetch_obj): New macro wrapper around tfetch_mem.
* util.c (tfetch_mem64, tfetch_mem64_ignore_syserror): New
functions.
(umoven_or_printaddr64, umoven_or_printaddr64_ignore_syserror): Use
them.

6 years agoIntroduce printaddr_comment
Dmitry V. Levin [Tue, 29 May 2018 09:58:10 +0000 (09:58 +0000)]
Introduce printaddr_comment

* defs.h (printaddr_comment): New static inline wrapper around
tprintf_comment.

6 years agoTurn printaddr into a thin wrapper around printaddr64
Dmitry V. Levin [Tue, 29 May 2018 09:58:10 +0000 (09:58 +0000)]
Turn printaddr into a thin wrapper around printaddr64

* util.c (printaddr): Move ...
* defs.h: ... here, add "static inline" qualifiers.

6 years agodefs.h: add comments about umove* return values
Eugene Syromyatnikov [Sun, 20 May 2018 15:47:04 +0000 (17:47 +0200)]
defs.h: add comments about umove* return values

* defs.h (umoven, umoven_or_printaddr64,
umoven_or_printaddr64_ignore_syserror, umovestr): Add comments about
return values.

6 years agotests: use TAIL_ALLOC_OBJECT_CONST_PTR where appropriate
Dmitry V. Levin [Mon, 28 May 2018 17:34:50 +0000 (17:34 +0000)]
tests: use TAIL_ALLOC_OBJECT_CONST_PTR where appropriate

* tests/kcmp.c (main): Use TAIL_ALLOC_OBJECT_CONST_PTR.
* tests/modify_ldt.c (main): Likewise.
* tests/netlink_protocol.c (send_query): Likewise.
* tests/ptrace.c (test_peeksiginfo, main): Likewise.
* tests/s390_guarded_storage.c (main): Likewise.
* tests/s390_sthyi.c (main): Likewise.
* tests/xet_thread_area_x86.c (main): Likewise.

6 years agobpf: decode bpf_attr.info field used by BPF_OBJ_GET_INFO_BY_FD command
Eugene Syromyatnikov [Mon, 5 Mar 2018 14:56:35 +0000 (15:56 +0100)]
bpf: decode bpf_attr.info field used by BPF_OBJ_GET_INFO_BY_FD command

* bpf_attr.h [!BPF_TAG_SIZE] (BPF_TAG_SIZE): Define.
[BPF_TAG_SIZE]: Check that BPF_TAG_SIZE is 8.
(struct bpf_map_info_struct, struct bpf_prog_info_struct): New
structures.
(bpf_map_info_struct_size, expected_bpf_map_info_struct_size,
bpf_prog_info_struct_size, expected_bpf_prog_info_struct_size): New
macro constants.
* bpf.c (print_bpf_obj_info_fn): New type.
(print_bpf_map_info, print_bpf_prog_info, fetch_bpf_obj_info,
print_bpf_obj_info_addr, print_bpf_obj_info): New functions.
(BEGIN_BPF_CMD_DECODER(BPF_OBJ_GET_INFO_BY_FD)): Print bpf_fd and info_len
fields only on entering, call print_bpf_obj_info for printing info field.
* tests/bpf.c (BPF_OBJ_GET_INFO_BY_FD_checks): Print info field
as a pointer.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agobpf: add support for checking structures outside union bpf_attr
Eugene Syromyatnikov [Sun, 20 May 2018 23:24:08 +0000 (01:24 +0200)]
bpf: add support for checking structures outside union bpf_attr

struct bpf_prog_info and bpf_map_info need essentially the same handling
as union bpf_attr.

* gen_bpf_attr_check.sh: Derive type_name from $struct if it doesn't
start with "BPF_", derive TYPE_NAME from type_name, use them in code
generation.
* m4/gen_bpf_attr_m4.sh: Rewrite parsing/generation code into awk,
add support for structures outside union bpf_attr.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agobpf: remove bpf_priv_data
Dmitry V. Levin [Sat, 26 May 2018 10:32:54 +0000 (10:32 +0000)]
bpf: remove bpf_priv_data

As various bpf commands need different data to save between entering
and exiting of the syscall, do not emulate union bpf_attr approach.

* bpf.c (struct bpf_priv_data): Remove.
(DECL_BPF_CMD_DECODER): Remove "struct bpf_priv_data *" argument.
(BEGIN_BPF_CMD_DECODER(BPF_PROG_QUERY)): Use set_tcb_priv_ulong
and get_tcb_priv_ulong to keep bpf_attr.query.prog_cnt field.
(SYS_FUNC(bpf)): Remove priv variable, do not initialize it,
and do not pass it to bpf_cmd_decoders.

6 years agotests: add union bpf_attr.query.prog_ids field decoding checks
Eugene Syromyatnikov [Sun, 20 May 2018 16:00:12 +0000 (18:00 +0200)]
tests: add union bpf_attr.query.prog_ids field decoding checks

* tests/bpf-success-v.c: New file.
* tests/bpf-success.c: Likewise.
* tests/bpf-success-v.test: New test.
* tests/bpf-success.test: Likewise.
* tests/.gitignore: Add bpf-success and bpf-success-v.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(DECODER_TESTS): Add bpf-success.test and bpf-success-v.test.
* tests/bpf.c [INJECT_RETVAL] (sys_bpf): Check that retuned value
is equivalent to the injected one; append "(INJECTED)" string to errstr.
(prog_load_ids, prog_load_ids_ptr): New variables.
(init_BPF_PROG_QUERY_attr4, print_BPF_PROG_QUERY_attr4,
init_BPF_PROG_QUERY_attr5, print_BPF_PROG_QUERY_attr5): New functions.
(BPF_PROG_QUERY_checks): Drop "const" qualifier, add new checks.

6 years agobpf: BPF_PROG_QUERY bpf_attr.query.prog_ids printing fixes
Eugene Syromyatnikov [Sun, 20 May 2018 15:57:02 +0000 (17:57 +0200)]
bpf: BPF_PROG_QUERY bpf_attr.query.prog_ids printing fixes

* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_PROG_QUERY)): Use
print_uint32_array_member instead of print_uint64_array_member for
printing prog_ids elements (and change the type of prog_id_buf from
uint64_t to uint32_t), as they are 32-bit; use common trick with
print_big_u64_addr for handling possible ambiguity with prog_ids
address.
* tests/bpf.c (BIG_ADDR_MAYBE): New macro.
(BPF_PROG_QUERY_checks): Update expected output.

6 years agobpf: add support for instruction decoding
Eugene Syromyatnikov [Thu, 22 Feb 2018 06:58:30 +0000 (07:58 +0100)]
bpf: add support for instruction decoding

* xlat/ebpf_regs.in: New file.
* bpf.c (struct ebpf_insn, struct ebpf_insns_data): New type definitions.
(print_ebpf_insn, print_ebpf_prog): New functions.
(DEF_BPF_CMD_DECODER(BPF_PROG_LOAD)): Use them.

6 years agotests: check decoding of successful PERF_EVENT_IOC_{ID,QUERY_BPF} ioctls
Eugene Syromyatnikov [Mon, 28 May 2018 17:34:50 +0000 (19:34 +0200)]
tests: check decoding of successful PERF_EVENT_IOC_{ID,QUERY_BPF} ioctls

As these have some argument output on the exit path.

* tests/ioctl_perf-success.c: New file.
* tests/ioctl_perf-success.test: New test.
* tests/Makefile.am (DECODER_TESTS): Add it.
(check_PROGRAMS): Add ioctl_perf-success.
* tests/.gitignore: Likewise.
* tests/ioctl_perf.c: Remove TODO.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoImplement PERF_EVENT_IOC_* decoding
Eugene Syromyatnikov [Tue, 15 May 2018 16:45:28 +0000 (18:45 +0200)]
Implement PERF_EVENT_IOC_* decoding

* perf.c (fetch_perf_event_attr, print_perf_event_attr): Remove "static"
qualifier.
* defs.h (fetch_perf_event_attr, print_perf_event_attr): New
declarations.
* perf_event_struct.h (struct perf_event_query_bpf): New type
definition.
* perf_ioctl.c: New file.
* Makefile.am (strace_SOURCES): Add it.
* xlat/perf_ioctl_cmds.in: New file.
* xlat/perf_ioctl_flags.in: Likewise.
* ioctl.c (ioctl_decode) <case '$'>: Call perf_ioctl.
* tests/gen_tests.in (ioctl_perf): New test.
* tests/ioctl_perf.c: New file.
* tests/pure_executables.list: ioctl_perf.
* tests/.gitignore: Likewise.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agotests: fix ipc_msgbuf.test
Dmitry V. Levin [Mon, 28 May 2018 17:34:50 +0000 (17:34 +0000)]
tests: fix ipc_msgbuf.test

* tests/ipc_msgbuf.test: Fix -a argument.

6 years agoxlat: update IPPROTO_* constants
Eugene Syromyatnikov [Wed, 23 May 2018 14:16:34 +0000 (16:16 +0200)]
xlat: update IPPROTO_* constants

* xlat/inet_protocols.in (IPPROTO_GGP, IPPROTO_HELLO, IPPROTO_ND):
Remove, not defined in Linux.
(IPPROTO_BEETPH): New constant, introduced by Linux commit
v2.6.19-rc1~33^2.
(IPPROTO_L2TP): New constant, introduced by Linux commit
v2.6.35-rc1~473^2~594.
(IPPROTO_MH): New constant, introduced by Linux commit
v2.6.19-rc1~1272^2~157.
Add default values to constants, sort the file.

6 years agoxlat: add fallback definitions to RTPROT_* constants
Eugene Syromyatnikov [Wed, 23 May 2018 13:39:25 +0000 (15:39 +0200)]
xlat: add fallback definitions to RTPROT_* constants

* xlat/routing_protocols.in: Add default values to constants.

6 years agoxlat: add SECCOMP_FILTER_FLAG_SPEC_ALLOW
Eugene Syromyatnikov [Wed, 23 May 2018 10:24:05 +0000 (12:24 +0200)]
xlat: add SECCOMP_FILTER_FLAG_SPEC_ALLOW

* xlat/seccomp_filter_flags.in (SECCOMP_FILTER_FLAG_SPEC_ALLOW): New
constant, introduced by Linux commit v4.17-rc3-24-g00a02d0.
* tests/seccomp-filter.c: Update expected output.
* tests/seccomp-filter-v.c: Likewise.

6 years agoprctl: add PR_GET_SPECULATION_CTRL/PR_SET_SPECULATION_CTRL decoding
Eugene Syromyatnikov [Tue, 22 May 2018 17:13:30 +0000 (19:13 +0200)]
prctl: add PR_GET_SPECULATION_CTRL/PR_SET_SPECULATION_CTRL decoding

* xlat/pr_spec_cmds.in: New fille.
* xlat/pr_spec_get_store_bypass_flags.in: Likewise.
* xlat/pr_spec_set_store_bypass_flags.in: Likewise.
* xlat/prctl_options.in (PR_GET_SPECULATION_CTRL,
PR_SET_SPECULATION_CTRL): New constants, introduced by Linux commit
v4.17-rc3-15-gb617cfc.
* prctl.c (SYS_FUNC(prctl)) <case PR_GET_SPECULATION_CTRL,
case PR_SET_SPECULATION_CTRL>: Implement decoding of new prctl options.
* tests/Makefile.am (check_PROGRAMS): Add prctl-spec-inject.
(DECODER_TESTS): Add prctl-spec-inject.test.
* tests/prctl-spec-inject.c: New file.
* tests/prctl-spec-inject.test: New test.
* tests/.gitignore: Add prctl-spec-inject.

6 years agotests: add keyctl variants with different xlat verbosity levels
Eugene Syromyatnikov [Mon, 21 May 2018 01:50:16 +0000 (03:50 +0200)]
tests: add keyctl variants with different xlat verbosity levels

* tests/keyctl-Xabbrev.c: New file.
* tests/keyctl-Xraw.c: Likewise.
* tests/keyctl-Xverbose.c: Likewise.
* tests/keyctl.c (XARG_STR): New macro.
(do_keyctl): Print command in accordance with XLAT_RAW/XLAT_VERBOSE settings.
(main): Update expected output.
* tests/pure_executables.list: Add keyctl-Xabbrev, keyctl-Xraw,
and keyctl-Xverbose.
* tests/.gitignore: Likewise.
* tests/gen_tests.in (keyctl-Xabbrev, keyctl-Xraw, keyctl-Xverbose): New
tests.

6 years agokeyctl: print KEYCTL_SET_REQKEY_KEYRING argument as an integer
Eugene Syromyatnikov [Mon, 21 May 2018 01:46:48 +0000 (03:46 +0200)]
keyctl: print KEYCTL_SET_REQKEY_KEYRING argument as an integer

* xlat/key_reqkeys.in: Add #val_type int.
* keyctl.c (SYS_FUNC(keyctl)) <case KEYCTL_SET_REQKEY_KEYRING>: Print
arg2 as an integer.
* tests/keyctl.c: Update expected output.

6 years agokeyctl: respect xlat style when printing errno
Eugene Syromyatnikov [Mon, 21 May 2018 00:33:33 +0000 (02:33 +0200)]
keyctl: respect xlat style when printing errno

* keyctl.c (keyctl_reject_key): Use print_xlat_ex for printing error
argument.

6 years agosyscall.c: unify error value printing
Eugene Syromyatnikov [Mon, 21 May 2018 00:47:18 +0000 (02:47 +0200)]
syscall.c: unify error value printing

There's little reason not to decode error code for syscalls printed in
raw; moreover, it creates inconsistencies for unknown syscall printing.

Another issue was with error numbers unknown to strace: previously, they
were printed as "... = -1 1234 (Unknown error 1234)" which looked kinda
weird.

* syscall.c (print_err_ret): New function.
(syscall_exiting_trace): Remove u_error variable, use tcp->u_error
instead. Remove u_error_str variable.
(syscall_exiting_trace) <if (raw(tcp))>: Call print_err_ret if u_error
is non-zero.
(syscall_exiting_trace) <if (!(sys_res & RVAL_NONE) && tcp->u_error)>:
Use print_err_ret for default error printing.
* tests/nsyscalls.c [!LINUX_MIPSO32] (test_syscall): Update expected
output.
* tests/qual_fault.c (invoke) <if (is_raw)>: Likewise.
* strace.1.in (.SH DESCIPTION): Update unknown syscall example.

6 years agoioctl: implement INOTIFY_IOC_SETNEXTWD decoding
Eugene Syromyatnikov [Fri, 18 May 2018 17:16:17 +0000 (19:16 +0200)]
ioctl: implement INOTIFY_IOC_SETNEXTWD decoding

* inotify_ioctl.c: New file.
* Makefile.am (strace_SOURCES): Add it.
* defs.h (DECL_IOCTL(inotify)): New declaration.
* ioctl.c (ioctl_decode) <case 'I'>: Call inotify_ioctl.
* tests/ioctl_inotify.c: New file.
* tests/.gitignore: Add ioctl_inotify.
* tests/pure_executables.list: Likewise.
* tests/gen_tests.in (ioctl_inotify): New test.

6 years agotests/test_nlattr.h: avoid testing cropped objects of size 1
Eugene Syromyatnikov [Wed, 23 May 2018 16:45:43 +0000 (18:45 +0200)]
tests/test_nlattr.h: avoid testing cropped objects of size 1

* tests/test_nlattr.h (TEST_NLATTR_OBJECT_EX_): Check
"len < sizeof(obj_)" case only if "sizeof(obj_) > 1".

6 years agotests: pass index to print_elem_ callback in TEST_NLATTR_ARRAY
Eugene Syromyatnikov [Thu, 10 May 2018 16:26:37 +0000 (18:26 +0200)]
tests: pass index to print_elem_ callback in TEST_NLATTR_ARRAY

* tests/test_nlattr.h (TEST_NLATTR_ARRAY): Pass array index to the
print_elem_ callback.
* tests/nlattr_inet_diag_msg.c (print_uint): Add index argument.
* tests/nlattr_netlink_diag_msg.c (print_xlong): Likewise.
* tests/nlattr_packet_diag_msg.c (print_packet_diag_mclist,
print_sock_filter): Likewise.
* tests/nlattr_unix_diag_msg.c (print_uint): Likewise.

6 years agotests: further cleanup bpf big address checks
Dmitry V. Levin [Thu, 24 May 2018 12:23:39 +0000 (12:23 +0000)]
tests: further cleanup bpf big address checks

Replace BIG_ADDR_IS_64BIT and BIG_ADDR_IS_32BIT with BIG_ADDR().

* tests/bpf.c (BIG_ADDR): New macro.
(BIG_ADDR_IS_64BIT, BIG_ADDR_IS_32BIT): Remove.
(BPF_PROG_LOAD_checks, BPF_OBJ_PIN_checks,
BPF_RAW_TRACEPOINT_OPEN_checks): Use BIG_ADDR() instead of
BIG_ADDR_IS_64BIT and BIG_ADDR_IS_32BIT.

6 years agotests: cleanup bpf big address checks
Dmitry V. Levin [Wed, 23 May 2018 23:27:43 +0000 (23:27 +0000)]
tests: cleanup bpf big address checks

Introduce BIG_ADDR_IS_64BIT and BIG_ADDR_IS_32BIT to reduce redundancy.

* tests/bpf.c (BIG_ADDR_IS_64BIT, BIG_ADDR_IS_32BIT): New macros.
(BPF_PROG_LOAD_checks, BPF_OBJ_PIN_checks,
BPF_RAW_TRACEPOINT_OPEN_checks): Use them.

6 years agobpf: add support for BPF_RAW_TRACEPOINT_OPEN command decoding
Eugene Syromyatnikov [Tue, 15 May 2018 13:38:54 +0000 (15:38 +0200)]
bpf: add support for BPF_RAW_TRACEPOINT_OPEN command decoding

* bpf_attr.h (struct BPF_RAW_TRACEPOINT_OPEN_struct): New type
definition.
(BPF_RAW_TRACEPOINT_OPEN_struct_size,
expected_BPF_RAW_TRACEPOINT_OPEN_struct_size): New macros.
* xlat/bpf_commands.in (BPF_RAW_TRACEPOINT_OPEN): New constant,
introduced by Linux commit v4.17-rc1~148^2~19^2~4^2~3.
* xlat/bpf_prog_types.in (BPF_PROG_TYPE_RAW_TRACEPOINT): Likewise.
* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_RAW_TRACEPOINT_OPEN)): New bpf
command decoder.
(SYS_FUNC(bpf)) <bpf_cmd_decoders[]>: Add
BPF_CMD_ENTRY(BPF_RAW_TRACEPOINT_OPEN).
* tests/bpf.c (union bpf_attr_data): Add
BPF_ATTR_DATA_FIELD(BPF_RAW_TRACEPOINT_OPEN).
(BPF_PROG_LOAD_checks): Update.
(init_BPF_RAW_TRACEPOINT_attr2): New function.
(BPF_RAW_TRACEPOINT_OPEN_checks): New checks array.
(main) <checks>: Add CHK(BPF_RAW_TRACEPOINT_OPEN).

6 years agobpf: add support for decoding struct bpf_attr.expected_attach_type field
Eugene Syromyatnikov [Tue, 15 May 2018 12:19:01 +0000 (14:19 +0200)]
bpf: add support for decoding struct bpf_attr.expected_attach_type field

* bpf_attr.h (struct BPF_PROG_LOAD_struct): Add expected_attach_type
field.
(BPF_PROG_LOAD_struct_size): Update to offsetofend of
expected_attach_type field.
(expected_BPF_PROG_LOAD_struct_size): Update to 72.
* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_PROG_LOAD)): Decode
expected_attach_type field.
* tests/bpf.c: Update expected output.

6 years agonlattr: do not assume that SK_MEMINFO_VARS is constant
Eugene Syromyatnikov [Thu, 10 May 2018 17:37:29 +0000 (19:37 +0200)]
nlattr: do not assume that SK_MEMINFO_VARS is constant

SK_MEMINFO_VARS changes over time (as it was in Linux commit
v4.7-rc1~154^2~354^2~4, for example), so we cannot use it
for sanity checks.

* nlattr.c (print_meminfo): Remove.
(decode_nla_meminfo): Use generic print_uint32_array_member element
printer callback.
* tests/nlattr_inet_diag_msg.c (main): Update expected output.

6 years agoIntroduce print_uint32_array_member helper function
Eugene Syromyatnikov [Thu, 10 May 2018 17:35:46 +0000 (19:35 +0200)]
Introduce print_uint32_array_member helper function

Analogous to print_int32_array_member, this helper is going to be used
in various decoders, including BPF_PROG_QUERY, PERF_EVENT_IOC_*,
and netlink meminfo.

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

6 years agoIntroduce print_int32_array_member helper function
Eugene Syromyatnikov [Mon, 7 May 2018 06:04:21 +0000 (08:04 +0200)]
Introduce print_int32_array_member helper function

Analogous to print_uint64_array_member, this helper is going to be used
for IFLA_AF_SPEC decoding.

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

6 years agodefs.h: move print_uint64_array_member and print_array declarations down
Eugene Syromyatnikov [Mon, 7 May 2018 06:03:15 +0000 (08:03 +0200)]
defs.h: move print_uint64_array_member and print_array declarations down

In preparation for the forthcoming changes.

6 years agotests/test_nlattr.h: fix pointer calculation in TEST_NLATTR_ARRAY
Eugene Syromyatnikov [Thu, 10 May 2018 17:33:52 +0000 (19:33 +0200)]
tests/test_nlattr.h: fix pointer calculation in TEST_NLATTR_ARRAY

The old code works only when an array contains exactly two items.

* tests/test_nlattr.h (TEST_NLATTR_ARRAY): Fix pointer address
for the case of incomplete read.

6 years agosockaddr: add support for sockaddr_l2 without l2_bdaddr_type
Eugene Syromyatnikov [Tue, 8 May 2018 15:46:33 +0000 (17:46 +0200)]
sockaddr: add support for sockaddr_l2 without l2_bdaddr_type

Apparently, struct sockaddr_l2 changed over time: the l2_bdaddr_type
field was added only by commit v3.5-rc1~35^2~3^2~18^2^2~39.

* configure.ac (AC_CHECK_HEADERS): Move bluetooth/bluetooth.h check into
a separate check.
(AC_CHECK_HEADERS([bluetooth/bluetooth.h])): New check, also checks for
struct sockaddr_l2.l2_bdaddr_type member in case of success.
* sockaddr.c (print_sockaddr_data_bt) <case offsetof(struct sockaddr_l2,
l2_bdaddr_type)>: Add to sizeof(struct sockaddr_l2) case. Print
l2_bdaddr_type field only if the provided sockaddr is big enough.
* tests/net-sockaddr.c (check_l2): Put l2_bdaddr_type usage/printing
under HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE ifdef, add a check for the
sockaddr_l2 structure without the l2_bdaddr_type field.

6 years agosock: guess ifr_hwaddr size in SIOCSIFHWADDR/SIOCGIFHWADDR
Eugene Syromyatnikov [Mon, 7 May 2018 06:34:44 +0000 (08:34 +0200)]
sock: guess ifr_hwaddr size in SIOCSIFHWADDR/SIOCGIFHWADDR

And make the output more structured.

* sock.c: Include xlat/arp_hardware_types.h in XLAT_MACROS_ONLY mode.
(print_ifreq) <case SIOCSIFHWADDR, case SIOCGIFHWADDR>: Introduce
hwaddr_sizes array, print ifr_hwaddr.sa_family, print ifr_hwaddr.sa_data
using hwaddr_sizes and PRINT_FIELD_MAC_SZ.

6 years agoSimplify errnoent and signalent
Dmitry V. Levin [Tue, 22 May 2018 01:08:31 +0000 (01:08 +0000)]
Simplify errnoent and signalent

Remove personality support for errnoent and signalent as
there is nothing personality-specific in these files.

* linux/aarch64/errnoent1.h: Remove.
* linux/aarch64/signalent1.h: Likewise.
* linux/powerpc64/errnoent1.h: Likewise.
* linux/powerpc64/signalent1.h: Likewise.
* linux/riscv/errnoent1.h: Likewise.
* linux/riscv/signalent1.h: Likewise.
* linux/s390x/errnoent1.h: Likewise.
* linux/s390x/signalent1.h: Likewise.
* linux/sparc64/errnoent1.h: Likewise.
* linux/sparc64/signalent1.h: Likewise.
* linux/tile/errnoent1.h: Likewise.
* linux/tile/signalent1.h: Likewise.
* linux/x32/errnoent1.h: Likewise.
* linux/x32/signalent1.h: Likewise.
* linux/x86_64/errnoent1.h: Likewise.
* linux/x86_64/errnoent2.h: Likewise.
* linux/x86_64/signalent1.h: Likewise.
* linux/x86_64/signalent2.h: Likewise.
* Makefile.am (EXTRA_DIST): Remove them.
* defs.h (errnoent0): Rename to errnoent.
(signalent0): Rename signalent.
(nerrnos, nsignals): Change to const variables unconditionally.
* syscall.c (errnoent0): Rename to errnoent.
(signalent0): Rename signalent.
(nerrnos, nsignals): Change to const variables unconditionally.
(nerrnos0, nsignals0): Remove.
[SUPPORTED_PERSONALITIES > 1] (errnoent1, signalent1, nerrnos1,
nsignals1): Remove.
[SUPPORTED_PERSONALITIES > 2] (errnoent2, signalent2, nerrnos2,
nsignals2): Likewise.
(set_personality): Do not assign errnoent, signalent, nerrnos,
and nsignals.

6 years agostrace.1.in: mention -Xraw in -eraw description
Eugene Syromyatnikov [Mon, 21 May 2018 01:43:40 +0000 (03:43 +0200)]
strace.1.in: mention -Xraw in -eraw description

* strace.1.in (\fB\-e\ raw\fR=\,\fIset\fR): Mention -X raw.

6 years agostrace.1.in: display -k option description only if it is enabled
Eugene Syromyatnikov [Sun, 20 May 2018 20:23:03 +0000 (22:23 +0200)]
strace.1.in: display -k option description only if it is enabled

Leverage the fact that manpage is generated and add condition statements
around mentions of -k option.

* strace.1.in (.SH SYNOPSIS): Put option list inside an
".if '@ENABLE_STACKTRACE_TRUE@'#' .ig end_unwind_opt ... .end_unwind_opt"
condition; add a second list of options without -k and put it inside
".if '@ENABLE_STACKTRACE_FALSE@'#' .ig end_no_unwind_opt ... .end_no_unwind_opt"
condition.
(.SS Output format) <-k>: Put it inside
".if '@ENABLE_STACKTRACE_TRUE@'#' .ig end_unwind ... .end_unwind"
condition, remove the mention of --enable-stacktrace configuration
option requirement.

6 years agostrace.1.in: format a reference to "open" syscall using bold font
Eugene Syromyatnikov [Sun, 20 May 2018 20:22:13 +0000 (22:22 +0200)]
strace.1.in: format a reference to "open" syscall using bold font

* strace.1.in (.SH DESCRIPTION): Format a reference to "open" syscall
using bold font.

6 years agotests/qual_fault.test: add -efu arguments to the interpreter
Eugene Syromyatnikov [Mon, 21 May 2018 00:37:09 +0000 (02:37 +0200)]
tests/qual_fault.test: add -efu arguments to the interpreter

* tests/qual_fault.test (#!/bin/sh): Add -efu arguments.

6 years agotests/qual_fault.test: swap expected/output files in match_diff calls
Eugene Syromyatnikov [Mon, 21 May 2018 00:35:45 +0000 (02:35 +0200)]
tests/qual_fault.test: swap expected/output files in match_diff calls

match_diff expects the first argument as strace output and the second
argument as expected output.

* tests/qual_fault.test (check_fault_injection): Swap arguments
in match_diff calls.

6 years agodefs.h: convert some macro wrappers into static inline functions
Dmitry V. Levin [Mon, 21 May 2018 11:02:54 +0000 (11:02 +0000)]
defs.h: convert some macro wrappers into static inline functions

* defs.h (pathtrace_select, pathtrace_match, printxval_searchn,
printxval_indexn, sprintxval, sprintflags, printnum_slong,
printnum_ulong, printnum_ptr, printnum_kptr): Convert macro wrappers
into static inline functions.

6 years agoxlat: add support for xlat_styles in printxval_dispatch
Eugene Syromyatnikov [Mon, 7 May 2018 05:24:56 +0000 (07:24 +0200)]
xlat: add support for xlat_styles in printxval_dispatch

* defs.h (printxval_dispatch_ex): Rename from printxval_dispatch, add
style argument.
(printxval_dispatch): New static inline function, a thin wrapper around
printxval_dispatch_ex.
* xlat.c (printxval_dispatch): Rename to printxval_dispatch_ex, add
style argument, handle it.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoMake printxval_dispatch publicly available
Eugene Syromyatnikov [Mon, 7 May 2018 05:22:05 +0000 (07:22 +0200)]
Make printxval_dispatch publicly available

* evdev.c (enum xlat_type, printxval_dispatch): Move elsewhere.
* defs.h (enum_xlat_type): Move from evdev.c.
(printxval_dispatch): New declaration.
* xlat.c (printxval_dispatch): Move from evdev.c, drop static qualifier.

6 years agoRevert "evdev: remove XT_NORMAL"
Eugene Syromyatnikov [Mon, 7 May 2018 05:17:29 +0000 (07:17 +0200)]
Revert "evdev: remove XT_NORMAL"

This reverts commit cc52da10c6f13feba577a83088f34916c6350165
in preparation for printxval_dispatch generalisation.

* evdev.c (enum xlat_type): Add XT_NORMAL back.
(printxval_dispatch): Handle XT_NORMAL again.

6 years agodefs.h: introduce is_bigendian macro
Eugene Syromyatnikov [Mon, 7 May 2018 05:13:54 +0000 (07:13 +0200)]
defs.h: introduce is_bigendian macro

This macro is going to be used in inline checks.

* defs.h (is_bigendian): New macro constant.

6 years agoutil.c: make memory allocation error messages more informative
Eugene Syromyatnikov [Mon, 9 Apr 2018 15:14:40 +0000 (17:14 +0200)]
util.c: make memory allocation error messages more informative

As those are pretty unusual, let's add some additional information
that can be reported by users.

* util.c (print_quoted_string_ex, dumpstr): Add reasons for memory
allocation errors.
(sizeof_iov): Change type from size_t to unsigned int.
(dumpiov_upto): Rewrite size initialisation similarly to the way it's
done in print_quoted_string_ex, add reasons for memory allocation errors.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agostrace.1.in: fix -A description
Eugene Syromyatnikov [Wed, 16 May 2018 22:56:03 +0000 (00:56 +0200)]
strace.1.in: fix -A description

* strace.1.in (.SS Output format) <-A>: Add missing .B.

6 years agostrace.1.in: document x32 64-bit syscall peculiarity
Eugene Syromyatnikov [Wed, 16 May 2018 18:19:50 +0000 (20:19 +0200)]
strace.1.in: document x32 64-bit syscall peculiarity

* strace.1.in (.SH NOTES): Document "#64" suffix for 64-bit syscalls on
x32.

6 years agolinux/x32/syscallent.h: change 64-bit syscall designation
Eugene Syromyatnikov [Wed, 16 May 2018 02:28:15 +0000 (04:28 +0200)]
linux/x32/syscallent.h: change 64-bit syscall designation

The current way of designation of 64-bit specific syscalls in x32
personality not only conflicts with fault injection specification
syntax, but also makes it impossible to specify such syscalls at all
(since everything that starts from a digit is considered a syscall
number specification).  So, let's change prefix to suffix and use
octothorpe instead of colon as a separator.

* linux/x32/syscallent.h (13, 15, 16, 19, 20, 45, 46, 47, 54, 55, 59,
101, 127, 128. 129, 131, 134, 156, 174, 177, 178, 180, 205, 206, 209,
211, 214, 215, 222, 236, 244, 246, 247, 273, 274, 278, 279, 295, 296,
297, 299, 307, 310, 311, 32, 327, 328): Change "64:" prefix to "#64"
suffix in syscall name.

Closes: https://github.com/strace/strace/issues/36
6 years agoxlat: add BPF_PROG_TYPE_SK_MSG
Eugene Syromyatnikov [Tue, 15 May 2018 12:32:11 +0000 (14:32 +0200)]
xlat: add BPF_PROG_TYPE_SK_MSG

* xlat/bpf_prog_types.in (BPF_PROG_TYPE_SK_MSG): New constant,
introduced by Linux commit v4.17-rc1~148^2~156^2~1^2~13.
* tests/bpf.c (BPF_PROG_LOAD_checks): Update expected output.

6 years agoxlat: update bpf_attach_type constants
Eugene Syromyatnikov [Tue, 15 May 2018 12:04:11 +0000 (14:04 +0200)]
xlat: update bpf_attach_type constants

* xlat/bpf_attach_type.in (BPF_SK_MSG_VERDICT): New constant,
introduced by Linux commit v4.17-rc1~148^2~156^2~1^2~13.
(BPF_CGROUP_INET4_BIND, BPF_CGROUP_INET6_BIND): New constants,
introduced by Linux commit v4.17-rc1~148^2~19^2^2~6.
(BPF_CGROUP_INET4_CONNECT, BPF_CGROUP_INET6_CONNECT): New constants,
introduced by Linux commit v4.17-rc1~148^2~19^2^2~3.
(BPF_CGROUP_INET4_POST_BIND, BPF_CGROUP_INET6_POST_BIND): New constants,
introduced by Linux commit v4.17-rc1~148^2~19^2^2~1.
* tests/bpf.c (BPF_PROG_QUERY_checks): Update expected output.

6 years agoxlat/sock_rds_options.in: make it sorted
Eugene Syromyatnikov [Wed, 9 May 2018 12:04:43 +0000 (14:04 +0200)]
xlat/sock_rds_options.in: make it sorted

Define SO_TIMESTAMP twice, for PA-RISC and all the other architectures.

* xlat/sock_rds_options.in [!__hppa__] (SO_TIMESTAMP): Define to 29.
[__hppa__] (SO_TIMESTAMP): Define to 0x4012.
* net.c (print_sockopt_fd_level_name) <case SOL_RDS>: Use
printxval_search instead of printxval.

6 years agoUpdate ioctl entries from linux v4.17
Gleb Fotengauer-Malinovskiy [Wed, 16 May 2018 17:54:59 +0000 (20:54 +0300)]
Update ioctl entries from linux v4.17

* linux/32/ioctls_inc_align16.h: Update from linux v4.17-rc5
using ioctls_gen.sh.
* linux/32/ioctls_inc_align32.h: Likewise.
* linux/32/ioctls_inc_align64.h: Likewise.
* linux/64/ioctls_inc.h: Likewise.
* linux/x32/ioctls_inc0.h: Likewise.
* linux/i386/ioctls_arch0.h: Likewise.
* linux/x86_64/ioctls_arch0.h: Likewise.
* NEWS: Mention this.

6 years agomaint: update for linux 4.17-rc5
Gleb Fotengauer-Malinovskiy [Wed, 16 May 2018 17:15:54 +0000 (20:15 +0300)]
maint: update for linux 4.17-rc5

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

6 years agobpf: use indexed lookups where appropriate
Dmitry V. Levin [Wed, 16 May 2018 10:58:32 +0000 (10:58 +0000)]
bpf: use indexed lookups where appropriate

* xlat/bpf_attach_type.in: Add "#value_indexed" directive.
* xlat/bpf_class.in: Likewise.
* xlat/bpf_map_types.in: Likewise.
* xlat/bpf_map_update_elem_flags.in: Likewise.
* xlat/bpf_prog_types.in: Likewise.
* xlat/ebpf_class.in: Likewise.
* bpf_filter.c (print_bpf_filter_code): Use printxval_index
instead of printxval for decoding bpf_class and ebpf_class.
* print_fields.h (PRINT_FIELD_XVAL_INDEX): New macro.
* bpf.c: Use it instead of PRINT_FIELD_XVAL for decoding bpf_attach_type,
bpf_map_types, bpf_map_update_elem_flags, and bpf_prog_types.

6 years agobpf: use printxval_index lookup instead of printxval
Dmitry V. Levin [Tue, 15 May 2018 21:41:47 +0000 (21:41 +0000)]
bpf: use printxval_index lookup instead of printxval

* xlat/bpf_commands.in: Add "#value_indexed" directive.
* bpf.c (SYS_FUNC(bpf)): Use printxval_index instead of printxval.

6 years agotime: use indexed lookups
Dmitry V. Levin [Tue, 15 May 2018 21:41:47 +0000 (21:41 +0000)]
time: use indexed lookups

* defs.h (xlat_idx): New prototype.
* xlat.c (xlat_idx): Remove static qualifier.
* time.c (do_adjtimex): Use xlat_idx instead of xlookup.
(SYS_FUNC(getitimer), SYS_FUNC(setitimer)): Use printxval_index
instead of printxval.
[ALPHA] (SYS_FUNC(osf_getitimer), SYS_FUNC(osf_setitimer)): Likewise.
(printclockname) [CLOCKID_TO_FD]: Likewise.
* xlat/adjtimex_state.in: Add "#value_indexed" directive.
* xlat/clocknames.in: Likewise.
* xlat/cpuclocknames.in: Add "#value_indexed" directive, add default
values to constants.
* xlat/itimer_which.in: Likewise.

6 years agolinux/arm/raw_syscall.h: avoid r7 specified register variables with Thumb
Andre McCurdy [Tue, 15 May 2018 22:34:39 +0000 (15:34 -0700)]
linux/arm/raw_syscall.h: avoid r7 specified register variables with Thumb

If Thumb code is being generated and frame pointers are enabled, the
Thumb frame pointer in r7 clashes with any local variable which may
need to be assigned to r7 (e.g. the syscall NR when making a raw
syscall).

With gcc, the double use of r7 results in a build error, e.g.

  strace-4.22/tests/inject-nf.c:86:1: error: r7 cannot be used in asm here

With clang, the double use of r7 can result in the compiler silently
generating broken code which crashes at run time due to frame pointer
corruption:

  https://bugs.llvm.org/show_bug.cgi?id=34165

In most cases the problem isn't visible as frame pointers will be
disabled automatically due to optimisation level. However to handle
cases where frame pointers are enabled (e.g. when CFLAGS etc are set
to support a debug build, etc) provide a version of raw_syscall_0
which manually saves and restores the frame pointer value in r7
to a temporary register before setting up the syscall NR in r7
and invoking the syscall.

* linux/arm/raw_syscall.h (raw_syscall_0) [__thumb__]: Provide
an alternative version.

Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
6 years agosockaddr: use printxval_index lookup instead of printxval
Dmitry V. Levin [Tue, 15 May 2018 21:41:47 +0000 (21:41 +0000)]
sockaddr: use printxval_index lookup instead of printxval

* xlat/addrfams.in: Add "#value_indexed" directive.
* xlat/af_packet_types.in: Likewise.
* xlat/hci_channels.in: Likewise.
* sockaddr.c (print_sockaddr_data_bt, print_sockaddr,
* print_sockaddr_data_ll): Use printxval_index instead of printxval.

6 years agosockaddr: use printxval_search for ARPHRD_* constants
Eugene Syromyatnikov [Mon, 7 May 2018 06:32:45 +0000 (08:32 +0200)]
sockaddr: use printxval_search for ARPHRD_* constants

This xlat table is quite big.

* sockaddr.c (print_sockaddr_data_ll): Replace printxval call with
printxval_search for printing of struct sockaddr_ll.sll_hatype field.

6 years agoAdd a common MAC address printing routine
Eugene Syromyatnikov [Sun, 6 May 2018 22:04:18 +0000 (00:04 +0200)]
Add a common MAC address printing routine

* print_mac.c: New file.
* Makefile.am (strace_SOURCES): Add it.
* defs.h (sprint_mac_addr): New declaration.
(print_mac_addr): New function, a thin wrapper around sprint_mac_addr.
* print_fields.h (PRINT_FIELD_MAC, PRINT_FIELD_MAC_SZ): New macros.
* rtnl_link.c (decode_ifla_bridge_id): Use PRINT_FIELD_MAC for bridge
address printing.
* sock.c (print_ifreq) <case SIOCGIFHWADDR>: Use print_mac_addr for
ifr_hwaddr printing.
* sockaddr.c (print_sockaddr_data_bt): Use print_mac_addr for
{sco,rc,l2}_bdaddr field printing.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agosockaddr: decode Bluetooth L2 CID values
Eugene Syromyatnikov [Sun, 6 May 2018 19:24:32 +0000 (21:24 +0200)]
sockaddr: decode Bluetooth L2 CID values

* xlat/bluetooth_l2_cid.in: New file.
* sockaddr.c: Include xlat/bluetooth_l2_cid.h.
(print_bluetooth_l2_cid): New function.
(print_sockaddr_data_bt): Use it to decode struct sockaddr_l2.l2_cid
field.
* tests/net-sockaddr.c (check_l2): Update expected output.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agosockaddr: decode Bluetooth L2 PSM values
Eugene Syromyatnikov [Sun, 6 May 2018 19:07:31 +0000 (21:07 +0200)]
sockaddr: decode Bluetooth L2 PSM values

* xlat/bluetooth_l2_psm.in: New file.
* sockaddr.c: Include xlat/bluetooth_l2_psm.h.
(print_bluetooth_l2_psm): New function.
(print_sockaddr_data_bt): Use it to decode struct sockaddr_l2.l2_psm
field.
* tests/net-sockaddr.c (check_l2): Update expected output.

6 years agosockaddr: decode bluetooth address type names
Eugene Syromyatnikov [Sun, 6 May 2018 18:28:09 +0000 (20:28 +0200)]
sockaddr: decode bluetooth address type names

* xlat/bdaddr_types.in: New file.
* sockaddr.c: Include xlat/bdaddr_types.h.
(print_sockaddr_data_bt): Decode struct sockaddr_l2.l2_bdaddr_type field
using constants from bdaddr_types xlat.
* tests/net-sockaddr.c (check_l2): Check decoding
of struct sockaddr_l2.l2_bdaddr_type field.

6 years agosockaddr: decode Bluetooth socket address unconditionally
Eugene Syromyatnikov [Sun, 6 May 2018 17:53:56 +0000 (19:53 +0200)]
sockaddr: decode Bluetooth socket address unconditionally

* sockaddr.c [HAVE_BLUETOOTH_BLUETOOTH_H]: Do not include
bluetooth/bluetooth.h, bluetooth/hci.h, bluetooth/l2cap.h,
bluetooth/rfcomm.h, and bluetooth/sco.h.
[!HAVE_BLUETOOTH_BLUETOOTH_H]: Include xlat/hci_channels.h.
(btohs): New function.
(print_sockaddr_data_bt): Define unconditionally, add definitions
of struct sockaddr_hci, struct bdaddr, struct sockaddr_sco,
struct sockaddr_rc, and struct sockaddr_l2.
(sa_printers) <AF_BLUETOOTH>: Define unconditionally.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoAvoid using print_array as a local variable name
Eugene Syromyatnikov [Mon, 7 May 2018 06:26:29 +0000 (08:26 +0200)]
Avoid using print_array as a local variable name

We have a function with the same name.

* netlink.c (decode_netlink) <print_array>: Rename to is_array, all
users updated.
* nlattr.c (decode_nlattr) <print_array>: Likewise.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoxlat: update MSG_* constants
Eugene Syromyatnikov [Fri, 27 Apr 2018 18:04:22 +0000 (20:04 +0200)]
xlat: update MSG_* constants

Sync them with kernel's include/linux/socket.h, since syscalls perform
almost no checks for incorrect flags.

* xlat/msg_flags.in (MSG_OOB, MSG_PEEK, MSG_DONTROUTE, MSG_CTRUNC,
MSG_PROBE, MSG_TRUNC, MSG_DONTWAIT, MSG_EOR, MSG_WAITALL, MSG_FIN,
MSG_SYN, MSG_CONFIRM, MSG_RST, MSG_ERRQUEUE, MSG_NOSIGNAL, MSG_MORE,
MSG_WAITFORONE, MSG_FASTOPEN, MSG_CMSG_CLOEXEC): Add default values
to all constants.
(MSG_SENDPAGE_NOTLAST, MSG_NO_SHARED_FRAGS): New constants.  It is
an internal one, but, apparently, nothing prohibits passing it
to the kernel.
(MSG_CMSG_COMPAT): New constant.  Override the value provided
by system headers.
(MSG_EOF): Commented out, as it is a synonym for MSG_FIN.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agosocketutils: use exact match of unix domain sockets on fresh kernels
Dmitry V. Levin [Mon, 14 May 2018 22:54:33 +0000 (22:54 +0000)]
socketutils: use exact match of unix domain sockets on fresh kernels

* socketutils.c (unix_send_query): Do not add NLM_F_DUMP to nlmsg_flags
when kernel version is 4.4.4 or later, initialize udiag_cookie
unconditionally.

Complements: v4.12~536 ("Change unix_diag requests back to use full dump instead of exact match")

6 years agosocketutils: do not request NDIAG_SHOW_MEMINFO
Eugene Syromyatnikov [Mon, 14 May 2018 17:20:21 +0000 (19:20 +0200)]
socketutils: do not request NDIAG_SHOW_MEMINFO

This information is not used and it looks like it negatively affects
ability to find the socket under high load.

* socketutils.c (netlink_send_query) <req>: Remove NDIAG_SHOW_MEMINFO
flag from netlink_diag_req.ndiag_show field.
* tests/netlink_netlink_diag.c (send_query) <req>: Likewise.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agotests: introduce midtail_alloc and use it in netlink tests
Eugene Syromyatnikov [Tue, 8 May 2018 05:10:16 +0000 (07:10 +0200)]
tests: introduce midtail_alloc and use it in netlink tests

netlink tests happen to access memory located before the tail_malloc'ed
pointers, a practice that doesn't go well with the latest compilers
because tail_malloc is marked with ATTRIBUTE_MALLOC.
For example, glibc in -D_FORTIFY_SOURCE=2 mode and gcc 8 with
-Warray-bounds enabled complain about negative offsets out of bounds.
Fix this issue by introducing midtail_alloc.

* tests/tests.h (midtail_alloc): New macro.
* tests/netlink_crypto.c: Use it instead of tail_malloc for nlh0 allocation.
* tests/netlink_netfilter.c: Likewise.
* tests/netlink_protocol.c: Likewise.
* tests/netlink_route.c: Likewise.
* tests/netlink_selinux.c: Likewise.
* tests/netlink_sock_diag.c: Likewise.
* tests/nlattr_br_port_msg.c: Likewise.
* tests/nlattr_crypto_user_alg.c: Likewise.
* tests/nlattr_dcbmsg.c: Likewise.
* tests/nlattr_fib_rule_hdr.c: Likewise.
* tests/nlattr_ifaddrlblmsg.c: Likewise.
* tests/nlattr_ifaddrmsg.c: Likewise.
* tests/nlattr_ifinfomsg.c: Likewise.
* tests/nlattr_ifla_brport.c: Likewise.
* tests/nlattr_ifla_port.c: Likewise.
* tests/nlattr_ifla_xdp.c: Likewise.
* tests/nlattr_inet_diag_msg.c: Likewise.
* tests/nlattr_inet_diag_req_compat.c: Likewise.
* tests/nlattr_inet_diag_req_v2.c: Likewise.
* tests/nlattr_mdba_mdb_entry.c: Likewise.
* tests/nlattr_mdba_router_port.c: Likewise.
* tests/nlattr_ndmsg.c: Likewise.
* tests/nlattr_ndtmsg.c: Likewise.
* tests/nlattr_netconfmsg.c: Likewise.
* tests/nlattr_netlink_diag_msg.c: Likewise.
* tests/nlattr_nlmsgerr.c: Likewise.
* tests/nlattr_packet_diag_msg.c: Likewise.
* tests/nlattr_rtgenmsg.c: Likewise.
* tests/nlattr_rtmsg.c: Likewise.
* tests/nlattr_smc_diag_msg.c: Likewise.
* tests/nlattr_tc_stats.c: Likewise.
* tests/nlattr_tca_stab.c: Likewise.
* tests/nlattr_tcamsg.c: Likewise.
* tests/nlattr_tcmsg.c: Likewise.
* tests/nlattr_unix_diag_msg.c: Likewise.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoUse MIN where appropriate
Eugene Syromyatnikov [Mon, 7 May 2018 06:15:19 +0000 (08:15 +0200)]
Use MIN where appropriate

* netlink.c (decode_nlmsghdr_with_payload): Use MIN.
* netlink_packet_diag.c (print_packet_diag_mclist): Likewise.
* nlattr.c (decode_nlattr_with_data): Likewise.
* rtnl_route.c (decode_rta_multipath): Likewise.

6 years agoxlat: add fallback definitions to {msg,sem,shm}ctl command constants
Eugene Syromyatnikov [Sun, 15 Apr 2018 23:12:08 +0000 (01:12 +0200)]
xlat: add fallback definitions to {msg,sem,shm}ctl command constants

* xlat/msgctl_flags.in: Add default values to all constants, reorder
to make them sorted by value.
* xlat/semctl_flags.in: Likewise.
* xlat/shmctl_flags.in: Likewise.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoxlat: add MSG_STAT_ANY
Eugene Syromyatnikov [Sun, 15 Apr 2018 21:49:42 +0000 (23:49 +0200)]
xlat: add MSG_STAT_ANY

* xlat/msgctl_flags.in (MSG_STAT_ANY): New constant, introduced
by Linux commit v4.17-rc1~52^2~21.
* tests/ipc_msg.c: Check it.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoxlat: add SEM_STAT_ANY
Eugene Syromyatnikov [Sun, 15 Apr 2018 21:56:47 +0000 (23:56 +0200)]
xlat: add SEM_STAT_ANY

* xlat/semctl_flags.in (SEM_STAT_ANY): New constant, introduced
by Linux commit v4.17-rc1~52^2~22.
* tests/ipc_sem.c: Check it.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoxlat: add SHM_STAT_ANY
Eugene Syromyatnikov [Sun, 15 Apr 2018 22:59:56 +0000 (00:59 +0200)]
xlat: add SHM_STAT_ANY

* xlat/shmctl_flags.in (SHM_STAT_ANY): New constant, introduced
by Linux commit v4.17-rc1~52^2~23.
* tests/ipc_shm.c: Check it.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agonet: print SO_GET_FILTER in getsockopt
Eugene Syromyatnikov [Wed, 9 May 2018 12:44:28 +0000 (12:44 +0000)]
net: print SO_GET_FILTER in getsockopt

SO_ATTACH_FILTER and SO_GET_FILTER have the same value; the former
constant is intended for use in setsockopt, and the latter is for
getsockopt.  Handle that the same way as similar SOL_IP/SOL_IPV6 socket
options are handled.

* xlat/getsock_options.in: New file.
* xlat/setsock_options.in: Likewise.
* xlat/sockoptions.in (SO_ATTACH_FILTER): Move to
xlat/setsock_options.in.
* net.c: Include "xlat/setsock_options.h" and "xlat/getsock_options.h".
(print_sockopt_fd_level_name) <case SOL_SOCKET>: Use
getsock_options or setsock_options as auxiliary xlats based on the value
of is_getsockopt flag.
* tests/sock_filter-v.c: Update expected output.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agotests: add sock_filtrer-v variants with different xlat verbosity levels
Eugene Syromyatnikov [Wed, 9 May 2018 12:44:28 +0000 (12:44 +0000)]
tests: add sock_filtrer-v variants with different xlat verbosity levels

* tests/sock_filter-v-Xabbrev.c: New file.
* tests/sock_filter-v-Xraw.c: Likewise.
* tests/sock_filter-v-Xverbose.c: Likewise.
* tests/sock_filter-v.c (PRINT_STMT_SYM, PRINT_STMT_SYM_,
PRINT_STMT_VAL, PRINT_STMT_VAL_, PRINT_JUMP_): Remove.
(HEX_FMT, XLAT_FMT, XLAT_ARGS, PRINT_STMT): New macros.
(PRINT_JUMP): Rewrite.
(print_filter): Rewrite using PRINT_STMT and new PRINT_JUMP.
(main): Print SOL_SOCKET, SO_ATTACH_FILTER, and SO_ATTACH_REUSEPORT_CBPF
using XLAT_FMT/XLAT_ARGS macros.
* tests/pure_executables.list: Add sock_filter-v-Xabbrev,
sock_filter-v-Xraw, and sock_filter-v-Xverbose.
* tests/.gitignore: Likewise.
* tests/gen_tests.in (sock_filter-v-Xabbrev, sock_filter-v-Xraw,
sock_filter-v-Xverbose): New tests.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agodefs.h: fix ethernet_protocols comment
Eugene Syromyatnikov [Mon, 7 May 2018 05:28:54 +0000 (07:28 +0200)]
defs.h: fix ethernet_protocols comment

Starting with commit v4.22~109, sorted xlat tables are terminated
with XLAT_END.

* defs.h (ethernet_protocols): Remove the "unterminated" part from
description.

6 years agoxlat: rename *sock*options xlat tables
Dmitry V. Levin [Tue, 8 May 2018 20:59:20 +0000 (20:59 +0000)]
xlat: rename *sock*options xlat tables

Such names as sockrxrpcoptions are incomprehensible.

* xlat/getsockipoptions.in: Rename to xlat/getsock_ip_options.in.
* xlat/getsockipv6options.in: Rename to xlat/getsock_ipv6_options.in.
* xlat/setsockipoptions.in: Rename to xlat/setsock_ip_options.in.
* xlat/setsockipv6options.in: Rename to xlat/setsock_ipv6_options.in.
* xlat/sockalgoptions.in: Rename to xlat/sock_alg_options.in.
* xlat/sockbluetoothoptions.in: Rename to xlat/sock_bluetooth_options.in.
* xlat/sockcaifoptions.in: Rename to xlat/sock_caif_options.in.
* xlat/sockdccpoptions.in: Rename to xlat/sock_dccp_options.in.
* xlat/sockipoptions.in: Rename to xlat/sock_ip_options.in.
* xlat/sockipv6options.in: Rename to xlat/sock_ipv6_options.in.
* xlat/sockipxoptions.in: Rename to xlat/sock_ipx_options.in.
* xlat/sockirdaoptions.in: Rename to xlat/sock_irda_options.in.
* xlat/sockiucvoptions.in: Rename to xlat/sock_iucv_options.in.
* xlat/sockkcmoptions.in: Rename to xlat/sock_kcm_options.in.
* xlat/sockllcoptions.in: Rename to xlat/sock_llc_options.in.
* xlat/socknetlinkoptions.in: Rename to xlat/sock_netlink_options.in.
* xlat/socknfcllcpoptions.in: Rename to xlat/sock_nfcllcp_options.in.
* xlat/sockoptions.in: Rename to xlat/sock_options.in.
* xlat/sockpacketoptions.in: Rename to xlat/sock_packet_options.in.
* xlat/sockpnpoptions.in: Rename to xlat/sock_pnp_options.in.
* xlat/sockpppol2tpoptions.in: Rename to xlat/sock_pppol2tp_options.in.
* xlat/sockrawoptions.in: Rename to xlat/sock_raw_options.in.
* xlat/sockrdsoptions.in: Rename to xlat/sock_rds_options.in.
* xlat/sockrxrpcoptions.in: Rename to xlat/sock_rxrpc_options.in.
* xlat/socksctpoptions.in: Rename to xlat/sock_sctp_options.in.
* xlat/socktcpoptions.in: Rename to xlat/sock_tcp_options.in.
* xlat/socktipcoptions.in: Rename to xlat/sock_tipc_options.in.
* xlat/socktlsoptions.in: Rename to xlat/sock_tls_options.in.
* xlat/sockudpoptions.in: Rename to xlat/sock_udp_options.in.
* net.c: Update.