]> granicus.if.org Git - strace/log
strace
7 years agotests: check decoding of nlattr_inet_diag_req_compat attributes
JingPiao Chen [Wed, 5 Jul 2017 07:46:43 +0000 (15:46 +0800)]
tests: check decoding of nlattr_inet_diag_req_compat attributes

* tests/nlattr_inet_diag_req_compat.c: New file.
* tests/gen_tests.in (nlattr_inet_diag_req_compat): New entry.
* tests/pure_executables.list: Add nlattr_inet_diag_req_compat.
* tests/.gitignore: Likewise.

7 years agonetlink: decode AF_INET inet_diag_req_* attributes
JingPiao Chen [Wed, 24 May 2017 06:55:59 +0000 (14:55 +0800)]
netlink: decode AF_INET inet_diag_req_* attributes

* linux/inet_diag.h (inet_diag_bc_op, inet_diag_hostcond,
inet_diag_markcond): New structures.
(INET_DIAG_BC_*): New enum.
* netlink_sock_diag.c: Include "xlat/inet_diag_bytecodes.h".
(decode_inet_addr, decode_inet_diag_hostcond,
print_inet_diag_bc_op, decode_inet_diag_markcond,
decode_bytecode_data, decode_inet_diag_bc_op): New functions.
(inet_diag_req_nla_decoders): New array.
(decode_inet_diag_req_compat, decode_inet_diag_req_v2): Use it.
* xlat/inet_diag_bytecodes.in: New file.

7 years agoIntroduce PRINT_FIELD_CSTRING
Dmitry V. Levin [Tue, 11 Jul 2017 00:20:54 +0000 (00:20 +0000)]
Introduce PRINT_FIELD_CSTRING

* print_fields.h (PRINT_FIELD_CSTRING): New macro.
* block.c (print_blkpg_req, block_ioctl): Use PRINT_FIELD_CSTRING
instead of print_quoted_string.
* btrfs.c (btrfs_ioctl): Likewise.
* dm.c (dm_decode_device, dm_decode_dm_target_spec): Likewise.
* loop.c (decode_loop_info, decode_loop_info64): Likewise.
* v4l2.c (print_v4l2_capability, print_v4l2_fmtdesc,
print_v4l2_standard, print_v4l2_input, print_v4l2_tuner,
print_v4l2_queryctrl): Likewise.
* netlink_sock_diag.c (decode_smc_diag_lgrinfo): Use PRINT_FIELD_CSTRING
instead of PRINT_FIELD_STRING.
* uname.c (PRINT_UTS_MEMBER): Remove.
(SYS_FUNC(uname)): Use PRINT_FIELD_CSTRING instead of PRINT_UTS_MEMBER.

7 years agoRename PRINT_FIELD_QUOTED_STRING to PRINT_FIELD_STRING
Dmitry V. Levin [Tue, 11 Jul 2017 00:20:54 +0000 (00:20 +0000)]
Rename PRINT_FIELD_QUOTED_STRING to PRINT_FIELD_STRING

As string fields are always qouted when printed, choose a shorter name
for the helper macro.

* print_fields.h (PRINT_FIELD_QUOTED_STRING): Rename
to PRINT_FIELD_STRING.  All callers updated.

7 years agoUpdate RWF_* constants
Dmitry V. Levin [Mon, 10 Jul 2017 15:27:51 +0000 (15:27 +0000)]
Update RWF_* constants

* xlat/rwf_flags.in: Add RWF_NOWAIT introduced by linux kernel
commit v4.12-rc5-150-gb745fafa.

7 years agoIntorduce PRINT_FIELD_0X
Dmitry V. Levin [Mon, 10 Jul 2017 02:23:00 +0000 (02:23 +0000)]
Intorduce PRINT_FIELD_0X

* print_fields.h (PRINT_FIELD_0X): New macro.
* sockaddr.c (print_sockaddr_data_ipx, print_sockaddr_data_nl): Use it
instead of manual tprintf statements.
* netlink_sock_diag.c (PRINT_FIELD_SMC_DIAG_CONNINFO_FLAGS): Remove.
(decode_smc_diag_conninfo): Replace it with PRINT_FIELD_0X.

7 years agoprint_inet_addr: use inet_addr-based output format for IPv4
Dmitry V. Levin [Mon, 10 Jul 2017 01:45:18 +0000 (01:45 +0000)]
print_inet_addr: use inet_addr-based output format for IPv4

* sockaddr.c (print_inet_addr): Remove af_name variable.
<AF_INET>: Use inet_addr-based output format.
* tests/netlink_sock_diag.c (test_inet_diag_sockid, test_inet_diag_req,
test_inet_diag_req_v2, test_inet_diag_msg, test_smc_diag_req,
test_smc_diag_msg): Update expected output.
* tests/nlattr_inet_diag_msg.c (print_inet_diag_msg): Likewise.
* tests/nlattr_smc_diag_msg.c (print_smc_diag_msg): Likewise.

7 years agotests: check decoding of netlink smc_diag_msg attributes
JingPiao Chen [Mon, 26 Jun 2017 00:32:08 +0000 (08:32 +0800)]
tests: check decoding of netlink smc_diag_msg attributes

* tests/nlattr_smc_diag_msg.c: New file.
* tests/gen_tests.in (nlattr_smc_diag_msg): New entry.
* tests/pure_executables.list: Add nlattr_smc_diag_msg.
* tests/.gitignore: Likewise.

7 years agonetlink: decode AF_SMC smc_diag_msg attributes
JingPiao Chen [Sun, 21 May 2017 11:49:43 +0000 (19:49 +0800)]
netlink: decode AF_SMC smc_diag_msg attributes

* linux/smc_diag.h (smc_diag_cursor, smc_diag_conninfo
smc_diag_linkinfo, smc_diag_lgrinfo): New structures.
* netlink_sock_diag.c: Include "xlat/smc_link_group_roles.h".
(decode_smc_diag_conninfo, decode_smc_diag_lgrinfo): New functions.
(smc_diag_msg_nla_decoders): New array.
(decode_smc_diag_msg): Use it.
* xlat/smc_link_group_roles.in: New file.

7 years agopathtrace.c: introduce user-provided sets of paths
Nikolay Marchuk [Sat, 8 Jul 2017 08:28:56 +0000 (15:28 +0700)]
pathtrace.c: introduce user-provided sets of paths

* defs.h (struct path_set): New structure.
(global_path_set): New variable prototype.
(tracing_paths): Change macro body to use global_path_set variable.
(pathtrace_select_set): Add "struct path_set *" argument.
(pathtrace_match_set): Likewise.  Change return type to bool.
(pathtrace_select, pathtrace_match): Change into thin macro wrappers
around pathtrace_select_set and pathtrace_match_set, repsectively.
* pathtrace.c (global_path_set): New variable.
(storepath, pathtrace_select_set): Add "struct path_set *" argument.
(pathmatch, upathmatch, fdmatch, pathtrace_match_set): Likewise.
Change return type to bool.

7 years agotests: check decoding of MCAST_JOIN_GROUP/MCAST_LEAVE_GROUP
Dmitry V. Levin [Sun, 9 Jul 2017 18:43:34 +0000 (18:43 +0000)]
tests: check decoding of MCAST_JOIN_GROUP/MCAST_LEAVE_GROUP

* tests/group_req.c: New file.
* tests/gen_tests.in (group_req): New entry.
* tests/pure_executables.list: Add group_req.
* tests/.gitignore: Likewise.

