2018-06-14  Dmitry V. Levin  <ldv@altlinux.org>

	Prepare for 4.23 release.
	* NEWS: Update for 4.23 release.

	Update copyright headers.
	Headers updated automatically using maint/update_copyright_years.sh
	script.

	tests: add missing copyright headers.
	* tests/prctl-spec-inject.test: Add copyright header.
	* tests/qualify_personality.sh: Likewise.

	maint: document release procedure.
	* maint/README-release: New file.
	* maint/gen-release-notes.sh: Likewise.
	* maint/gen-release-github.sh: Likewise.
	* maint/gen-release-gitlab.sh: Likewise.

	maint: prepend contributor names in tag messages with an asterisk.
	* maint/gen-tag-message.sh: Prepend every line of
	gen-contributors-list.sh output with an asterisk.

2018-06-14  Eugene Syromyatnikov  <evgsyr@gmail.com>

	Update NEWS.

2018-06-13  Dmitry V. Levin  <ldv@altlinux.org>

	Wire up rseq syscall.
	This new syscall was introduced by Linux commit v4.17-1308-gd7822b1.

	* linux/dummy.h (sys_rseq): New macro.
	* linux/arm/syscallent.h (398): Add rseq entry.
	* linux/i386/syscallent.h (386): Likewise.
	* linux/powerpc/syscallent.h (387): Likewise.
	* linux/powerpc64/syscallent.h (387): Likewise.
	* linux/x32/syscallent.h (334): Likewise.
	* linux/x86_64/syscallent.h (334): Likewise.

2018-06-13  Eugene Syromyatnikov  <evgsyr@gmail.com>

	tests: check decoding of io_pgetevents syscall.
	* configure.ac (AC_CHECK_TYPES): Check for struct __aio_sigset
	in <linux/aio_abi.h>.
	* tests/aio_pgetevents.c: New file.
	* tests/.gitignore: Add aio_pgetevents.
	* tests/pure_executables.list: Likewise.
	* tests/gen_tests.in (aio_pgetevents): New test.

	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>

2018-06-13  Eugene Syromyatnikov  <evgsyr@gmail.com>

	Implement io_pgetevents syscall decoding.
	Introduced by Linux commit v4.17-rc3-7-g7a074e9.

	* print_aio_sigset.c: New file.
	* Makefile.am (strace_SOURCES): Add it.
	* aio.c (print_io_getevents): Rename from SYS_FUNC(io_getevents), add
	has_usig flag, print user sigset on exiting if has_usig is set to true.
	(SYS_FUNC(io_getevents), SYS_FUNC(io_pgetevents)): New functions,
	wrappers for print_io_getevents.
	* linux/32/syscallent.h ([292]): Wire up io_pgetevents.
	* linux/64/syscallent.h ([292]): Likewise.
	* linux/i386/syscallent.h ([385]): Likewise.
	* linux/x32/syscallent.h ([333]): Likewise.
	* linux/x86_64/syscallent.h ([333]): Likewise.
	* NEWS: Mention this improvement.

	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>

2018-06-13  Dmitry V. Levin  <ldv@altlinux.org>

	travis: re-enable testing with the latest mainline kernel headers.
	As <linux/signal.h> is out of the game now, the Linux commit
	v4.17-rc3-7-g7a074e9 should not cause harm anymore, so let's enable
	testing with the latest mainline kernel headers again.

	* .travis.yml (matrix): Do not specify KBRANCH for KHEADERS=torvalds/linux.

2018-06-13  Dmitry V. Levin  <ldv@altlinux.org>

	Workaround incompatibility between <linux/signal.h> and libc headers.
	Override <linux/signal.h> with <signal.h> so that those few linux
	headers that include <linux/signal.h> could be included along with libc
	headers.

	* linux/linux/signal.h: New file.
	* Makefile.am (strace_SOURCES): Add it.

2018-06-13  Eugene Syromyatnikov  <evgsyr@gmail.com>

	tests: add personality specification syntax checks.
	* tests/options-syntax.test: Add personality specification syntax
	checks.

	tests: add basic checks for personality designation support.
	* tests/qualify_personality.sh: New file.
	* tests/qualify_personality_empty.in: Likewise.
	* tests/trace_personality_32.in: Likewise.
	* tests/trace_personality_64.in: Likewise.
	* tests/trace_personality_regex_32.in: Likewise.
	* tests/trace_personality_regex_64.in: Likewise.
	* tests/trace_personality_regex_x32.in: Likewise.
	* tests/trace_personality_x32.in: Likewise.
	* tests/Makefile.am (EXTRA_DIST): Add them.
	* tests/gen_tests.in (trace_personality_32, trace_personality_64,
	trace_personality_x32, trace_personality_regex_32,
	trace_personality_regex_64, trace_personality_regex_x32): New tests.

