]> granicus.if.org Git - strace/log
strace
6 years agoxlat: save the script used to generate xlat/sock_options.in
Dmitry V. Levin [Wed, 1 Aug 2018 14:57:16 +0000 (14:57 +0000)]
xlat: save the script used to generate xlat/sock_options.in

* xlat/sock_options.sh: New file from commit message of commit v4.23~199.

6 years agotests: check decoding of getsockopt(PACKET_STATISTICS)
Zhibin Li [Tue, 24 Jul 2018 08:59:16 +0000 (16:59 +0800)]
tests: check decoding of getsockopt(PACKET_STATISTICS)

* tests/net-tpacket_stats.c: New file.
* tests/net-tpacket_stats-success.c: Likewise.
* tests/gen_tests.in (net-tpacket_stats): New test.
* tests/net-tpacket_stats-success.test: Likewise.
* tests/.gitignore: Add net-tpacket_stats and net-tpacket_stats-success.
* tests/Makefile.am (check_PROGRAMS): Add net-tpacket_stats-success.
(DECODER_TESTS): Add net-tpacket_stats-success.test.
* tests/pure_executables.list: Add net-tpacket_stats.

6 years agotests: check decoding of setsockopt(PACKET_[R|T]X_RING)
Zhibin Li [Tue, 24 Jul 2018 08:59:15 +0000 (16:59 +0800)]
tests: check decoding of setsockopt(PACKET_[R|T]X_RING)

* tests/net-tpacket_req.c: New file.
* tests/.gitignore: Add net-tpacket_req.
* tests/pure_executables.list: Likewise.
* tests/gen_tests.in (net-tpacket_req): New test.

6 years agotests: check decoding of setsockopt(PACKET_[ADD|DROP]_MEMBERSHIP)
Zhibin Li [Tue, 24 Jul 2018 08:59:14 +0000 (16:59 +0800)]
tests: check decoding of setsockopt(PACKET_[ADD|DROP]_MEMBERSHIP)

* tests/net-packet_mreq.c: New file.
* tests/.gitignore: Add net-packet_mreq.
* tests/pure_executables.list: Likewise.
* tests/gen_tests.in (net-packet_mreq): New test.

6 years agotests: bring lists back to the sorted order
Dmitry V. Levin [Fri, 20 Jul 2018 16:18:17 +0000 (16:18 +0000)]
tests: bring lists back to the sorted order

* tests/.gitignore: Make the list sorted again.
* tests/pure_executables.list: Likewise.
* tests/Makefile.am (check_PROGRAMS, DECODER_TESTS, MISC_TESTS):
Likewise.

6 years agotests: check decoding of successful quotactl
Zhibin Li [Wed, 18 Jul 2018 10:00:58 +0000 (18:00 +0800)]
tests: check decoding of successful quotactl

* tests/quotactl-success.c: New file.
* tests/quotactl-success-v.c: Likewise.
* tests/quotactl-xfs-success.c: Likewise.
* tests/quotactl-xfs-success-v.c: Likewise.
* tests/quotactl-success.test: New test.
* tests/quotactl-success-v.test: Likewise.
* tests/quotactl-xfs-success.test: Likewise.
* tests/quotactl-xfs-success-v.test: Likewise.
* tests/.gitignore: Add quotactl-success, quotactl-success-v,
quotactl-xfs-success and quotactl-xfs-success-v.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(DECODER_TESTS): Add four new tests listed above.
* tests/quotactl.h: [INJECT_RETVAL] (check_quota): Use errstr instead of
sprintrc; check that returned value is equivalent to the injected one;
append "(INJECTED)" string to errstr.
* tests/quotactl.c: Changed condition rc != 0 to rc < 0 in callback
functions and value of opaque pointer addr_cb_arg in order to check
successful injection.
* tests/quotactl-xfs.c: Likewise.

6 years agonet: enhance decoding of getsockopt(PACKET_STATISTICS)
Dmitry V. Levin [Wed, 18 Jul 2018 20:03:18 +0000 (20:03 +0000)]
net: enhance decoding of getsockopt(PACKET_STATISTICS)

* net.c (print_tpacket_stats): Change decoder to match the kernel
behaviour: getsockopt syscall accepts any non-negative *optlen and
writes either MIN(sizeof(struct tpacket_stats), *optlen) or
MIN(sizeof(struct tpacket_stats_v3), *optlen) bytes of data.

6 years agonet: compile SO_PEERCRED/SO_ATTACH_FILTER/SO_ATTACH_REUSEPORT_CBPF code unconditionally
Dmitry V. Levin [Wed, 18 Jul 2018 20:03:18 +0000 (20:03 +0000)]
net: compile SO_PEERCRED/SO_ATTACH_FILTER/SO_ATTACH_REUSEPORT_CBPF code unconditionally

* net.c: Remove checks for SO_PEERCRED, SO_ATTACH_FILTER, and
SO_ATTACH_REUSEPORT_CBPF macros as they are defined unconditionally
since commit v4.23~199.