7 years agoMpersify struct group_req
Dmitry V. Levin [Sun, 9 Jul 2017 18:43:34 +0000 (18:43 +0000)]
Mpersify struct group_req

The size of struct group_req depends on alignment of long and therefore
has to be mpersified.

* print_group_req.c: New file.
* Makefile.am (strace_SOURCES): Add it.
* net.c (print_group_req): Move to print_group_req.c, wrap into
MPERS_PRINTER_DECL.

7 years agonet: enhance decoding of MCAST_JOIN_GROUP/MCAST_LEAVE_GROUP
Dmitry V. Levin [Sun, 9 Jul 2017 18:43:34 +0000 (18:43 +0000)]
net: enhance decoding of MCAST_JOIN_GROUP/MCAST_LEAVE_GROUP

* net.c (print_group_req): Allow option length greater than
sizeof(struct group_req) to match the kernel behaviour.
When the option length is invalid, print the address.
* NEWS: Mention this.

7 years agonet: hook up MCAST_JOIN_GROUP/MCAST_LEAVE_GROUP decoding for SOL_IPV6
Dmitry V. Levin [Sun, 9 Jul 2017 18:43:34 +0000 (18:43 +0000)]
net: hook up MCAST_JOIN_GROUP/MCAST_LEAVE_GROUP decoding for SOL_IPV6

As multicast socket options are shared between IPv4 and IPv6,
they should be decoded both for SOL_IP and SOL_IPV6.

* net.c (print_setsockopt) <SOL_IPV6> [MCAST_JOIN_GROUP]: Handle
MCAST_JOIN_GROUP and MCAST_LEAVE_GROUP.

7 years agoxlat: add MCAST_* to sockipv6options
Dmitry V. Levin [Sun, 9 Jul 2017 18:43:34 +0000 (18:43 +0000)]
xlat: add MCAST_* to sockipv6options

Multicast socket options are shared between IPv4 and IPv6.

* xlat/sockipv6options.in: Add MCAST_JOIN_GROUP, MCAST_BLOCK_SOURCE,
MCAST_UNBLOCK_SOURCE, MCAST_LEAVE_GROUP, MCAST_JOIN_SOURCE_GROUP,
MCAST_LEAVE_SOURCE_GROUP, and MCAST_MSFILTER.

7 years agonet: enhance decoding of IP_ADD_MEMBERSHIP et al socket options
Dmitry V. Levin [Sun, 9 Jul 2017 18:43:34 +0000 (18:43 +0000)]
net: enhance decoding of IP_ADD_MEMBERSHIP et al socket options

* net.c (print_mreq, print_mreq6): Treat negative option length
as invalid to match the kernel behaviour.  When the option length
is invalid, print the address.
* NEWS: Mention it.
* tests/ip_mreq.c (main): Check it.  Update expected output.

7 years agonet: enhance decoding of setsockopt's SO_LINGER negative option length
Dmitry V. Levin [Sun, 9 Jul 2017 18:43:34 +0000 (18:43 +0000)]
net: enhance decoding of setsockopt's SO_LINGER negative option length

* net.c (print_set_linger): Treat negative option length as invalid
to match the kernel behaviour.
* tests/so_linger.c (main): Check it.

7 years agomsghdr: use PRINT_FIELD_* macros
Dmitry V. Levin [Sun, 9 Jul 2017 16:04:24 +0000 (16:04 +0000)]
msghdr: use PRINT_FIELD_* macros

* msghdr.c (print_scm_creds): Use PRINT_FIELD_U and PRINT_FIELD_UID.
(print_cmsg_ip_recverr): Use PRINT_FIELD_U.
(print_struct_msghdr): Use PRINT_FIELD_U and PRINT_FIELD_FLAGS.

7 years agoIntorduce PRINT_FIELD_SOCKADDR
Dmitry V. Levin [Sun, 9 Jul 2017 16:04:24 +0000 (16:04 +0000)]
Intorduce PRINT_FIELD_SOCKADDR

* print_fields.h (PRINT_FIELD_SOCKADDR): New macro.
* msghdr.c (print_cmsg_ip_recverr): Use it instead of print_sockaddr.
* net.c (print_group_req): Likewise.
* sock.c (PRINT_IFREQ_ADDR): Remove.
(print_ifreq, print_ifconf_ifreq): Use PRINT_FIELD_SOCKADDR
instead of PRINT_IFREQ_ADDR.

7 years agoprint_sockaddr: remove "struct tcb *" argument
Dmitry V. Levin [Sun, 9 Jul 2017 16:04:24 +0000 (16:04 +0000)]
print_sockaddr: remove "struct tcb *" argument

print_sockaddr does not use its first argument, remove it.

* defs.h (print_sockaddr): Remove argument.
* sockaddr.c (print_sockaddr): Remove argument.  All callers updated.
* sock.c (PRINT_IFREQ_ADDR): Likewise.

7 years agonet: use PRINT_FIELD_* macros
Dmitry V. Levin [Sun, 9 Jul 2017 13:54:01 +0000 (13:54 +0000)]
net: use PRINT_FIELD_* macros

* net.c (print_tpacket_stats, print_tpacket_req): Use PRINT_FIELD_U.
(print_group_req): Use PRINT_FIELD_IFINDEX.
(print_packet_mreq): Use PRINT_FIELD_IFINDEX, PRINT_FIELD_U,
and PRINT_FIELD_XVAL.

7 years agonetlink_sock_diag: introduce PRINT_FIELD_INET_DIAG_SOCKID
Dmitry V. Levin [Sun, 9 Jul 2017 13:54:01 +0000 (13:54 +0000)]
netlink_sock_diag: introduce PRINT_FIELD_INET_DIAG_SOCKID

* netlink_sock_diag.c (PRINT_FIELD_INET_DIAG_SOCKID): New macro.
(decode_inet_diag_req_compat, decode_inet_diag_req_v2,
decode_inet_diag_msg, decode_smc_diag_req, decode_smc_diag_msg): Use it
instead of print_inet_diag_sockid.

7 years agoIntorduce PRINT_FIELD_DEV
Dmitry V. Levin [Sun, 9 Jul 2017 13:54:01 +0000 (13:54 +0000)]
Intorduce PRINT_FIELD_DEV

* print_fields.h (PRINT_FIELD_DEV): New macro.
* dm.c (dm_decode_device, dm_decode_dm_name_list): Use it
instead of print_dev_t.
* loop.c (decode_loop_info, decode_loop_info64): Likewise.
* netlink_sock_diag.c (decode_unix_diag_vfs): Likewise.

7 years agoIntorduce PRINT_FIELD_INET4_ADDR
Dmitry V. Levin [Sun, 9 Jul 2017 13:54:01 +0000 (13:54 +0000)]
Intorduce PRINT_FIELD_INET4_ADDR

* print_fields.h (PRINT_FIELD_INET4_ADDR): New macro.
* msghdr.c (print_cmsg_ip_pktinfo): Use it instead of manual
tprintf statements.
* net.c (print_mreq): Likewise.
* sockaddr.c (print_sockaddr_data_in): Likewise.

7 years agoIntorduce PRINT_FIELD_NET_PORT
Dmitry V. Levin [Sun, 9 Jul 2017 13:54:01 +0000 (13:54 +0000)]
Intorduce PRINT_FIELD_NET_PORT

* print_fields.h (PRINT_FIELD_NET_PORT): New macro.
* netlink_sock_diag.c (print_inet_diag_sockid): Use it
instead of a manual tprintf statement.
* sockaddr.c (print_sockaddr_data_in, print_sockaddr_data_in6,
print_sockaddr_data_ipx): Likewise.