2018-06-13  Eugene Syromyatnikov  <evgsyr@gmail.com>

	Add support for personality designation in regex qualifications.
	* basic_filters.c (qualify_syscall_regex): Copy syscall name
	to a temporary buffer, append the personality designation to it,
	and check it against regular expression if the syscall name
	hasn't been matched already.

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

2018-06-13  Eugene Syromyatnikov  <evgsyr@gmail.com>

	Add support for personality designation in syscall qualifications.
	* syscall.c (personality_designators): New array.
	* defs.h (personality_designators): New declaration.
	* basic_filters.c (qualify_syscall_separate_personality,
	qualify_syscall_number_personality): New functions.
	(qualify_syscall_number): Use qualify_syscall_separate_personality for
	checking for a personality specification, call
	qualify_syscall_number_personality for setting number set for specific
	personality.
	(qualify_syscall_name_personality): New function.
	(qualify_syscall_name): Use qualify_syscall_separate_personality for
	checking for a personality specification, call
	qualify_syscall_name_personality for setting number set for specific
	personality.
	* strace.1.in (.SS Filtering): Document it.
	* NEWS: Mention it.

	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
	Closes: https://github.com/strace/strace/issues/35

2018-06-13  Eugene Syromyatnikov  <evgsyr@gmail.com>

	tests: add basic checks for inject=SET:syscall= expression syntax.
	* tests/qual_fault-syscall.test: New test.
	* tests/qual_inject-error-signal-syscall.test: Likewise.
	* tests/qual_inject-retval-syscall.test: Likewise.
	* tests/qual_inject-signal-syscall.test: Likewise.
	* tests/Makefile.am (MISC_TESTS): Add them.
	* tests/qual_fault-syntax.test: Add checks for inject=SET:syscall=
	expression syntax.
	* tests/qual_inject-syntax.test: Likewise.
	* tests/qual_fault.test: Append $suffix to -e fault arguments, override
	$NAME with $name_override if the latter is set.
	* tests/qual_inject-error-signal.test: Append $suffix to -e inject
	arguments, override $NAME with $name_override if the latter is set.
	* tests/qual_inject-retval.test: Likewise.
	* tests/qual_inject-signal.test: Likewise.

2018-06-13  Eugene Syromyatnikov  <evgsyr@gmail.com>

	Implement injection of syscalls with no side effects as an alternative to -1
	* defs.h (INJECT_F_SYSCALL, INJECT_ACTION_FLAGS, TCB_TAMPERED_NO_FAIL,
	syscall_tampered_nofail): New macros.
	(inject_data): Add scno field.
	* filter_qualify.c (struct inject_personality_data): New type.
	(parse_inject_token): Add "pdata" argument, parse "syscall=" option.
	(parse_inject_expression): Add "pdata" argument, forward it to
	parse_inject_token.
	(qualify_inject_common) <pdata>: New variable array, pass it to
	parse_inject_expression, copy it into inject_vec.
	* syscall.c (tamper_with_syscall_entering): Inject the specified syscall
	if INJECT_F_SYSCALL is set.
	(tamper_with_syscall_exiting): Update the check for a failed syscall
	injection.
	(get_syscall_result): Update get_error invocation.
	* strace.1.in: Document new syscall injection expression.
	* NEWS: Mention it.

	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
	Closes: https://github.com/strace/strace/issues/26

2018-06-13  Dmitry V. Levin  <ldv@altlinux.org>

	ia64: remove legacy i386 entries from the syscall entry table.
	Remove the last piece of IA-32 mode support.  Besides being obsolete,
	these bogus syscall entries cause problems with syscall name resolution.

	* linux/ia64/syscallent.h [CST > 0]: Remove.

	Complements: v4.21~17 "linux/ia64: remove IA-32 mode support"

2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>

	linux: set error flags in arch_set_error on POWER and Alpha.
	* alpha/set_error.c (arch_set_error): Set alpha_r3 to 1, update tracee's
	REG_A3.
	* powerpc/set_error.c (arch_set_error): Set bit 28 in CCR register,
	update tracee's PT_CCR.

	Fixes: v4.15~126 "Implement arch specific methods of changing syscall number and error code"

2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>

	tests: check decoding of IFLA_LINKINFO netlink attribute.
	* tests/nlattr_ifla_linkinfo.c: New file.
	* tests/pure_executables.list: Add nlattr_ifla_linkinfo.
	* tests/.gitignore: Likewise.
	* tests/gen_tests.in (nlattr_ifla_linkinfo): New test.

	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>

2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>

	tests: add print_quoted_stringn to print string with a size limit.
	This is similar to print_quoted_cstring, but not quite the same.

	* tests/print_quoted_string.c (print_quoted_stringn): New function.
	* tests/tests.h (print_quoted_stringn): New declaration.