6 years agonet: enhance decoding of getsockopt(SO_PEERCRED)
Dmitry V. Levin [Tue, 17 Jul 2018 22:07:40 +0000 (22:07 +0000)]
net: enhance decoding of getsockopt(SO_PEERCRED)

* net.c (print_ucred): Rename to print_get_ucred, change decoder
to match the kernel behaviour: getsockopt syscall accepts any
non-negative *optlen and writes MIN(sizeof(struct ucred), *optlen)
bytes of data.
(print_getsockopt): Replace print_ucred with print_get_ucred.
* tests/so_percred.c: Include <string.h>.
(main): Update expected output.

6 years agonet: enhance decoding of getsockopt(SO_LINGER)
Dmitry V. Levin [Mon, 16 Jul 2018 22:57:59 +0000 (22:57 +0000)]
net: enhance decoding of getsockopt(SO_LINGER)

* net.c (print_get_linger): Change decoder to match the kernel
behaviour: getsockopt syscall accepts any non-negative *optlen
and writes MIN(sizeof(struct linger), *optlen) bytes of data.
(print_set_linger): Move after definition of SYS_FUNC(getsockopt).
* tests/so_linger.c: Include <stddef.h> and <string.h>.
(main): Update expected output.

6 years agonet: generalize getsockopt length check
Dmitry V. Levin [Wed, 18 Jul 2018 19:25:52 +0000 (19:25 +0000)]
net: generalize getsockopt length check

* net.c (print_getsockopt): Apply (ulen < 0 || rlen < 0) check for all
cases.  As the kernel neither accepts nor returns a negative length
in case of successful getsockopt syscall invocation, these negative
values must have been forged by userspace.

6 years agotests: fix build with fresh glibc
Dmitry V. Levin [Sun, 15 Jul 2018 22:14:29 +0000 (22:14 +0000)]
tests: fix build with fresh glibc

Workaround additional incompatibility between <sys/stat.h> and
<asm/stat.h> introduced by glibc-2.27.9000-566-gfd70af4.

* tests/xstatx.c (statx, statx_timestamp): Redefine before the inclusion
of <sys/stat.h> to avoid conflicts between definitions provided by the
linux kernel headers and the GNU libc.

6 years agotests/quotactl.h: document check_quota
Eugene Syromyatnikov [Sun, 15 Jul 2018 04:44:07 +0000 (07:44 +0300)]
tests/quotactl.h: document check_quota

* tests/quotactl.h (check_quota): Add a comment describing the function
usage.

6 years agotests/quotactl-xfs.c: fix indentation
Zhibin Li [Thu, 12 Jul 2018 09:32:14 +0000 (17:32 +0800)]
tests/quotactl-xfs.c: fix indentation

6 years agotests: use check_quota for invalid quotactl commands
Zhibin Li [Thu, 12 Jul 2018 09:32:12 +0000 (17:32 +0800)]
tests: use check_quota for invalid quotactl commands

Use check_quota function for invalid commands instead of manual quotactl
syscall invocations. In this way successful injection can also be checked
for these commands in the next commit.

* tests/quotactl.c (main): Add invalid_cmd_str and invalid_id_str local
variables, remove unused variable rc, use check_quota instead of manual
quotactl syscall invocations.
* tests/quotaclt.c (main): Add invalid_cmd_str variable, remove unused
variable rc, use check_quota instead of manual quotactl syscall invocations.

6 years agotests: enhance test coverage of quotactl syscall parser
Zhibin Li [Thu, 12 Jul 2018 09:32:11 +0000 (17:32 +0800)]
tests: enhance test coverage of quotactl syscall parser

* tests/quotactl.c (print_dqfmt): New function.
(main): Use print_dqfmt to print flags of quota format, improve existing
tests and add more tests for Q_GETFMT.
* tests/quotactl-xfs.c: Improve existing tests and add more tests for
Q_XGETQSTAT and Q_XGETQSTATV.

6 years agotests/quotactl-xfs.c: fix typos in QCMD
Zhibin Li [Thu, 12 Jul 2018 09:32:10 +0000 (17:32 +0800)]
tests/quotactl-xfs.c: fix typos in QCMD

* tests/quotactl-xfs.c (main): fix typos of sub-commands in QCMD.

6 years agoMpersify decoder of struct xfs_dqstats
Zhibin Li [Thu, 12 Jul 2018 09:32:09 +0000 (17:32 +0800)]
Mpersify decoder of struct xfs_dqstats

* xfs_quota_stat.h: New file.
* fetch_struct_xfs_quotastat.c: Likewise.
* Makefile.am (strace_SOURCES): Add them.
* quota.c: Include xfs_quota_stat.h
(struct fs_qfilestat, struct xfs_dqstats): Moved to xfs_quota_stat.h.
(decode_cmd_data) <case Q_XGETQSTAT>: Use fetch_struct_quotastat.