7 years agoIntorduce PRINT_FIELD_IFINDEX
Dmitry V. Levin [Sun, 9 Jul 2017 13:54:01 +0000 (13:54 +0000)]
Intorduce PRINT_FIELD_IFINDEX

* print_fields.h (PRINT_FIELD_IFINDEX): New macro.
* msghdr.c (print_cmsg_ip_pktinfo): Use it instead of print_ifindex.
* net.c (print_mreq6): Likewise.
* netlink_sock_diag.c (print_packet_diag_mclist,
print_inet_diag_sockid): Likewise.
* sockaddr.c (print_sockaddr_data_in6, print_sockaddr_data_ll):
Likewise.

7 years agoIntorduce PRINT_FIELD_INET_ADDR
Dmitry V. Levin [Sun, 9 Jul 2017 13:54:01 +0000 (13:54 +0000)]
Intorduce PRINT_FIELD_INET_ADDR

* print_fields.h (PRINT_FIELD_INET_ADDR): New macro.
* net.c (print_mreq6): Use it instead of print_inet_addr.
* netlink_sock_diag.c (print_inet_diag_sockid): Likewise.
* sockaddr.c (print_sockaddr_data_in6): Likewise.

7 years agonet: move print_ifindex to a separate file
Dmitry V. Levin [Sun, 9 Jul 2017 13:54:01 +0000 (13:54 +0000)]
net: move print_ifindex to a separate file

* print_ifindex.c: New file.
* Makefile.am (strace_SOURCES): Add it.
* net.c (print_ifindex): Move to print_ifindex.c.

7 years agonet: move parsers of bind, listen, and shutdown to separate files
Dmitry V. Levin [Sun, 9 Jul 2017 13:54:01 +0000 (13:54 +0000)]
net: move parsers of bind, listen, and shutdown to separate files

* bind.c: New file.
* listen.c: Likewise.
* shutdown.c: Likewise.
* Makefile.am (strace_SOURCES): Add them.
* net.c (SYS_FUNC(bind)): Move to bind.c.
(SYS_FUNC(listen)): Move to listen.c.
(SYS_FUNC(shutdown)): Move to shutdown.c.

7 years agotests: check decoding of packet_diag_msg attributes
JingPiao Chen [Mon, 26 Jun 2017 00:28:56 +0000 (08:28 +0800)]
tests: check decoding of packet_diag_msg attributes

* tests/netlink_sock_diag-v.sh: New file.
* tests/Makefile.am (EXTRA_DIST): Add it.
* tests/nlattr_packet_diag_msg.c: New file.
* tests/gen_tests.in (nlattr_packet_diag_msg): New entry.
* tests/pure_executables.list: Add nlattr_packet_diag_msg.
* tests/.gitignore: Likewise.

Co-authored-by: Dmitry V. Levin <ldv@altlinux.org>
7 years agonetlink: decode AF_PACKET packet_diag_msg attributes
JingPiao Chen [Sun, 21 May 2017 03:42:13 +0000 (11:42 +0800)]
netlink: decode AF_PACKET packet_diag_msg attributes

* linux/packet_diag.h (packet_diag_info, packet_diag_mclist,
packet_diag_ring): New structures.
(PDI_*): New macros.
* netlink_sock_diag.c: Include <linux/filter.h>
and "xlat/packet_diag_info_flags.h".
(decode_packet_diag_info, decode_packet_diag_mclist,
decode_packet_diag_ring, decode_packet_diag_filter): New functions.
(packet_diag_msg_nla_decoders): New array.
(decode_packet_diag_msg): Use it.
* print_fields.h (PRINT_FIELD_QUOTED_STRING): New macro.
* xlat/packet_diag_info_flags.in: New file.

Co-authored-by: Dmitry V. Levin <ldv@altlinux.org>
7 years agotests: fix TEST_NLATTR_OBJECT and TEST_NLATTR_ARRAY for large objects
JingPiao Chen [Wed, 5 Jul 2017 01:39:34 +0000 (09:39 +0800)]
tests: fix TEST_NLATTR_OBJECT and TEST_NLATTR_ARRAY for large objects

commit v4.17-161-gdbd0605 that adjusted TEST_NLATTR_OBJECT and
TEST_NLATTR_ARRAY for large objects, only changed the pattern
print length, large length still can be specified as nla_data_len,
resulting to output mismatch.

* tests/test_nlattr.h (TEST_NLATTR_OBJECT): Pass "plen"
both as nla_data_len and slen arguments of TEST_NLATTR_
in len < sizeof(object) case.
(TEST_NLATTR_ARRAY): Likewise, Pass "plen" both as nla_data_len
and slen arguments of TEST_NLATTR_ in len < sizeof(object[0]) case.

7 years agotests: introduce TEST_NLATTR_nla macro in test_nlattr.h
JingPiao Chen [Wed, 5 Jul 2017 13:25:13 +0000 (21:25 +0800)]
tests: introduce TEST_NLATTR_nla macro in test_nlattr.h

Explicitly make struct nlattr * pointer which is internal
to TEST_NLATTR_ macro available to its varadic arguments.

* tests/test_nlattr.h (TEST_NLATTR_): Rename nla to TEST_NLATTR_nla.

7 years agotests: check decoding of SO_PEERCRED socket option
Dmitry V. Levin [Sat, 8 Jul 2017 19:27:26 +0000 (19:27 +0000)]
tests: check decoding of SO_PEERCRED socket option

* tests/so_peercred.c: New file.
* tests/gen_tests.in (so_peercred): New entry.
* tests/pure_executables.list: Add so_peercred.
* tests/.gitignore: Likewise.

7 years agonet: accept arbitrary option length for getsockopt's SO_PEERCRED
Dmitry V. Levin [Sat, 8 Jul 2017 19:27:26 +0000 (19:27 +0000)]
net: accept arbitrary option length for getsockopt's SO_PEERCRED

* print_fields.h (PRINT_FIELD_UID): New macro.
* net.c (print_ucred): Rewrite to match the kernel behaviour.
* NEWS: Mention this.

7 years agotests: check decoding of socket filters
Dmitry V. Levin [Sat, 8 Jul 2017 14:57:44 +0000 (14:57 +0000)]
tests: check decoding of socket filters

* tests/sock_filter-v.c: New file.
* tests/gen_tests.in (sock_filter-v): New entry.
* tests/pure_executables.list: Add sock_filter-v.
* tests/.gitignore: Likewise.

7 years agoImplement decoding of linux socket filter programs
Dmitry V. Levin [Sat, 8 Jul 2017 14:57:44 +0000 (14:57 +0000)]
Implement decoding of linux socket filter programs

* bpf_sock_filter.c: New file.
* Makefile.am (strace_SOURCES): Add it.
* xlat/skf_ad.in: New file.
* defs.h (decode_sock_fprog, print_sock_fprog): New prototypes.
* fetch_bpf_fprog.c (get_bpf_fprog_size): New mpers printer.
* net.c (print_getsockopt): Use decode_sock_fprog to print
socket filter programs for SO_GET_FILTER socket option.
(print_setsockopt): Use decode_sock_fprog and get_bpf_fprog_size
to print socket filter programs for SO_ATTACH_FILTER
and SO_ATTACH_REUSEPORT_CBPF socket options.
* NEWS: Mention this.

7 years agotests: check decoding of SO_LINGER socket option
Dmitry V. Levin [Sat, 8 Jul 2017 14:57:44 +0000 (14:57 +0000)]
tests: check decoding of SO_LINGER socket option