2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>

	tests: add fallback_func argument to TEST_NESTED_NLATTR_OBJECT_EX_
	* tests/test_nlattr.h (TEST_NESTED_NLATTR_OBJECT_EX_): Add fallback_func
	argument, call it instead of print_quoted_hex.
	(TEST_NESTED_NLATTR_OBJECT_EX, TEST_NESTED_NLATTR_OBJECT): Specify
	print_quoted_hex as a fallback_func.
	* tests/nlattr_ifla_af_spec.c: Specify print_quoted_hex as
	a fallback_func in TEST_NESTED_NLATTR_OBJECT_EX_ calls.

	tests/test_nlattr.h: add ability to provide additional nlattr payload.
	* tests/test_nlattr.h (print_nlattr): Add add_data argument, print
	opening square bracket if add_data is set to true.
	(TEST_NLATTR_EX_): Rename from TEST_NLATTR_, add nla_total_len_
	argument, use it for msg_len calculation, print square brackets
	if nla_total_len_ is greater than nla_data_len_.
	(TEST_NLATTR_): New macro, a wrapper for TEST_NLATTR_EX_.

2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>

	rtnl_link: decode struct ifla_bridge_id unconditionally.
	Since it is relatively simple.

	* rtnl_link.c (decode_ifla_bridge_id): Provide struct definition for
	the id variable.
	[!HAVE_STRUCT_IFLA_BRIDGE_ID] (decode_ifla_bridge_id): Decode struct
	ifla_bridge_id.

2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>

	nlattr: specify size for ethernet protocol.
	Otherwise it tries to decode payload of size 1, which makes little
	sense.

	* nlattr.c (decode_nla_ether_proto) <opts>: Specify size field.

	Fixes: v4.22-321-gfd0cd65 "nlattr: add ethernet protocol decoder"

2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>

	rtnl_link: use ARRSZ_PAIR where appropriate.
	It reduces code duplication somewhat and allows avoiding errors like
	the one fixed in the previous commit.

	* rtnl_link.c (decode_ifla_protinfo, decode_nla_linkinfo_data_bridge,
	decode_nla_linkinfo_data_tun, decode_ifla_linkinfo, decode_ifla_port,
	decode_ifla_vf_ports, decode_ifla_xdp,
	DECL_NETLINK_ROUTE_DECODER(decode_ifinfomsg)): Use ARRSZ_PAIR in
	decode_nlattr call arguments.

2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>

	rtnl_link: fix incorrect variable names in ARRAY_SIZE arguments.
	* rtnl_link.c (decode_nla_linkinfo_data_bridge): Change
	rtnl_ifla_info_data_bridge_attrs to ifla_info_data_bridge_nla_decoders
	in ARRAY_SIZE call.
	(decode_nla_linkinfo_data_tun): Change rtnl_ifla_info_data_tun_attrs
	to ifla_info_data_tun_nla_decoders in ARRAY_SIZE call.

	Fixes: v4.22-328-g1e6d5a8 "rtnl_link: implement IFLA_INFO_DATA for bridges"
	Fixes: v4.22-329-g4eab3a4 "rtnl_link: implement IFLA_INFO_DATA for tun devices"

2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>

	mips: add missing pure flag to syscall entries.
	* linux/mips/syscallent-n32.h ([6038], [6100], [6102], [6105], [6106],
	[6108], [6109], [6178]): Add pure flag to getpid, getuid, getgid, geteuid,
	getegid, getpgid, getpgrp, and gttid syscall descriptors.
	* linux/mips/syscallent-n64.h ([5038], [5100], [5102], [5105], [5106],
	[5108], [5109], [5178]): Likewise.
	* linux/mips/syscallent-o32.h ([4020], [4024], [4047], [4049], [4050],
	[4064], [4065], [4222]): Likewise.

	Complements: v4.21~29 "Add pure syscall flag"

2018-06-11  Eugene Syromyatnikov  <evgsyr@gmail.com>

	mips: add missing "never fails" flag to getpgrp syscall entries.
	* linux/mips/syscallent-n32.h ([6109]): Add NF flag.
	* linux/mips/syscallent-n64.h ([5109]): Likewise.
	* linux/mips/syscallent-o32.h ([4065]): Likewise.

	Complements: v4.21~46 "Add SYSCALL_NEVER_FAILS flag to getpgrp"

2018-06-07  Eugene Syromyatnikov  <evgsyr@gmail.com>

	Update NEWS.
	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>

	xlat: describe IPV4_DEVCONF_* weirdness.
	* xlat/inet_devconf_indices.in: Add a comment about fallback definitions.

2018-06-07  Dmitry V. Levin  <ldv@altlinux.org>

	configure.ac: fix the check for struct tc_sizespec on old kernel headers
	* configure.ac (AC_CHECK_TYPES): Include <linux/types.h> before
	<linux/pkt_sched.h> to check for struct tc_sizespec on linux kernel
	headers without v2.6.29-rc4~77^2~26 fix.