6 years agoquota: fix disorder of PRINT_FIELD invocations
Zhibin Li [Thu, 12 Jul 2018 09:32:08 +0000 (17:32 +0800)]
quota: fix disorder of PRINT_FIELD invocations

* quota.c (decode_cmd_data) <case Q_XGETQSTAT>: Print fields
of struct xfs_dqstats in the structure order.

6 years agotests: extend coverage for other fcntl flags
Zhibin Li [Thu, 12 Jul 2018 06:49:42 +0000 (14:49 +0800)]
tests: extend coverage for other fcntl flags

* tests/fcntl-common.c: Include <assert.h>.
(struct fcntl_cmd_check): New structure.
(print_retval_flags, test_other_set_cmd, test_other_get_cmd,
print_flags_getfd, print_flags_getsig, print_flags_getlease,
test_fcntl_others): New functions.
(main): Use test_fcntl_others.

6 years agoImplement -e kvm= option on all architectures
Dmitry V. Levin [Wed, 11 Jul 2018 00:00:57 +0000 (00:00 +0000)]
Implement -e kvm= option on all architectures

Make -e kvm= interface available on all architectures by adding a stub
on those architectures that do not have <linux/kvm.h>.

* filter_qualify.c (qualify_kvm): Define unconditionally.
(qual_options): Define qualify_kvm entry unconditionally.
* strace.c (usage): Mention kvm argument of -e option unconditionally.

6 years agoxlat: update bpf(2)-related constants
Eugene Syromyatnikov [Mon, 25 Jun 2018 01:31:32 +0000 (03:31 +0200)]
xlat: update bpf(2)-related constants

* xlat/bpf_attach_type.in (BPF_CGROUP_UDP4_SENDMSG,
BPF_CGROUP_UDP6_SENDMSG): New constant, introduced by Linux commit
v4.18-rc1~114^2~9^2~20^2~4.
(BPF_LIRC_MODE2): New constant, introduced by Linux commit
v4.18-rc1~114^2~9^2~15^2~1.
* xlat/bpf_commands.in (BPF_BTF_LOAD): New constant, introduced by Linux
commit v4.18-rc1~114^2~417^2~1^2~5.
(BPF_BTF_GET_FD_BY_ID): New constant, introduced by Linux commit
v4.18-rc1~114^2~223^2~21^2~4.
(BPF_TASK_FD_QUERY): New constant, introduced by Linux commit
v4.18-rc1~114^2~148^2~1^2~5.
* xlat/bpf_map_types.in (BPF_MAP_TYPE_XSKMAP): New constant, introduced
by Linux commit v4.18-rc1~114^2~304^2~4^2~8.
(BPF_MAP_TYPE_SOCKHASH): New constant, introduced by Linux commit
v4.18-rc1~114^2~223^2~5^2~2.
* xlat/bpf_prog_types.in (BPF_PROG_TYPE_LWT_SEG6LOCAL): New constant,
introduced by Linux commit v4.18-rc1~114^2~148^2~2^2~1.
(BPF_PROG_TYPE_LIRC_MODE2): New constant, introduced by Linux commit
v4.18-rc1~114^2~9^2~15^2~1.
* tests/bpf.c: Update expected output.

6 years agoWire up io_pgetevents and rseq on hppa, microblaze, mips, powerpc, and s390
Eugene Syromyatnikov [Mon, 25 Jun 2018 01:06:23 +0000 (03:06 +0200)]
Wire up io_pgetevents and rseq on hppa, microblaze, mips, powerpc, and s390

* linux/hppa/syscallent.h ([350]): Wire up io_pgetevents syscall
introduced by Linux commit v4.18-rc3~7^2~2.
* linux/microblaze/syscallent.h ([399], [400]): Wire up io_pgetevents
and rseq syscalls introduced by Linux commit v4.18-rc3~33^2~2.
* linux/mips/syscallent-n32.h ([6331], [6332]): Wire up rseq and
io_pgetevents syscalls introduced by Linux commits v4.18-rc2~11^2~2
and v4.18-rc2~11^2, respectively.
* linux/mips/syscallent-n64.h ([5327], [5328]): Likewise.
* linux/mips/syscallent-o32.h ([4367], [4368]): Likewise.
* linux/powerpc/syscallent.h ([388]): Wire up io_pgetevents syscall
introduced by Linux commit v4.18-rc3~14^2~2.
* linux/powerpc64/syscallent.h ([388]): Likewise.
* linux/s390/syscallent.h ([382], [383]): Wire up io_pgetevents
and rseq syscalls introduced by Linux commits v4.18-rc4~18^2~1
and v4.18-rc4~18^2, respectively.
* linux/s390x/syscallent.h([382], [383]): Likewise.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agomaint: improve the tag message
Eugene Syromyatnikov [Fri, 22 Jun 2018 11:26:06 +0000 (13:26 +0200)]
maint: improve the tag message