* tests/so_linger.c: New file.
* tests/gen_tests.in (so_linger): New entry.
* tests/pure_executables.list: Add so_linger.
* tests/.gitignore: Likewise.

7 years agotests: fix print_quoted_hex output of bytes with high bit set
Dmitry V. Levin [Sat, 8 Jul 2017 14:57:44 +0000 (14:57 +0000)]
tests: fix print_quoted_hex output of bytes with high bit set

* tests/tests.h (print_quoted_memory, print_quoted_hex): Change the type
of first argument from "const char *" to "const void *".
* tests/print_quoted_string.c: Likewise.
(print_quoted_hex): Print bytes as unsigned char objects to avoid
unwanted sign extension.
* tests/netlink_protocol.c (send_query): Remove the cast of print_quoted_hex
first argument which is now redundant.

7 years agonet: accept arbitrary option length for getsockopt's SO_LINGER
Dmitry V. Levin [Sat, 8 Jul 2017 14:57:44 +0000 (14:57 +0000)]
net: accept arbitrary option length for getsockopt's SO_LINGER

* net.c (print_linger): Rename to print_set_linger.
(print_setsockopt): Replace print_linger with print_set_linger.
(print_get_linger): New function that accepts arbitrary option length
to match the kernel behaviour.
(print_getsockopt): Replace print_linger with print_get_linger.
* NEWS: Mention this.

7 years agonet: accept large option length for SO_LINGER
Dmitry V. Levin [Sat, 8 Jul 2017 14:57:44 +0000 (14:57 +0000)]
net: accept large option length for SO_LINGER

* net.c (print_linger): Allow len > sizeof(struct linger) to match
the kernel behaviour.

7 years agonet: fix printing of struct linger's field names
Dmitry V. Levin [Sat, 8 Jul 2017 14:57:44 +0000 (14:57 +0000)]
net: fix printing of struct linger's field names

* net.c: Include "print_fields.h".
(print_linger): Print fields of struct linger using PRINT_FIELD_D.

7 years agonet: enhance decoding of getsockopt's optlen argument
Dmitry V. Levin [Sat, 8 Jul 2017 14:57:44 +0000 (14:57 +0000)]
net: enhance decoding of getsockopt's optlen argument

As the last argument of getsockopt syscall has read-write semantics,
print both user and kernel values when they differ.

* net.c (SYS_FUNC(getsockopt)): On entering syscall, fetch and save
the length specified to the kernel.  On error, print the length saved
on entering.  When the saved length and the length returned by the
kernel differ, print both values.
* NEWS: Mention this.
* tests/net-icmp_filter.c (main): Update expected output.

7 years agonet: move printing of [gs]etsockopt's socklen argument to toplevel parsers
Dmitry V. Levin [Sat, 8 Jul 2017 14:57:44 +0000 (14:57 +0000)]
net: move printing of [gs]etsockopt's socklen argument to toplevel parsers

* net.c (print_getsockopt, print_setsockopt): Remove "done" label,
replace "goto done" statement with "return".
Move printing of "len" argument ...
(SYS_FUNC(getsockopt), SYS_FUNC(setsockopt)): ... here.

7 years agoGeneralize seccomp filter parser
Dmitry V. Levin [Sat, 8 Jul 2017 01:49:00 +0000 (01:49 +0000)]
Generalize seccomp filter parser

Linux socket filter uses almost the same classic BPF as seccomp filter,
The only difference noticeable from strace PoV is the meaning of generic
multiuse field.

Transform the parser of seccomp filters to a more generic parser
of classic BPF, parametrized with a method of parsing the generic
multiuse field in BPF_STMT.

* bpf_filter.c: New file.
* bpf_filter.h: Likewise.
* bpf_fprog.h: Likewise.
* bpf_seccomp_filter.c: Likewise.
* fetch_bpf_fprog.c: Likewise.
* fetch_seccomp_fprog.c: Remove.
* seccomp_fprog.h: Likewise.
* Makefile.am (strace_SOURCES): Add bpf_filter.c, bpf_filter.h,
bpf_fprog.h, bpf_seccomp_filter.c, and fetch_bpf_fprog.c.
Remove fetch_seccomp_fprog.c and seccomp_fprog.h.
* seccomp.c: Do not include linux/filter.h and xlat header files.
Do not define SECCOMP_RET_ACTION.
(bpf_filter, decode_bpf_code, decode_bpf_stmt, decode_bpf_jump,
print_bpf_filter, print_seccomp_fprog, print_seccomp_filter): Remove.
* defs.h (print_seccomp_filter): Rename to decode_seccomp_fprog.
(SYS_FUNC(seccomp)): Replace print_seccomp_filter
with decode_seccomp_fprog.
* prctl.c (SYS_FUNC(prctl)): Likewise.

7 years agoAssume that <linux/filter.h> is always available
Dmitry V. Levin [Sat, 8 Jul 2017 01:49:00 +0000 (01:49 +0000)]
Assume that <linux/filter.h> is always available

<linux/filter.h> was introduced in linux 2.1.75, way before
the minimal kernel version supported by strace.

* configure.ac (AC_CHECK_HEADERS): Remove linux/filter.h.
* seccomp.c: Assume HAVE_LINUX_FILTER_H.
* tests/prctl-seccomp-filter-v.c: Likewise.
* tests/seccomp-filter-v.c: Likewise.
* tests/seccomp-filter.c: Likewise.

7 years agoxlat: add BPF_END to BPF_ALU opcode list
Dmitry V. Levin [Fri, 7 Jul 2017 16:43:41 +0000 (16:43 +0000)]
xlat: add BPF_END to BPF_ALU opcode list

BPF_END is one of three eBPF-only opcodes for BPF_ALU class.
Other two (BPF_MOV and BPF_ARSH) has been added earlier.

* xlat/bpf_op_alu.in: Add BPF_END.

7 years agonetlink_sock_diag: print unrecognized data in hex
JingPiao Chen [Fri, 7 Jul 2017 01:52:06 +0000 (09:52 +0800)]
netlink_sock_diag: print unrecognized data in hex

* netlink_sock_diag.c (decode_family): Replace printstrn with
printstr_ex and set QUOTE_FORCE_HEX flag.
* tests/netlink_sock_diag.c (test_odd_family_req,
test_odd_family_msg): Update expected output.

7 years agonetlink: print unrecognized nlattr in hex
JingPiao Chen [Fri, 7 Jul 2017 01:47:17 +0000 (09:47 +0800)]
netlink: print unrecognized nlattr in hex

* nlattr.c (fetch_nlattr): Replace printstrn
with printstr_ex and set QUOTE_FORCE_HEX flag.
* tests/nlattr.c (test_nlattr): Update expected output.

7 years agonetlink: print unrecognized netlink messages in hex
JingPiao Chen [Fri, 7 Jul 2017 01:44:09 +0000 (09:44 +0800)]
netlink: print unrecognized netlink messages in hex

* netlink.c (fetch_nlmsghdr): Replace printstrn
with printstr_ex and set QUOTE_FORCE_HEX flag.
* tests/netlink_protocol.c (send_query): Update expected output.

7 years agonetlink: print unrecognized netlink payload in hex
JingPiao Chen [Fri, 7 Jul 2017 01:34:59 +0000 (09:34 +0800)]
netlink: print unrecognized netlink payload in hex

* netlink.c (decode_payload): Replace printstrn
with printstr_ex and set QUOTE_FORCE_HEX flag.
* tests/netlink_protocol.c (send_query, test_nlmsgerr,
test_nlmsg_done): Update expected output.
* tests/netlink_generic.c (test_nlmsg_type): Likewise.