2018-06-06  Dmitry V. Levin  <ldv@altlinux.org>

	travis: use kernel headers from v4.17.
	There is too much noise when using unreleased kernel uapi.

	* ci/install-dependencies.sh (clone_repo): Add optional "branch"
	argument, pass it to "git clone".
	($KHEADERS): Pass $KBRANCH as branch argument of clone_repo.
	* .travis.yml (matrix): Specify KBRANCH=v4.17 for
	KHEADERS=torvalds/linux.

2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>

	tests: check decoding of IFLA_AF_SPEC netlink attribute.
	* configure.ac (AC_CHECK_TYPES): Check for struct ifla_cacheinfo in
	<linux/rtnetlink.h>
	(AC_CHECK_DECLS): Check for IFLA_AF_SPEC in <linux/rtnetlink.h>.
	* tests/nlattr_ifla_af_spec.c: New file.
	* tests/pure_executables.list: Add nlattr_ifla_af_spec.
	* tests/.gitignore: Likewise.
	* tests/gen_tests.in (nlattr_ifla_af_spec): New test.

2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>

	tests: add TEST_NESTED_NLATTR_ARRAY_EX to test_nlattr.h.
	An ability to specify custom depth is going to be needed later to check
	IFLA_AF_SPEC decoding.

	* configure.ac (AC_CHECK_DECLS): Check for TCA_STAB_DATA in
	<linux/pkt_sched.h>.
	* tests/test_nlattr.h (TEST_NESTED_NLATTR_ARRAY_EX): Rename from
	TEST_NESTED_NLATTR_ARRAY, add depth_ argument, perform padding and
	output accordingly.
	(TEST_NESTED_NLATTR_ARRAY): New macro, a thin wrapper around
	TEST_NESTED_NLATTR_ARRAY_EX.
	* tests/nlattr_tca_stab.c [!HAVE_DECL_TCA_STAB_DATA] (TCA_STAB_DATA):
	New enumeration declaration.

	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>

2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>

	tests: pass index to print_elem_ callback in TEST_NLATTR_NESTED_ARRAY.
	* tests/test_nlattr.h (TEST_NLATTR_NESTED_ARRAY): Pass array index
	to the print_elem_ callback.
	* tests/nlattr_tca_stab.c (print_uint16): Add index argument.

	tests: move common ifinfomsg boilerplate into a separate header.
	* configure.ac (AC_CHECK_DECLS): Check for IFLA_PORT_SELF, IFLA_PROTINFO, and
	IFLA_XDP in <linux/rtnetlink.h>.
	* tests/nlattr_ifla.h: New file.
	* tests/Makefile.am (EXTRA_DIST): Add it.
	* tests/nlattr_ifla_brport.c [!HAVE_DECL_IFLA_PROTINFO] (IFLA_PROTINFO):
	New declaration.
	(hdrlen, init_ifinfomsg, print_ifinfomsg): Remove.
	(IFLA_ATTR): Define to IFLA_PROTINFO.
	Include nlattr_ifla.h.
	* tests/nlattr_ifla_port.c [!HAVE_DECL_IFLA_PORT_SELF] (IFLA_PORT_SELF):
	New declaration.
	(hdrlen, init_ifinfomsg, print_ifinfomsg): Remove.
	(IFLA_ATTR): Define to IFLA_PORT_SELF.
	Include nlattr_ifla.h.
	* tests/nlattr_ifla_xdp.c
	* tests/nlattr_ifla_xdp.c [!HAVE_DECL_IFLA_XDP] (IFLA_XDP): New
	declaration.
	(hdrlen, init_ifinfomsg, print_ifinfomsg): Remove.
	(IFLA_ATTR): Define to IFLA_XDP.
	Include nlattr_ifla.h.

	rtnl_link: implement IFLA_INFO_DATA for tun devices.
	* xlat/rtnl_ifla_info_data_tun_attrs.in: New file.
	* xlat/tun_device_types.in: Likewise.
	* rtnl_link.c: Include xlat/rtnl_ifla_info_data_tun_attrs.h and
	xlat/tun_device_types.h.
	(decode_nla_tun_type, decode_nla_linkinfo_data_tun): New functions.
	(ifla_info_data_tun_nla_decoders): New decoder dispatcher table.
	(decode_nla_linkinfo_data): Use decode_nla_linkinfo_data_tun if kind
	is
	"tun".

	rtnl_link: implement IFLA_INFO_DATA for bridges.
	* xlat/rtnl_ifla_info_data_bridge_attrs.in: New file.
	* rtnl_link.c: Include xlat/rtnl_ifla_info_data_bridge_attrs.h.
	(ifla_info_data_bridge_nla_decoders): New decoder dispatcher table.
	(decode_nla_linkinfo_data_bridge, decode_nla_linkinfo_data): New
	functions.
	(ifla_linkinfo_nla_decoders) <IFLA_INFO_DATA>: Use
	decode_nla_linkinfo_data as a decoder.