* maint/gen-tag-message.sh: Align the wording of the changes section
header with the one used in NEWS, add a reference to CREDITS in
"Contributors" section.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoUpgrade invalid -e kvm= argument to a fatal error
Dmitry V. Levin [Tue, 10 Jul 2018 16:10:38 +0000 (16:10 +0000)]
Upgrade invalid -e kvm= argument to a fatal error

* filter_qualify.c (qualify_kvm): Call error_msg_and_die instead of
error_msg in case of invalid -e kvm= argument.
* tests/options-syntax.test: Check it.

6 years agoMention -e inject option in "strace -h" output
Dmitry V. Levin [Tue, 10 Jul 2018 16:10:38 +0000 (16:10 +0000)]
Mention -e inject option in "strace -h" output

* strace.c (usage): Mention inject argument of -e option.

6 years agotests: check decoding of vcpu auxstr
Masatake YAMATO [Sat, 7 Jul 2018 07:49:13 +0000 (16:49 +0900)]
tests: check decoding of vcpu auxstr

* tests/ioctl_kvm_run_common.c: Rename from ioctl_kvm_run.c.
(run_kvm): Parametrize printing of KVM_RUN ioctl with print_KVM_RUN
invocation.
(main): Invoke optional KVM_NO_CPUID_CALLBACK macro when the old kernel
behavior is detected.
* tests/Makefile.am (EXTRA_DIST): Add ioctl_kvm_run_common.c.
* tests/ioctl_kvm_run.c: New file, a wrapper around
ioctl_kvm_run_common.c.
* ioctl_kvm_run_auxstr_vcpu.c: Likewise.
* tests/gen_tests.in (ioctl_kvm_run_auxstr_vcpu): New test.
* tests/pure_executables.list: Add ioctl_kvm_run_auxstr_vcpu.
* tests/.gitignore: Likewise.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agostrace.1.in: document -e kvm=vcpu option
Masatake YAMATO [Sat, 7 Jul 2018 07:49:12 +0000 (16:49 +0900)]
strace.1.in: document -e kvm=vcpu option

* strace.1.in (-e kvm=vcpu): Document new option.
* NEWS: Mention -e kvm=vcpu option.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agokvm: attach the exit reason of vcpu as auxstr to KVM_RUN output
Masatake YAMATO [Sat, 7 Jul 2018 07:49:11 +0000 (16:49 +0900)]
kvm: attach the exit reason of vcpu as auxstr to KVM_RUN output

In KVM, a virtual machine implementation like Qemu can access a vcpu
via ioctl.  KVM_RUN is an ioctl command to enter vcpu.  The command
returns control for various reasons: needs of device emulation or
consuming time slices are the typical ones.  The vmi takes a different
action for the reason.

We, strace users, want to know the reason to understand kvm.  This
change prints the reason as auxstr if "-e kvm=vcpu" option is given,
and if strace runs on Linux 4.16.0 or higher, which includes commit
e46b469278a59781f9b25ff608af84892963821b, "kvm: embed vcpu id to dentry
of vcpu anon inode."

The way to get the reason is a bit complicated because the ioctl does
not return it to the userspace directly.  Instead, the vmi and kvm
communicate via an area of the process virtual memory where the fd of
vcpu is mmap'ed.  strace must peek the area to know the reason.

The change does three things: (1) recording the area for the given vcpu
when the target calls VCPU_CREATE to vcpu_info_list per tcb data field,
(2) verifying the data recorded in vcpu_info_list before doing (3), and
(3) decoding the exit reason field of the area.

The change is complicated because there is a case that strace
does not have a chance to do (1) if -p option is used.
In this case, vcpu_info data created in the step (2).

The area has more fields than "exit reason",
dumping them may be implemented in the future.

* defs.h (struct tcb) [HAVE_LINUX_KVM_H]: Add vcpu_info_list field.
[HAVE_LINUX_KVM_H]: (kvm_run_structure_decoder_init,
kvm_vcpu_info_free): New declarations.
* strace.c (usage): Add "kvm" as a new expression for -e option.
(droptcb): Call kvm_vcpu_info_free.
* filter_qualify.c (qualify_kvm): New function calling
kvm_run_structure_decoder_init to enable for attaching the exit
reason to auxstr.
(qual_options): Add "kvm" as an entry.
* xlat/kvm_exit_reason.in: New file.
* kvm.c: Include xmalloc.h and mmap_cache.h.
(dump_kvm_run_structure): New static variable.
(kvm_run_structure_decoder_init): New function.
(vcpu_info): New struct definition representing the 3-tuple: vcpu file
descriptor, id of the vcpu, and mmap'ed entry.
(vcpu_find, vcpu_alloc, vcpu_register, vcpu_getinfo,
kvm_vcpu_info_free): New functions to access tcb's vcpu_info_list
field and vcpu_info data type.
(is_map_for_file, map_len): New helper functions.
(kvm_ioclt_run_attach_auxstr, kvm_ioctl_decode_run): New functions
decoding vcpu exit reason and attaching the decoded data to auxstr
field of tcb.
(kvm_ioctl_create_vcpu): Call vcpu_register to make an entry mapping
a file descriptor and the vcpu id associated with the fd.
(kvm_ioctl): Call kvm_ioctl_decode_run.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agommap_cache: add customizable search function
Masatake YAMATO [Sat, 7 Jul 2018 07:49:10 +0000 (16:49 +0900)]
mmap_cache: add customizable search function