7 years agonetlink: print unrecognized nlmsgerr in hex
JingPiao Chen [Fri, 7 Jul 2017 01:10:17 +0000 (09:10 +0800)]
netlink: print unrecognized nlmsgerr in hex

* netlink.c (decode_nlmsgerr): Replace printstrn
with printstr_ex and set QUOTE_FORCE_HEX flag.
* tests/netlink_protocol.c (test_nlmsgerr): Update expected output.

7 years agonetlink: print unrecognized attribute data in hex
JingPiao Chen [Tue, 4 Jul 2017 06:21:18 +0000 (14:21 +0800)]
netlink: print unrecognized attribute data in hex

* nlattr.c (decode_nlattr_with_data): Replace printstrn
with printstr_ex and set QUOTE_FORCE_HEX flag.
* tests/tests.h (print_quoted_hex): New prototype.
* tests/print_quoted_string.c (print_quoted_hex): New function.
* tests/test_nlattr.h (TEST_NLATTR_OBJECT, TEST_NLATTR_ARRAY): Use it
for updated expected output.  Change the type of "plen" variable
to unsigned int.
* tests/nlattr.c (test_nlattr): Update expected output.

7 years agotests: print quotation marks in print_quoted_memory
JingPiao Chen [Tue, 4 Jul 2017 06:46:21 +0000 (14:46 +0800)]
tests: print quotation marks in print_quoted_memory

* tests/print_quoted_string.c (print_quoted_memory): Print opening
and closing quotation marks.
* tests/getcwd.c (main): Do not print quotation marks around
print_quoted_string.
* tests/uname.c (main): Likewise.
* tests/keyctl.c (print_quoted_string_limit): Do not print quotation
marks around print_quoted_memory.
* tests/netlink_protocol.c (send_query): Likewise.
* tests/xattr.c (main): Likewise.

7 years agostrace.1: remove misleading remark that -i option is weakly supported
Dmitry V. Levin [Thu, 6 Jul 2017 12:52:54 +0000 (12:52 +0000)]
strace.1: remove misleading remark that -i option is weakly supported

Given that -i functionality is covered by pc.test, the remark that
it is weakly supported is wrong.

* strace.1 (BUGS): Remove the remark about weakly supported -i option.

7 years agoPost-release administrivia
Dmitry V. Levin [Thu, 6 Jul 2017 12:50:55 +0000 (12:50 +0000)]
Post-release administrivia

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

7 years agoPrepare for 4.18 release v4.18
Dmitry V. Levin [Wed, 5 Jul 2017 07:08:09 +0000 (07:08 +0000)]
Prepare for 4.18 release

* NEWS: Update for 4.18 release.

7 years agotests: robustify create_nl_socket based tests against the race condition
Dmitry V. Levin [Tue, 4 Jul 2017 22:31:08 +0000 (22:31 +0000)]
tests: robustify create_nl_socket based tests against the race condition

There is a race condition between the moment a netlink socket is created
and the moment it is reported via SOCK_DIAG_BY_FAMILY interface.
Add one more operation on the socket created by create_nl_socket
to increase chances of winning the race.

* tests/create_nl_socket.c (create_nl_socket_ext): Add a getsockopt call
with the created socket.

7 years agoUpdate NEWS
Dmitry V. Levin [Tue, 4 Jul 2017 17:52:54 +0000 (17:52 +0000)]
Update NEWS

7 years agonios2: fix wrong access to "SP" register in user_pt_regs
Romain Naour [Tue, 4 Jul 2017 16:37:18 +0000 (18:37 +0200)]
nios2: fix wrong access to "SP" register in user_pt_regs

Starting with linux commit v4.0-rc4~21^2, "SP" register
is available via regs[PTR_SP] member of struct user_pt_regs.

* linux/nios2/arch_regs.h (nios2_sp_ptr): Change type
to "unsigned int *".
* linux/nios2/arch_regs.c (nios2_sp_ptr): Likewise.
Replace .sp with .regs[PTR_SP].

Fixes: http://autobuild.buildroot.net/results/b9f/b9fc25b82f3280872fe1593ac252a8529ba83576
Fixes: v4.16-34-g6117728a ("nios2: export nios2_sp_ptr")
Signed-off-by: Romain Naour <romain.naour@smile.fr>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
7 years agotests: add multi-process check to qual_fault.test
Eugene Syromyatnikov [Mon, 3 Jul 2017 19:29:28 +0000 (21:29 +0200)]
tests: add multi-process check to qual_fault.test

Check that syscall counters used for tampering are per-tcb.

* tests/qual_fault.c: Include <fcntl.h> for open(),
<sys/param.h> for PATH_MAX, and <sys/wait.h> for wait().
(expfd): Rename to exp_fd, remove const qualifier and initialization.
(gotfd): Rename to got_fd, remove const qualifier and initialization.
(out_fd): New variable, for the expected strace output.
(open_file): New helper function.
(main): Remove st, add num_procs, proc, exp_prefix, got_prefix,
out_prefix, pid_prefix.  Remove stat asserts, update argc assert.
Add num_procs, exp_prefix, got_prefix, out_prefix, pid_prefix
initialization.  Add per-process loop, open expfd, gotfd, out_fd, pidfd
in each one, print process's pid to pidfd, print exit message to out_fd.
Add wait() call for each forked process.
* tests/qual_fault.test (N): increase to 100 in order to check
concurrent process execution.
(check_fault_injection): Take additional argument for the process
count, pass it to qual_fault, add filename variables for expected strace
output and pid file, pass them to qual_fault.
Specify -ff parameter to strace invocation.
Compare write and strace output for the each process.
Update all check_fault_injection invocation with process count argument,
add an invocation with 4 concurrent processes.
* tests/init.sh (TIMEOUT_DURATION): Raise from 120 to 300.

Co-authored-by: Dmitry V. Levin <ldv@altlinux.org>
7 years agotests: adjust TEST_NLATTR_OBJECT and TEST_NLATTR_ARRAY for large objects
Dmitry V. Levin [Mon, 3 Jul 2017 15:14:54 +0000 (15:14 +0000)]
tests: adjust TEST_NLATTR_OBJECT and TEST_NLATTR_ARRAY for large objects

* tests/test_nlattr.h (TEST_NLATTR_OBJECT, TEST_NLATTR_ARRAY): Add
support for objects larger than DEFAULT_STRLEN.
* tests/nlattr_inet_diag_msg.c (main): Change pattern size
from DEFAULT_STRLEN to 4096.
* tests/nlattr_netlink_diag_msg.c: Likewise.
* tests/nlattr_unix_diag_msg.c: Likewise.

Reported-by: JingPiao Chen <chenjingpiao@gmail.com>
7 years agotests: move DEFAULT_STRLEN macro to tests.h
Dmitry V. Levin [Mon, 3 Jul 2017 15:14:54 +0000 (15:14 +0000)]
tests: move DEFAULT_STRLEN macro to tests.h

* tests/tests.h [!DEFAULT_STRLEN] (DEFAULT_STRLEN): New macro.
* tests/mincore.c (DEFAULT_STRLEN): Remove.
* tests/mmsg_name.c: Likewise.
* tests/msg_control.c: Likewise.
* tests/netlink_protocol.c: Likewise.
* tests/nlattr.c: Likewise.
* tests/nlattr_inet_diag_msg.c: Likewise.
* tests/nlattr_netlink_diag_msg.c: Likewise.
* tests/nlattr_unix_diag_msg.c: Likewise.
* tests/printstr.c: Likewise.
* tests/xattr.c: Likewise.
* tests/execve.c: Likewise.
(main): Initialize str_a and str_b arrays at run time.
* tests/execveat.c: Likewise.