2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>

	rtnl_link: implement IFLA_INFO_XSTATS decoding.
	So far, only CAN provides it.

	* rtnl_link.c (decode_nla_linkinfo_xstats_can,
	decode_nla_linkinfo_xstats): New function.
	(ifla_linkinfo_nla_decoders) <IFLA_INFO_XSTATS>: Use
	decode_nla_linkinfo_xstats as a decoder.

2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>

	rtnl_link: add basic IFLA_INFO_* handling.
	Dispatch for IFLA_INFO_* attributes should be performed based on the
	string provided in a IFLA_INFO_KIND attribute.

	* nlattr.h (struct ifla_linkinfo_ctx): New type definition.
	* rtnl_link.c (decode_nla_linkinfo_kind): New function.
	(ifla_linkinfo_nla_decoders) <IFLA_INFO_KIND>: Use
	decode_nla_linkinfo_kind as decoder.
	(decode_ifla_linkinfo): Add struct ifla_linkinfo_ctx context, pass it to
	the decode_nlattr call as opaque data.

2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>

	rtnl_link: decode IFLA_AF_SPEC.
	* xlat/in6_addr_gen_mode.in: New file.
	* xlat/inet6_devconf_indices.in: Likewise.
	* xlat/inet6_if_flags.in: Likewise.
	* xlat/inet_devconf_indices.in: Likewise.
	* xlat/rtnl_ifla_af_spec_inet6_attrs.in: Likewise.
	* xlat/rtnl_ifla_af_spec_inet_attrs.in: Likewise.
	* xlat/snmp_icmp6_stats.in: Likewise.
	* xlat/snmp_ip_stats.in: Likewise.
	* rtnl_link.c: Include netinet/in.h, xlat/in6_addr_gen_mode.h,
	xlat/inet_devconf_indices.h, xlat/inet6_devconf_indices.h,
	xlat/inet6_if_flags.h, xlat/rtnl_ifla_af_spec_inet_attrs.h,
	xlat/rtnl_ifla_af_spec_inet6_attrs.h, xlat/snmp_icmp6_stats.h,
	and xlat/snmp_ip_stats.h.
	(decode_ifla_inet_conf, decode_ifla_inet6_flags,
	decode_ifla_inet6_conf, decode_ifla_inet6_stats,
	decode_ifla_inet6_cacheinfo, decode_ifla_inet6_icmp6_stats,
	decode_ifla_inet6_token, decode_ifla_inet6_agm, decode_ifla_af,
	decode_ifla_af_spec): New functions.
	(ifla_inet_nla_decoders, ifla_inet6_nla_decoders,
	nla_decoder_table_desc): New static constant variables.
	(ifinfomsg_nla_decoders) <[IFLA_AF_SPEC]>: Change value from NULL to
	decode_ifla_af_spec.

2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>

	nlattr: add size check to decode_nla_xval and decode_nla_flags.
	If the field size is known, do not print as valid numbers those
	attributes that are too short, and ignore extra data.

	This change puts xval/flags printing in line with the reset of attribute
	decoders.

	* nlattr.h (struct decode_nla_xlat_opts): Add size field.
	* nlattr.c (decode_nla_xval, decode_nla_flags): Check that len is at
	least opts->size, limit len to opts->size.
	(decode_nla_ip_proto): Specify size of 1.

	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>

2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>

	nlattr: add UID/GID netlink attribute decoders.
	* nlattr.h (DECL_NLA(uid), DECL_NLA(gid)): New declarations.
	* nlattr.c (decode_nla_uid, decode_nla_gid): New functions.

	nlattr: add unsigned int decoders that print in hex form.
	* nlattr.h (DECL_NLA(x8), DECL_NLA(x16), DECL_NLA(x32), DECL_NLA(x64)):
	New declarations.
	* nlattr.c (DECODE_NLA_INTEGER(x8, uint8_t, "%#" PRIx8),
	DECODE_NLA_INTEGER(x16, uint16_t, "%#" PRIx16),
	DECODE_NLA_INTEGER(x32, uint32_t, "%#" PRIx32),
	DECODE_NLA_INTEGER(x64, uint64_t, "%#" PRIx64)): New decoders.

	nlattr: add ethernet protocol decoder.
	* nlattr.h (DECL_NLA(ether_proto)): New declaration.
	* nlattr.c (process_host_order, decode_nla_ether_proto): New functions.

2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>

	nlattr: add value processing support for xlat/flags nlattr decoders.
	Needed for upcoming decoder of ethernet proto which is stored in the
	host order and has to be converted to the network order before printing
	as an xval constant.  This change also adds ability to provide
	prefix/suffix in order to enclose the printed value in something that
	describes the performed conversion.

	* nlattr.h (struct decode_nla_xlat_opts): Add prefix, suffix, and
	process_fn fields.
	* nlattr.c (decode_nla_xval, decode_nla_flags): Handle process_fn,
	prefix, snd uffix parameters.