* mmap_cache.c (mmap_cache_search_custom): New function.
* mmap_cache.h (mmap_cache_search_fn): New type.
(mmap_cache_search_custom): New function prototype.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
6 years agotests: check verbose decoding of kvm ioctl
Pierre Marsais [Thu, 28 Jun 2018 02:37:45 +0000 (03:37 +0100)]
tests: check verbose decoding of kvm ioctl

* tests/ioctl_kvm_run-v.c: New file.
* tests/ioctl_kvm_run.c: Include xlat.h and xlat/kvm_cpuid_flags.h.
(print_kvm_segment, print_kvm_sregs, print_kvm_regs): New functions.
(run_kvm): Use them.
(print_cpuid_ioctl) [VERBOSE]: Print verbose ioctl decoding.
* tests/gen_tests.in (ioctl_kvm_run-v): New entry.
* tests/pure_executables.list: Add ioctl_kvm_run-v.
* tests/.gitignore: Likewise.

Signed-off-by: Pierre Marsais <pierre.marsais@lse.epita.fr>
6 years agotests: check decoding of kvm ioctls related to struct kvm_cpuid2
Pierre Marsais [Thu, 28 Jun 2018 02:37:44 +0000 (03:37 +0100)]
tests: check decoding of kvm ioctls related to struct kvm_cpuid2

* tests/ioctl_kvm_run.c [!HAVE_STRUCT_KVM_CPUID2]: Skip the test.
(KVM_MAX_CPUID_ENTRIES): New macro.
(print_cpuid_ioctl): New function.
(main): Add tests for cpuid related ioctl.

Signed-off-by: Pierre Marsais <pierre.marsais@lse.epita.fr>
6 years agokvm: decode the argument of KVM_SET_CPUID2 and KVM_GET_*_CPUID ioctl commands
Pierre Marsais [Thu, 28 Jun 2018 02:37:43 +0000 (03:37 +0100)]
kvm: decode the argument of KVM_SET_CPUID2 and KVM_GET_*_CPUID ioctl commands

* configure.ac (AC_CHECK_TYPES): Add struct kvm_cpuid2.
* xlat/kvm_cpuid_flags.in: New file.
* kvm.c [HAVE_STRUCT_KVM_CPUID2]: Include "xlat/kvm_cpuid_flags.h".
[HAVE_STRUCT_KVM_CPUID2] (print_kvm_cpuid_entry, kvm_ioctl_decode_cpuid2):
New functions.
(kvm_ioctl) [HAVE_STRUCT_KVM_CPUID2]: Use kvm_ioctl_decode_cpuid2.
* NEWS: Mention this improvement.

Signed-off-by: Pierre Marsais <pierre.marsais@lse.epita.fr>
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agonet: fix a typo in print_tpacket_stats
Zhibin Li [Thu, 5 Jul 2018 14:43:25 +0000 (22:43 +0800)]
net: fix a typo in print_tpacket_stats

6 years agotests: fix race condition in aio.test
Dmitry V. Levin [Tue, 3 Jul 2018 16:51:49 +0000 (16:51 +0000)]
tests: fix race condition in aio.test

* tests/aio.c (main): Print aio_key fields before the io_submit syscall
invocation to avoid races with the kernel.

6 years agoci: robustify network-related operations
Dmitry V. Levin [Tue, 3 Jul 2018 13:23:19 +0000 (13:23 +0000)]
ci: robustify network-related operations

Reduce false positives by wrapping network-related operations into a loop.

* ci/install-dependencies.sh (retry_if_failed): New function.
Use it to invoke apt-get update, apt-get install, git clone,
add-apt-repository, and pip install.

6 years ago.gitignore: ignore linux/linux
Zhibin Li [Wed, 27 Jun 2018 16:02:37 +0000 (00:02 +0800)]
.gitignore: ignore linux/linux

Ignore directory linux/linux created by workaround from commit
v4.23-11-g15003d4.

* .gitignore: Add /linux/linux.

6 years agoFix build on systems where libc relies on <linux/signal.h>
Dmitry V. Levin [Mon, 18 Jun 2018 22:59:38 +0000 (22:59 +0000)]
Fix build on systems where libc relies on <linux/signal.h>

Commit v4.23~10 has broken the build with Android's libc because it
relies on the UAPI headers (such as <linux/signal.h>) to define various
types, rather than copying them into the libc headers (such as <signal.h>)
like most other Linux C libraries.