Suggested-by: JingPiao Chen <chenjingpiao@gmail.com>
7 years agotests: use unified diff in order to improve test log readability
Eugene Syromyatnikov [Sun, 2 Jul 2017 18:03:09 +0000 (21:03 +0300)]
tests: use unified diff in order to improve test log readability

* tests/init.sh (match_diff): Add -u option to the diff invocation.

7 years agoFix error diagnostics in case of zero argc
Dmitry V. Levin [Sun, 2 Jul 2017 10:01:22 +0000 (10:01 +0000)]
Fix error diagnostics in case of zero argc

* strace.c (init): Adjust argc along with argv,
check that adjusted argc is sane.
* tests/zeroargc.c: New file.
* tests/.gitignore: Add zeroargc.
* tests/Makefile.am (check_PROGRAMS): Likewise.
* tests/options-syntax.test: Check strace error diagnostics
in case of zero argc.

7 years agoUse program_invocation_name instead of a local progname variable
Dmitry V. Levin [Sun, 2 Jul 2017 00:31:50 +0000 (00:31 +0000)]
Use program_invocation_name instead of a local progname variable

Emulate program_invocation_name only if it is not provided by libc.

* configure.ac: Check for program_invocation_name variable.
* strace.c (progname): Remove.
[!HAVE_PROGRAM_INVOCATION_NAME] (program_invocation_name): New variable.
(verror_msg, error_msg_and_help): Use it instead of progname.
(init): Initialize program_invocation_name instead of progname.

7 years agoIntroduce generic STRINGIFY and STRINGIFY_VAL macros
Dmitry V. Levin [Sun, 2 Jul 2017 00:11:31 +0000 (00:11 +0000)]
Introduce generic STRINGIFY and STRINGIFY_VAL macros

* macros.h (STRINGIFY, STRINGIFY_VAL): New macros.
* mpers_type.h: Include "macros.h".
[IN_MPERS] (STRINGIFY): Remove.
* tests/sockname.c (TEST_SYSCALL_STR__, TEST_SYSCALL_STR_): Remove.
(TEST_SYSCALL_STR): Use STRINGIFY_VAL.

Co-authored-by: Victor Krapivensky <krapivenskiy.va@phystech.edu>
7 years agoIntroduce macros.h
Dmitry V. Levin [Sun, 2 Jul 2017 00:11:31 +0000 (00:11 +0000)]
Introduce macros.h

Introduce a separate header file for generic macros shared between
strace and its tests.  Start this unification with ARRAY_SIZE macro.

* defs.h: Include "macros.h".
(ARRAY_SIZE): Move ...
* macros.h: ... to new file.
* Makefile.am (strace_SOURCES): Add it.
* tests/tests.h: Include "macros.h".
(ARRAY_SIZE): Remove.  All callers updated.

7 years agoquota: use PRINT_FIELD_FLAGS
Dmitry V. Levin [Sat, 1 Jul 2017 20:08:39 +0000 (20:08 +0000)]
quota: use PRINT_FIELD_FLAGS

* quota.c (struct xfs_dqblk): Change d_flags field's type from int8_t
to uint8_t.
(decode_cmd_data): Use PRINT_FIELD_FLAGS.

7 years agoUnify different generic PRINT_FIELD_* implementations
Dmitry V. Levin [Sat, 1 Jul 2017 13:14:49 +0000 (13:14 +0000)]
Unify different generic PRINT_FIELD_* implementations

Create a new header print_fields.h and move generic PRINT_FIELD_*
macros there.

* print_fields.h: New file.
* Makefile.am (strace_SOURCES): Add it.
* netlink_sock_diag.c: Include "print_fields.h".
(PRINT_FIELD_U, PRINT_FIELD_X, PRINT_FIELD_COOKIE, PRINT_FIELD_FLAGS,
PRINT_FIELD_XVAL): Move to print_fields.h file.
* quota.c: Include "print_fields.h".
(PRINT_FIELD_D): Move to print_fields.h file.
(PRINT_FIELD_U, PRINT_FIELD_X): Remove.
* statx.c: Include "print_fields.h".
(PRINT_FIELD_U): Remove.
(SYS_FUNC(statx)): Update PRINT_FIELD_U callers.
* tests/quotactl.h: Include "print_fields.h".
* tests/quotactl-xfs.c: Update callers of PRINT_FIELD_* macros.
* tests/quotactl.c: Likewise.
(PRINT_FIELD_D, PRINT_FIELD_U, PRINT_FIELD_X): Remove.
* tests/test_nlattr.h: Include "print_fields.h".
(PRINT_FIELD_U, PRINT_FIELD_X): Remove.
* tests/xstatx.c: Include "print_fields.h".
(PRINT_FIELD_U): Remove.
(print_stat): Update PRINT_FIELD_U callers.
* tests/tests.h [!STRACE_PRINTF] (STRACE_PRINTF): Define to printf.

7 years agoarc: fix wrong access to "sp" member in user_regs_struct
Eugeniy Paltsev [Fri, 30 Jun 2017 13:14:14 +0000 (16:14 +0300)]
arc: fix wrong access to "sp" member in user_regs_struct

"sp" register is a member of "scratch" structure (which is nested
in user_regs_struct)

* linux/arc/arch_regs.c: Replace .sp with .scratch.sp .

Fixes: v4.16-31-g134042a5 ("arc: export arc_sp_ptr")
Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
7 years agoaarch64, tile: replace struct ucontext with ucontext_t
Khem Raj [Wed, 28 Jun 2017 18:43:07 +0000 (11:43 -0700)]
aarch64, tile: replace struct ucontext with ucontext_t

glibc >= 2.26 has dropped the tag struct ucontext from ucontext_t type.

* linux/arm/arch_sigreturn.c (arch_sigreturn) [AARCH64]: Replace
struct ucontext with ucontext_t.
* linux/tile/arch_sigreturn.c (arch_sigreturn): Likewise.

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
7 years agotests: enhance nlattr_unix_diag_msg test
Dmitry V. Levin [Sat, 1 Jul 2017 00:05:39 +0000 (00:05 +0000)]
tests: enhance nlattr_unix_diag_msg test

* tests/nlattr_unix_diag_msg.c: Include "test_nlattr.h".
(test_unix_diag_vfs, test_unix_diag_icons, test_unix_diag_rqlen):
Remove.
(init_unix_diag_msg): Add const qualifier to arguments and variables.
(print_unix_diag_msg, print_uint): New functions.
(main): Use them and macros from test_nlattr.h file.

7 years agotests: check decoding of netlink unix_diag_msg attributes
JingPiao Chen [Wed, 28 Jun 2017 01:40:07 +0000 (09:40 +0800)]
tests: check decoding of netlink unix_diag_msg attributes

* tests/nlattr_unix_diag_msg.c: New file.
* tests/gen_tests.in (nlattr_unix_diag_msg): New entry.
* tests/pure_executables.list: Add nlattr_unix_diag_msg.
* tests/.gitignore: Likewise.

7 years agonetlink_sock_diag: ensure that structure field names are printed properly
Dmitry V. Levin [Sat, 1 Jul 2017 00:01:01 +0000 (00:01 +0000)]
netlink_sock_diag: ensure that structure field names are printed properly

* netlink_sock_diag.c (decode_unix_diag_vfs, decode_unix_diag_rqlen):
Use PRINT_FIELD_U to print structure fields.