2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>

	nlattr: introduce decode_nla_flags.
	Similar to decode_nla_xval.

	* nlattr.c (decode_nla_flags): New function.
	* nlattr.h: (DECL_NLA(flags)): New declaration.

2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>

	nlattr: add ability to pass nla_type to decoder in decode_nlattr.
	As of now, it's impossible to introduce a dispatching nlattr decoder
	that performs actions based on the type of the message, so let's use
	a combination of zero decoder list size and non-zero decoder pointer
	for this.

	This is going to be used later in IFLA_AF_SPEC decoding.

	* nlattr.c (decode_nlattr_with_data): Handle zero size and non-NULL
	decoders in a special way.
	(decode_nlattr): Add an error message about ignoring of opaque_data
	argument when zero size and non-NULL decoders are provided.
	* nlattr.h (decode_nlattr): Add a comment about the new special case.

2018-06-06  Dmitry V. Levin  <ldv@altlinux.org>

	tests: use STRINGIFY instead of _STR.
	Remove _STR which is essentially the same as STRINGIFY but from
	the namespace where we should not introduce new identifiers.

	* tests/tests.h (_STR): Remove.
	* tests/add_key.c (main): Replace _STR with STRINGIFY.
	* tests/keyctl.c (XARG_STR): Likewise.
	* tests/request_key.c (main): Likewise.

2018-06-06  Eugene Syromyatnikov  <evgsyr@gmail.com>

	tests: check decoding of IFLA_EVENT netlink attribute.
	* tests/nlattr_ifinfomsg.c (main): Add a check for IFLA_EVENT attribute
	decoding.

2018-06-05  Dmitry V. Levin  <ldv@altlinux.org>

	xlat: handle xlat constants that are not identifiers.
	Extend xlat generator to support such input lines as
		IPV4_DEVCONF_FORWARDING-1	0

	This is going to be used later in IFLA_AF_SPEC decoding.

	* xlat/gen.sh (cond_def): If the xlat value is not an identifier name,
	extract an identifier name from the beginning of xlat value.

2018-06-05  Eugene Syromyatnikov  <evgsyr@gmail.com>

	xlat.c: handle NULL xlat in lookup routines as incremental search.
	This is going to be used later in IFLA_AF_SPEC decoding.

	* xlat.c (xlookup): Add static variable pos, store xlat there when it is
	non-NULL, use pos for lookup.
	(xlat_search, xlat_idx): Add static variables pos and memb_left, store
	xlat and nmemb there when xlat is non-NULL, use them for lookup.
	(printxvals_ex): Store the last non-NULL xlat in static variable "last".
	If the first xlat argument is NULL, use "last" instead.

	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>

2018-06-05  Eugene Syromyatnikov  <evgsyr@gmail.com>

	xlat.c: cleanup printxvals_ex a bit.
	* xlat.c (printxvals_ex): Change "str" variable visibility to the whole
	function, jump to va_end instead of duplicating call and return, return
	!!str.

	Leverage the fact that inet_protocols xlat is sorted.
	* defs.h (inet_protocols): Move up, add description.
	(inet_protocols_size): New declaration.
	* net.c (inet_protocols_size): New constant variable.
	* nlattr.c (decode_nla_ip_proto): Specify xlat_size, set xt to XT_SORTED.

2018-06-04  Eugene Syromyatnikov  <evgsyr@gmail.com>

	Print arp_hardware_types as a sorted xlat.
	* rtnl_link.c (DECL_NETLINK_ROUTE_DECODER(decode_ifinfomsg)): Use
	PRINT_FIELD_XVAL_SORTED_SIZED instead of PRINT_FIELD_XVAL for
	arp_hardware_types.
	* sock.c (print_ifreq): Likewise.

	Provide a value for arp_hardware_types_size array.
	* defs.h (arp_hardware_types_size): New declaration.
	* sockaddr.c (arp_hardware_types_size): New variable.

2018-06-04  Eugene Syromyatnikov  <evgsyr@gmail.com>

	print_fields.h: introduce PRINT_FIELD_XVAL_SORTED_SIZED.
	For those cases when array definition is not readily available
	and should be provided separately.

	* print_fields.h (PRINT_FIELD_XVAL_SORTED_SIZED): New macro.

2018-06-04  Eugene Syromyatnikov  <evgsyr@gmail.com>

	tests/opipe.test: remove unneeded run_prog call.
	There is no need to invoke grep using run_prog.

	* tests/opipe.test: Remove run_prog decoration for the grep invocation.