* linux/linux/signal.h: Rename to linux/signal.h.in.
* Makefile.am (strace_SOURCES): Remove linux/linux/signal.h.
(EXTRA_DIST): Add linux/signal.h.in.
(DISTCLEANFILES): Add linux/linux/signal.h.
* configure.ac (AC_CACHE_CHECK): Check whether <linux/signal.h>
can be used along with <signal.h>, install linux/linux/signal.h
workaround if they cannot be used together.

Reported-by: Elliott Hughes <enh@google.com>
Closes: https://github.com/strace/strace/issues/72
6 years agoxlat: add AUDIT_INTEGRITY_EVM_XATTR to nl_audit_types
Eugene Syromyatnikov [Mon, 18 Jun 2018 16:51:02 +0000 (18:51 +0200)]
xlat: add AUDIT_INTEGRITY_EVM_XATTR to nl_audit_types

* xlat/nl_audit_types.in (AUDIT_INTEGRITY_EVM_XATTR): New constant,
introduced by Linux commit v4.18-rc1~100^2~9.

6 years agoxlat: add UDP_SEGMENT to sock_udp_options
Eugene Syromyatnikov [Mon, 18 Jun 2018 16:37:55 +0000 (18:37 +0200)]
xlat: add UDP_SEGMENT to sock_udp_options

* xlat/sock_udp_options.in (UDP_SEGMENT): New constant, introduced by
Linux commit v4.18-rc1~114^2~377^2~8.

6 years agoRemove redundant range initializers in syscallent files
Dmitry V. Levin [Sun, 17 Jun 2018 23:02:51 +0000 (23:02 +0000)]
Remove redundant range initializers in syscallent files

* linux/aarch64/syscallent.h: Remove redundant range initializers.
* linux/x32/syscallent.h: Likewise.

6 years agox32: move rseq syscall entry to a suitable place
Chen Jingpiao [Sun, 17 Jun 2018 14:45:46 +0000 (22:45 +0800)]
x32: move rseq syscall entry to a suitable place

As rseq syscall is not x32-specific, move it after the previous one
that is not x32-specific.  Fix the unused syscall number range.

* linux/x32/syscallent.h ([334]): Move it after [333].
([335 ... 511]): Update the range.

6 years agoaio: make iocb array output more strucutred
Eugene Syromyatnikov [Sun, 17 Jun 2018 21:34:37 +0000 (23:34 +0200)]
aio: make iocb array output more strucutred

* aio.c (print_iocb): Print curly brackets.
(print_iocbp): Do not print curly brackets.
* tests/aio.c: Update expected output.

6 years agoaio: print IOCB_CMD_* using xlat
Eugene Syromyatnikov [Sun, 17 Jun 2018 21:15:51 +0000 (23:15 +0200)]
aio: print IOCB_CMD_* using xlat

* xlat/aio_cmds.in: New file.
* aio.c (tprint_lio_opcode): Change array of structs "cmds" to array of
enums "subs", use printxval_indexn_ex for printing cmd, return sub type
using subs array.

6 years agoxlat/sock_tcp_options.in: add #value_indexed
Eugene Syromyatnikov [Sun, 17 Jun 2018 21:35:38 +0000 (23:35 +0200)]
xlat/sock_tcp_options.in: add #value_indexed

* xlat/sock_tcp_options.in: Add #value_indexed, provide fallback
definitions.
* net.c (print_sockopt_fd_level_name) <case SOL_TCP>: Use
printxval_index instead of printxval.

6 years agoxlat/sock_tcp_options.in: update
Eugene Syromyatnikov [Sun, 17 Jun 2018 08:49:02 +0000 (10:49 +0200)]
xlat/sock_tcp_options.in: update

* xlat/sock_tcp_options.in (TCP_ZEROCOPY_RECEIVE): New constant,
introduced by Linux commit v4.18-rc1~114^2~351^2~1.
(TCP_INQ): New constant, introduced by Linux commit v4.18-rc1~114^2~330.

6 years agoxlat/sigtrap_codes.in: add TRAP_UNK
Eugene Syromyatnikov [Fri, 15 Jun 2018 13:35:37 +0000 (15:35 +0200)]
xlat/sigtrap_codes.in: add TRAP_UNK

* xlat/sigtrap_codes.in (TRAP_UNK): New constant, introduced by Linux
commit v4.17-rc1-15-gdb78e6a.

6 years agoPost-release administrivia
Dmitry V. Levin [Fri, 15 Jun 2018 17:52:14 +0000 (17:52 +0000)]
Post-release administrivia

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

6 years agoPrepare for 4.23 release v4.23
Dmitry V. Levin [Thu, 14 Jun 2018 11:00:00 +0000 (11:00 +0000)]
Prepare for 4.23 release

* NEWS: Update for 4.23 release.

6 years agoUpdate copyright headers
Dmitry V. Levin [Thu, 14 Jun 2018 11:00:00 +0000 (11:00 +0000)]
Update copyright headers

Headers updated automatically using maint/update_copyright_years.sh
script.