7 years agonetlink_sock_diag: add const qualifiers
Dmitry V. Levin [Sat, 1 Jul 2017 00:01:01 +0000 (00:01 +0000)]
netlink_sock_diag: add const qualifiers

Add const qualifiers to auto variables and function arguments.
This change does not affect the code generated by the compiler,
the purpose of these "const" qualifiers is to highlight the intent.

* netlink_sock_diag.c (decode_unix_diag_vfs, decode_unix_diag_inode,
decode_unix_diag_rqlen): Add const qualifier to tcp, addr, and len
arguments.

7 years agonetlink: decode AF_UNIX unix_diag_msg attributes
JingPiao Chen [Wed, 28 Jun 2017 01:40:06 +0000 (09:40 +0800)]
netlink: decode AF_UNIX unix_diag_msg attributes

* netlink_sock_diag.c (unix_diag_msg_nla_decoders): New array.
(decode_unix_diag_msg): Use it.
* linux/unix_diag.h (unix_diag_vfs, unix_diag_rqlen): New structures.

7 years agotests: enhance nlattr_netlink_diag_msg test
Dmitry V. Levin [Fri, 30 Jun 2017 21:38:49 +0000 (21:38 +0000)]
tests: enhance nlattr_netlink_diag_msg test

* tests/nlattr_netlink_diag_msg.c: Include "test_nlattr.h".
(test_netlink_diag_groups, test_netlink_diag_rx_ring,
test_netlink_diag_flags): Remove.
(init_netlink_diag_msg): Add const qualifier to arguments and variables.
(print_netlink_diag_msg, print_xlong): New functions.
(main): Use them and macros from test_nlattr.h file.

7 years agotests: check decoding of netlink_diag_msg attributes
JingPiao Chen [Wed, 28 Jun 2017 01:40:05 +0000 (09:40 +0800)]
tests: check decoding of netlink_diag_msg attributes

* tests/nlattr_netlink_diag_msg.c: New file.
* tests/gen_tests.in (nlattr_netlink_diag_msg): New entry.
* tests/pure_executables.list: Add nlattr_netlink_diag_msg.
* tests/.gitignore: Likewise.

7 years agonetlink_sock_diag: ensure that structure field names are printed properly
Dmitry V. Levin [Fri, 30 Jun 2017 21:38:49 +0000 (21:38 +0000)]
netlink_sock_diag: ensure that structure field names are printed properly

* netlink_sock_diag.c (decode_netlink_diag_ring): Use PRINT_FIELD_U
to print structure fields.

7 years agonetlink_sock_diag: add const qualifiers
Dmitry V. Levin [Fri, 30 Jun 2017 21:38:49 +0000 (21:38 +0000)]
netlink_sock_diag: add const qualifiers

Add const qualifiers to auto variables and function arguments.
This change does not affect the code generated by the compiler,
the purpose of these "const" qualifiers is to highlight the intent.

* netlink_sock_diag.c (print_group, decode_netlink_diag_groups,
decode_netlink_diag_ring, decode_netlink_diag_flags): Add const
qualifier to tcp, addr, and len arguments.

7 years agonetlink: decode AF_NETLINK netlink_diag_msg attributes
JingPiao Chen [Wed, 28 Jun 2017 01:40:04 +0000 (09:40 +0800)]
netlink: decode AF_NETLINK netlink_diag_msg attributes

* linux/netlink_diag.h (netlink_diag_ring): New structure.
(NDIAG_FLAG_*): New macros.
* netlink_sock_diag.c: Include "xlat/netlink_socket_flags.h".
(print_group, decode_netlink_diag_groups, decode_netlink_diag_ring,
decode_netlink_diag_flags): New functions.
(netlink_diag_msg_nla_decoders): New array.
(decode_netlink_diag_msg): Use it.
* xlat/netlink_socket_flags.in: New file.

7 years agonetlink_sock_diag: print inet_diag_sockid.idiag_if as an interface index
Dmitry V. Levin [Fri, 30 Jun 2017 21:38:49 +0000 (21:38 +0000)]
netlink_sock_diag: print inet_diag_sockid.idiag_if as an interface index

* netlink_sock_diag.c (print_inet_diag_sockid): Print idiag_if field
using print_ifindex.
* tests/nlattr_inet_diag_msg.c: Include <net/if.h>.
(IFINDEX_LO): New macro.
(init_inet_diag_msg): Set inet_diag_sockid.idiag_if field.
(print_inet_diag_msg): Update expected output.

7 years agotests: check decoding of several standard netlink attributes
Dmitry V. Levin [Fri, 30 Jun 2017 21:38:49 +0000 (21:38 +0000)]
tests: check decoding of several standard netlink attributes

* tests/nlattr_inet_diag_msg.c (main): Check decoding of uint32_t,
uint8_t, and zero-terminated string attributes.

Co-authored-by: JingPiao Chen <chenjingpiao@gmail.com>
7 years agotests: enhance nlattr_inet_diag_msg test
Dmitry V. Levin [Fri, 30 Jun 2017 21:38:49 +0000 (21:38 +0000)]
tests: enhance nlattr_inet_diag_msg test

* tests/test_nlattr.h: New file.
* tests/Makefile.am (libtests_a_SOURCES): Add it.
* tests/nlattr_inet_diag_msg.c: Include "test_nlattr.h".
(test_inet_diag_meminfo, test_inet_diag_vegasinfo,
test_inet_diag_dctcpinfo, test_inet_diag_bbrinfo): Remove.
(address): New variable.
(init_inet_diag_msg): Remove "address" argument, add const qualifier
to all remaining arguments.
(print_inet_diag_msg, print_uint): New functions.
(main): Use macros from test_nlattr.h file.

7 years agotests: check decoding of netlink inet_diag_msg attributes
JingPiao Chen [Wed, 28 Jun 2017 01:40:02 +0000 (09:40 +0800)]
tests: check decoding of netlink inet_diag_msg attributes

* tests/nlattr_inet_diag_msg.c: New file.
* tests/gen_tests.in (nlattr_inet_diag_msg): New entry.
* tests/pure_executables.list: Add nlattr_inet_diag_msg.
* tests/.gitignore: Likewise.

7 years agonetlink_sock_diag: ensure that structure field names are printed properly
Dmitry V. Levin [Thu, 29 Jun 2017 09:22:52 +0000 (09:22 +0000)]
netlink_sock_diag: ensure that structure field names are printed properly

* netlink_sock_diag.c (PRINT_FIELD_X): New macro.
(decode_inet_diag_meminfo, decode_tcpvegas_info, decode_tcp_dctcp_info,
decode_tcp_bbr_info): Use it and PRINT_FIELD_U to print structure
fields.

7 years agonetlink_sock_diag: add const qualifiers
Dmitry V. Levin [Wed, 28 Jun 2017 01:40:01 +0000 (01:40 +0000)]
netlink_sock_diag: add const qualifiers

Add const qualifiers to auto variables and function arguments.
This change does not affect the code generated by the compiler,
the purpose of these "const" qualifiers is to highlight the intent.

* netlink_sock_diag.c (print_meminfo, decode_meminfo,
decode_inet_diag_meminfo, decode_tcpvegas_info, decode_tcp_dctcp_info,
decode_tcp_bbr_info): Add const qualifier to tcp, addr, and len
arguments.

7 years agonetlink: decode AF_INET inet_diag_msg attributes
JingPiao Chen [Wed, 28 Jun 2017 01:40:01 +0000 (09:40 +0800)]
netlink: decode AF_INET inet_diag_msg attributes