2018-06-04  Eugene Syromyatnikov  <evgsyr@gmail.com>

	tests: check BPF_OBJ_GET_INFO_BY_FD decoding.
	* tests/bpf-obj_get_info_by_fd-prog-v.c: New file.
	* tests/bpf-obj_get_info_by_fd-prog.c: Likewise.
	* tests/bpf-obj_get_info_by_fd-v.c: Likewise.
	* tests/bpf-obj_get_info_by_fd.c: Likewise.
	* configure.ac (AC_CHECK_HEADERS): Check for struct bpf_insn,
	struct bpf_map_info, and struct bpf_prog_info.
	* tests/pure_executables.list: Add bpf-obj_get_info_by_fd,
	bpf-obj_get_info_by_fd-v, bpf-obj_get_info_by_fd-prog, and
	bpf-obj_get_info_by_fd-prog-v.
	* tests/.gitignore: Likewise.
	* tests/gen_tests.in (bpf-obj_get_info_by_fd,
	bpf-obj_get_info_by_fd-v, bpf-obj_get_info_by_fd-prog,
	bpf-obj_get_info_by_fd-prog-v): New tests.

	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>

2018-06-04  Dmitry V. Levin  <ldv@altlinux.org>

	bpf: enhance BPF_OBJ_GET_INFO_BY_FD decoder further.
	* bpf.c (print_ebpf_prog): Remove "decode" argument, all users updated.
	(print_bpf_prog_info): Use the minimum of xlated_prog_len values on
	entering and exiting syscall as the size of xlated_prog_insns array
	to be decoded.  Likewise, use the minimum of nr_map_ids values on entering
	and exiting syscall as the size of map_ids array to be decoded.

2018-06-02  Eugene Syromyatnikov  <evgsyr@gmail.com>

	bpf: enhance BPF_OBJ_GET_INFO_BY_FD decoder.
	* bpf.c (print_bpf_map_info): Print only those fields that are
	present in the structure, as it has been growing over time.
	(print_bpf_prog_info): Likewise.  Print map_ids field as an array
	of uint32_t instead of uint64_t; print "name" field.

	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>

2018-06-02  Eugene Syromyatnikov  <evgsyr@gmail.com>

	bpf: move handling of the saved state to BPF_OBJ_GET_INFO_BY_FD decoder.
	As it is needed for proper info_len printing on exiting.

	* bpf.c (print_bpf_obj_info_fn): Change return type to void, add "saved"
	argument.
	(struct obj_get_info_saved): New type definition.
	(print_bpf_map_info, print_bpf_prog_info): Change return type to void,
	add "saved" argument, do not handle private tcb data allocation and
	obtainment.
	(print_bpf_obj_info_addr): Change return type to void, add tcb argument,
	print the address only on exiting.
	(print_bpf_obj_info): Change return type to void, add "saved" argument.
	(BEGIN_BPF_CMD_DECODER(BPF_OBJ_GET_INFO_BY_FD)): Handle private data
	allocation/saving/restoring, use it for storing/printing info_len field.

	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>

2018-06-02  Eugene Syromyatnikov  <evgsyr@gmail.com>

	bpf: print log_buf field as a string.
	* bpf.c (BEGIN_BPF_CMD_DECODER(BPF_PROG_LOAD)): Print log_buf field
	as a string.
	* tests/bpf.c: Update expected output.

	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>

2018-06-02  Eugene Syromyatnikov  <evgsyr@gmail.com>

	bpf: print xlated_prog_insns only when xlated_prog_len had not been 0.
	If xlated_prog_len is zero on entering syscall and non-zero on exiting,
	the program itself is not written into xlated_prog_insns.

	* bpf.c (print_ebpf_prog): Add decode argument, print the address only
	if decode is false.
	(BEGIN_BPF_CMD_DECODER(BPF_PROG_LOAD)): Specify decode == true argument
	to print_ebpf_prog.
	(print_bpf_prog_info): Specify saved xlated_prog_len as decode argument
	to print_ebpf_prog.

	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>

2018-06-02  Eugene Syromyatnikov  <evgsyr@gmail.com>

	bpf: move print_big_u64_addr inside print_ebpf_prog.
	* bpf.c (print_ebpf_prog): Add static qualifier.  Change the type
	of "addr" argument from kernel_ulong_t to uint64_t, print it using
	print_big_u64_addr.
	(BEGIN_BPF_CMD_DECODER(BPF_PROG_LOAD), print_bpf_prog_info): Do not call
	print_big_u64_addr before print_ebpf_prog.

	Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>

2018-06-02  Dmitry V. Levin  <ldv@altlinux.org>

	bpf_attr.h: add ATTRIBUTE_ALIGNED(8) to all fields of type uint64_t.
	Our policy is that all fields of type uint64_t in this header file
	must have this attribute.

	This shouldn't cause any contradictions with <linux/bpf.h>
	unless the latter is buggy.

	By word "buggy" I mean containing such changes as Linux kernel commit
	v4.16-rc1~123^2~109^2~5^2~4.

	* bpf_attr.h (struct BPF_MAP_UPDATE_ELEM_struct): Add
	ATTRIBUTE_ALIGNED(8) to "flags" field.
	(struct bpf_prog_info_struct): Add ATTRIBUTE_ALIGNED(8) to "load_time"
	field.