6 years agotests: add missing copyright headers
Dmitry V. Levin [Thu, 14 Jun 2018 11:00:00 +0000 (11:00 +0000)]
tests: add missing copyright headers

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

6 years agomaint: document release procedure
Dmitry V. Levin [Thu, 14 Jun 2018 11:00:00 +0000 (11:00 +0000)]
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.

6 years agomaint: prepend contributor names in tag messages with an asterisk
Dmitry V. Levin [Thu, 14 Jun 2018 11:00:00 +0000 (11:00 +0000)]
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.

6 years agoUpdate NEWS
Eugene Syromyatnikov [Thu, 14 Jun 2018 09:48:20 +0000 (11:48 +0200)]
Update NEWS

6 years agoWire up rseq syscall
Dmitry V. Levin [Wed, 13 Jun 2018 23:51:31 +0000 (23:51 +0000)]
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.

6 years agotests: check decoding of io_pgetevents syscall
Eugene Syromyatnikov [Wed, 13 Jun 2018 15:38:07 +0000 (17:38 +0200)]
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>
6 years agoImplement io_pgetevents syscall decoding
Eugene Syromyatnikov [Thu, 7 Jun 2018 17:57:28 +0000 (19:57 +0200)]
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>
6 years agotravis: re-enable testing with the latest mainline kernel headers
Dmitry V. Levin [Tue, 12 Jun 2018 12:27:22 +0000 (12:27 +0000)]
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.

6 years agoWorkaround incompatibility between <linux/signal.h> and libc headers
Dmitry V. Levin [Tue, 12 Jun 2018 12:27:22 +0000 (12:27 +0000)]
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.

6 years agotests: add personality specification syntax checks
Eugene Syromyatnikov [Sun, 20 May 2018 01:31:11 +0000 (03:31 +0200)]
tests: add personality specification syntax checks

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

6 years agotests: add basic checks for personality designation support
Eugene Syromyatnikov [Sun, 20 May 2018 01:14:08 +0000 (03:14 +0200)]
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.

6 years agoAdd support for personality designation in regex qualifications
Eugene Syromyatnikov [Sun, 11 Feb 2018 04:24:29 +0000 (05:24 +0100)]
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

6 years agoAdd support for personality designation in syscall qualifications
Eugene Syromyatnikov [Sun, 11 Feb 2018 04:04:05 +0000 (05:04 +0100)]
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
6 years agotests: add basic checks for inject=SET:syscall= expression syntax
Eugene Syromyatnikov [Thu, 7 Jun 2018 17:41:49 +0000 (19:41 +0200)]
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.

6 years agoImplement injection of syscalls with no side effects as an alternative to -1
Eugene Syromyatnikov [Thu, 1 Feb 2018 12:51:17 +0000 (13:51 +0100)]
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
6 years agoia64: remove legacy i386 entries from the syscall entry table
Dmitry V. Levin [Wed, 13 Jun 2018 15:05:09 +0000 (15:05 +0000)]
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"

6 years agolinux: set error flags in arch_set_error on POWER and Alpha
Eugene Syromyatnikov [Sun, 10 Jun 2018 12:25:37 +0000 (14:25 +0200)]
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"
6 years agotests: check decoding of IFLA_LINKINFO netlink attribute
Eugene Syromyatnikov [Sun, 10 Jun 2018 10:54:08 +0000 (12:54 +0200)]
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>
6 years agotests: add print_quoted_stringn to print string with a size limit
Eugene Syromyatnikov [Sun, 10 Jun 2018 10:52:52 +0000 (12:52 +0200)]
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.

6 years agotests: add fallback_func argument to TEST_NESTED_NLATTR_OBJECT_EX_
Eugene Syromyatnikov [Sun, 10 Jun 2018 10:49:20 +0000 (12:49 +0200)]
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.

6 years agotests/test_nlattr.h: add ability to provide additional nlattr payload
Eugene Syromyatnikov [Sun, 10 Jun 2018 10:46:19 +0000 (12:46 +0200)]
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_.

6 years agortnl_link: decode struct ifla_bridge_id unconditionally
Eugene Syromyatnikov [Sun, 10 Jun 2018 10:28:11 +0000 (12:28 +0200)]
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.

6 years agonlattr: specify size for ethernet protocol
Eugene Syromyatnikov [Sun, 10 Jun 2018 10:43:33 +0000 (12:43 +0200)]
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"
6 years agortnl_link: use ARRSZ_PAIR where appropriate
Eugene Syromyatnikov [Sun, 10 Jun 2018 10:39:11 +0000 (12:39 +0200)]
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.

6 years agortnl_link: fix incorrect variable names in ARRAY_SIZE arguments
Eugene Syromyatnikov [Sun, 10 Jun 2018 10:29:58 +0000 (12:29 +0200)]
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"
6 years agomips: add missing pure flag to syscall entries
Eugene Syromyatnikov [Mon, 11 Jun 2018 05:34:42 +0000 (07:34 +0200)]
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"