* linux/inet_diag.h (inet_diag_meminfo, tcpvegas_info,
tcp_dctcp_info, tcp_bbr_info): New structures.
* linux/sock_diag.h (SK_MEMINFO_VARS): New macro.
* netlink_sock_diag.c: Include  <linux/sock_diag.h>.
(print_meminfo, decode_meminfo, decode_inet_diag_meminfo,
decode_tcpvegas_info, decode_tcp_dctcp_info, decode_tcp_bbr_info):
New functions.
(inet_diag_msg_nla_decoders): New array.
(decode_inet_diag_msg): Use it.

7 years agonlattr: add const qualifiers to auto variables and function arguments
Dmitry V. Levin [Wed, 28 Jun 2017 01:40:00 +0000 (01:40 +0000)]
nlattr: add const qualifiers to auto variables and function arguments

This change does not affect the code generated by the compiler,
the purpose of these "const" qualifiers is to highlight the intent.

* nlattr.c (decode_nlattr_with_data, decode_nla_str, decode_nla_strn,
decode_nla_##name): Add const qualifier to tcp, addr, and len arguments.

7 years agonetlink: introduce nla_decoder_t to parse netlink attributes data
JingPiao Chen [Wed, 28 Jun 2017 01:40:00 +0000 (09:40 +0800)]
netlink: introduce nla_decoder_t to parse netlink attributes data

* nlattr.h (nla_decoder_t): New typedef.
(DECL_NLA): New macro.
(decode_nlattr): Add decoders, size and opaque_data argument.
* nlattr.c: (decode_nlattr_with_data): Likewise.
(decode_nla_*): New functions.
* netlink_sock_diag.c (decode_inet_diag_req_compat)
(decode_inet_diag_req_v2, decode_inet_diag_msg)
(decode_netlink_diag_msg, (decode_packet_diag_msg)
(decode_smc_diag_msg, decode_unix_diag_msg): Add decoders,
size and opaque_data arguments. All callers updated.

Co-authored-by: Fabien Siron <fabien.siron@epita.fr>
7 years agonetlink: add a basic netlink attribute parser of AF_SMC diag
JingPiao Chen [Tue, 27 Jun 2017 10:10:06 +0000 (18:10 +0800)]
netlink: add a basic netlink attribute parser of AF_SMC diag

* netlink_sock_diag.c: Include "xlat/smc_diag_attrs.h".
(decode_smc_diag_msg): Use decode_nlattr.
* xlat/smc_diag_attrs.in: New file.

7 years agonetlink: add a basic netlink attribute parser of AF_INET diag
JingPiao Chen [Tue, 27 Jun 2017 10:10:05 +0000 (18:10 +0800)]
netlink: add a basic netlink attribute parser of AF_INET diag

* linux/inet_diag.h (INET_DIAG_REQ_*): New enum.
* netlink_sock_diag.c: Include "xlat/inet_diag_attrs.h"
and "xlat/inet_diag_req_attrs.h".
(decode_inet_diag_req_compat, decode_inet_diag_req_v2,
 decode_inet_diag_msg): Use decode_nlattr.
* xlat/inet_diag_attrs.in: New file.
* xlat/inet_diag_req_attrs.in: Likewise.

Co-authored-by: Fabien Siron <fabien.siron@epita.fr>
7 years agonetlink: add a basic netlink attribute parser of AF_PACKET diag
JingPiao Chen [Tue, 27 Jun 2017 10:10:04 +0000 (18:10 +0800)]
netlink: add a basic netlink attribute parser of AF_PACKET diag

* linux/packet_diag.h (PACKET_DIAG_*): New enum.
* netlink_sock_diag.c: Include "xlat/packet_diag_attrs.h".
(decode_packet_diag_msg): Use decode_nlattr.
* xlat/packet_diag_attrs.in: New file.

Co-authored-by: Fabien Siron <fabien.siron@epita.fr>
7 years agonetlink: add a basic netlink attribute parser of AF_NETLINK diag
JingPiao Chen [Tue, 27 Jun 2017 10:10:03 +0000 (18:10 +0800)]
netlink: add a basic netlink attribute parser of AF_NETLINK diag

* linux/netlink_diag.h (NETLINK_DIAG_*): New enum.
* netlink_sock_diag.c: Include "xlat/netlink_diag_attrs.h".
(decode_netlink_diag_msg): Use decode_nlattr.
* xlat/netlink_diag_attrs.in: New file.

Co-authored-by: Fabien Siron <fabien.siron@epita.fr>
7 years agonetlink_sock_diag: ensure that structure field names are printed properly
Dmitry V. Levin [Tue, 27 Jun 2017 23:07:37 +0000 (23:07 +0000)]
netlink_sock_diag: ensure that structure field names are printed properly

* netlink_sock_diag.c (PRINT_FIELD_U, PRINT_FIELD_COOKIE,
PRINT_FIELD_FLAGS, PRINT_FIELD_XVAL): New macros.
(decode_unix_diag_req, decode_unix_diag_msg, decode_netlink_diag_req,
decode_netlink_diag_msg, decode_packet_diag_req, decode_packet_diag_msg,
print_inet_diag_sockid, decode_inet_diag_req_compat,
decode_inet_diag_req_v2, decode_inet_diag_msg, decode_smc_diag_req,
decode_smc_diag_msg): Use them to print structure fields.

7 years agoUpdate ioctl entries from linux v4.12-rc7
Gleb Fotengauer-Malinovskiy [Wed, 28 Jun 2017 17:49:00 +0000 (20:49 +0300)]
Update ioctl entries from linux v4.12-rc7

* linux/32/ioctls_inc_align16.h: Update from linux v4.12-rc7
(with f7a320ff commit applied on top) 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.
* NEWS: Mention this.

7 years agomaint: fix ioctls_sym.sh premature termination
Gleb Fotengauer-Malinovskiy [Wed, 28 Jun 2017 17:39:54 +0000 (20:39 +0300)]
maint: fix ioctls_sym.sh premature termination

When the list of headers do not fit into the command line, xargs splits
it into several lists and then passes them to grep.  If no headers from
a list match the grep pattern, grep exits with a non-zero status that
causes xargs to exit with a non-zero status, too.

* maint/ioctls_sym.sh: Use "find -exec +" instead of xargs,
ignore its exit status.

7 years agotests: introduce NLMSG_ATTR macro
JingPiao Chen [Tue, 27 Jun 2017 08:18:23 +0000 (16:18 +0800)]
tests: introduce NLMSG_ATTR macro

* tests/tests.h (NLMSG_ATTR): New macro.
* tests/nlattr.c (test_nlattr, test_nla_type): Use it.

7 years agonetlink: pass NLMSG_DONE messages to family specific payload decoders
JingPiao Chen [Tue, 27 Jun 2017 08:16:56 +0000 (16:16 +0800)]
netlink: pass NLMSG_DONE messages to family specific payload decoders

While many NLMSG_DONE messages indeed have payload containing
just one integer, there are exceptions. Handle this by passing
payloads of NLMSG_DONE messages to family specific netlink
payload decoders.

* netlink.c (print_nlmsghdr): Do not skip family detection
for nlmsg_type == NLMSG_DONE.
(decode_nlmsg_type): Skip family specific type decoders
for type == NLMSG_DONE.
(decode_nlmsg_flags): Skip family specific decoding of flags
for type == NLMSG_DONE.
(decode_netlink_sock_diag): Skip for nlmsg_type == NLMSG_DONE.