2018-06-02  Eugene Syromyatnikov  <evgsyr@gmail.com>

	tests: cast printf arguments to short when %h format qualifier is used.
	Reported by clang.

	* tests/mknod.c (main): Cast printf argument for %#03ho format to short.
	* tests/mknodat.c (main): Likewise.
	* tests/net-sockaddr.c (main): Cast printf argument for %hu format
	to short.
	* tests/semop.c (main): Likewise.

2018-06-02  Eugene Syromyatnikov  <evgsyr@gmail.com>

	xlat/evdev_keycode.in: remove constants with duplicating values.
	Those are used for describing input device category and not specific
	button.

	Reported by clang.

	* xlat/evdev_keycode.in (BTN_MOUSE, BTN_JOYSTICK, BTN_GAMEPAD, BTN_DIGI,
	BTN_WHEEL, BTN_TRIGGER_HAPPY): Remove.

2018-06-01  Eugene Syromyatnikov  <evgsyr@gmail.com>

	configure.ac: include <sys/socket.h> before <linux/rtnetlink.h>
	This is needed for old Linux UAPI headers that do no contain commit
	v3.1-rc2~19^2~29.

	* configure.ac: Include <sys/socket.h> before <linux/rtnetlink.h>
	in AC_CHECK_* invocations.

2018-06-01  Eugene Syromyatnikov  <evgsyr@gmail.com>

	configure.ac: check for linux/rtnetlink.h instead of linux/if_link.h for declarations
	Historically, type definitions and declarations related to netlink route
	interface attributes were in linux/rtnetlink.h, later they were moved
	elsewhere (first linux/if.h, then linux/if_link.h) with the inclusion
	of the corresponding header file in linux/rtnetlink.h.

	* configure.ac: Use <linux/rtnetlink.h> instead of <linux/if_link.h>
	in checks for interface netlink attributes-related declarations
	and definitions.

2018-06-01  Eugene Syromyatnikov  <evgsyr@gmail.com>

	m4: move the gawk script from m4/gen_bpf_attr_m4.sh into a separate file
	As it turns out, old versions of gawk do not support -e option.

	* m4/gen_bpf_attr_m4.sh: Move the gawk script ...
	* m4/gen_bpf_attr_m4.awk: ... here.

2018-06-01  Eugene Syromyatnikov  <evgsyr@gmail.com>

	s390: wire up kexec_file_load syscall.
	* linux/s390/syscallent.h ([381]): Add kexec_file_load syscall.
	* linux/s390/syscallent.h ([381]): Likewise.

2018-06-01  Zhibin Li  <08826794brmt@gmail.com>

	tests: check short read of struct flock/flock64.
	* tests/fcntl-common.c (test_flock_einval): Check short read
	of struct flock.
	(test_flock64_einval): Check short read of struct flock64.

2018-06-01  Dmitry V. Levin  <ldv@altlinux.org>

	tests: extend struct flock/flock64 decoding checks.
	* tests/fcntl-common.c (test_flock_einval, test_flock): Create
	struct_kernel_flock object using tail_alloc.
	(test_flock64_einval): Create struct_kernel_flock64 object using
	tail_alloc.
	* tests/fcntl64.c (test_flock64_lk64): Likewise.

2018-06-01  Dmitry V. Levin  <ldv@altlinux.org>

	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].

2018-06-01  Dmitry V. Levin  <ldv@altlinux.org>

	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.

2018-06-01  Dmitry V. Levin  <ldv@altlinux.org>

	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.

2018-06-01  Dmitry V. Levin  <ldv@altlinux.org>

	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.

2018-06-01  Dmitry V. Levin  <ldv@altlinux.org>

	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.

2018-06-01  Dmitry V. Levin  <ldv@altlinux.org>

	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.

2018-05-30  Eugene Syromyatnikov  <evgsyr@gmail.com>

	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>

2018-05-30  Eugene Syromyatnikov  <evgsyr@gmail.com>

	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>

2018-05-30  Eugene Syromyatnikov  <evgsyr@gmail.com>

	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>

2018-05-30  Dmitry V. Levin  <ldv@altlinux.org>

	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.

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

2018-05-30  Eugene Syromyatnikov  <evgsyr@gmail.com>

	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.

2018-05-30  Eugene Syromyatnikov  <evgsyr@gmail.com>

	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.

2018-05-30  Eugene Syromyatnikov  <evgsyr@gmail.com>

	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.

2018-05-30  Eugene Syromyatnikov  <evgsyr@gmail.com>

	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.

2018-05-30  Eugene Syromyatnikov  <evgsyr@gmail.com>

	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.

2018-05-30  Eugene Syromyatnikov  <evgsyr@gmail.com>

	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.

2018-05-29  Dmitry V. Levin  <ldv@altlinux.org>

	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.

2018-05-29  Dmitry V. Levin  <ldv@altlinux.org>

	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,