6 years agomips: add missing "never fails" flag to getpgrp syscall entries
Eugene Syromyatnikov [Mon, 11 Jun 2018 05:32:11 +0000 (07:32 +0200)]
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"

6 years agoUpdate NEWS
Eugene Syromyatnikov [Fri, 1 Jun 2018 17:00:16 +0000 (19:00 +0200)]
Update NEWS

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoxlat: describe IPV4_DEVCONF_* weirdness
Eugene Syromyatnikov [Thu, 7 Jun 2018 18:02:01 +0000 (20:02 +0200)]
xlat: describe IPV4_DEVCONF_* weirdness

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

6 years agoconfigure.ac: fix the check for struct tc_sizespec on old kernel headers
Dmitry V. Levin [Thu, 7 Jun 2018 14:01:24 +0000 (14:01 +0000)]
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.

6 years agotravis: use kernel headers from v4.17
Dmitry V. Levin [Wed, 6 Jun 2018 15:10:37 +0000 (15:10 +0000)]
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.

6 years agotests: check decoding of IFLA_AF_SPEC netlink attribute
Eugene Syromyatnikov [Fri, 25 May 2018 03:14:18 +0000 (05:14 +0200)]
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.

6 years agotests: add TEST_NESTED_NLATTR_ARRAY_EX to test_nlattr.h
Eugene Syromyatnikov [Fri, 25 May 2018 03:09:53 +0000 (05:09 +0200)]
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>
6 years agotests: pass index to print_elem_ callback in TEST_NLATTR_NESTED_ARRAY
Eugene Syromyatnikov [Fri, 25 May 2018 03:08:04 +0000 (05:08 +0200)]
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.

6 years agotests: move common ifinfomsg boilerplate into a separate header
Eugene Syromyatnikov [Thu, 24 May 2018 23:49:08 +0000 (01:49 +0200)]
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.

6 years agortnl_link: implement IFLA_INFO_DATA for tun devices
Eugene Syromyatnikov [Fri, 18 May 2018 16:08:25 +0000 (18:08 +0200)]
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".

6 years agortnl_link: implement IFLA_INFO_DATA for bridges
Eugene Syromyatnikov [Fri, 18 May 2018 15:47:05 +0000 (17:47 +0200)]
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.

6 years agortnl_link: implement IFLA_INFO_XSTATS decoding
Eugene Syromyatnikov [Fri, 18 May 2018 15:45:33 +0000 (17:45 +0200)]
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.

6 years agortnl_link: add basic IFLA_INFO_* handling
Eugene Syromyatnikov [Fri, 18 May 2018 15:42:18 +0000 (17:42 +0200)]
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.

6 years agortnl_link: decode IFLA_AF_SPEC
Eugene Syromyatnikov [Mon, 7 May 2018 06:45:29 +0000 (08:45 +0200)]
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.

6 years agonlattr: add size check to decode_nla_xval and decode_nla_flags
Eugene Syromyatnikov [Wed, 23 May 2018 16:50:48 +0000 (18:50 +0200)]
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>
6 years agonlattr: add UID/GID netlink attribute decoders
Eugene Syromyatnikov [Fri, 18 May 2018 16:06:38 +0000 (18:06 +0200)]
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.

6 years agonlattr: add unsigned int decoders that print in hex form
Eugene Syromyatnikov [Fri, 18 May 2018 15:38:43 +0000 (17:38 +0200)]
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.

6 years agonlattr: add ethernet protocol decoder
Eugene Syromyatnikov [Fri, 18 May 2018 15:37:51 +0000 (17:37 +0200)]
nlattr: add ethernet protocol decoder

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

6 years agonlattr: add value processing support for xlat/flags nlattr decoders
Eugene Syromyatnikov [Fri, 18 May 2018 15:36:00 +0000 (17:36 +0200)]
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.

6 years agonlattr: introduce decode_nla_flags
Eugene Syromyatnikov [Mon, 7 May 2018 06:40:02 +0000 (08:40 +0200)]
nlattr: introduce decode_nla_flags

Similar to decode_nla_xval.

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

6 years agonlattr: add ability to pass nla_type to decoder in decode_nlattr
Eugene Syromyatnikov [Mon, 7 May 2018 06:28:38 +0000 (08:28 +0200)]
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.

6 years agotests: use STRINGIFY instead of _STR
Dmitry V. Levin [Wed, 6 Jun 2018 10:10:43 +0000 (10:10 +0000)]
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.

6 years agotests: check decoding of IFLA_EVENT netlink attribute
Eugene Syromyatnikov [Fri, 25 May 2018 12:36:35 +0000 (14:36 +0200)]
tests: check decoding of IFLA_EVENT netlink attribute

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

6 years agoxlat: handle xlat constants that are not identifiers
Dmitry V. Levin [Tue, 5 Jun 2018 11:04:09 +0000 (11:04 +0000)]
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.