]> granicus.if.org Git - strace/log
strace
6 years agobpf_attr: add more size checks
Dmitry V. Levin [Wed, 4 Apr 2018 14:50:07 +0000 (14:50 +0000)]
bpf_attr: add more size checks

* bpf_attr.h: Add expected sizes of structures.
* gen_bpf_attr_check.sh: Check them.

6 years agotests: check bpf syscall decoder unconditionally
Dmitry V. Levin [Tue, 3 Apr 2018 00:35:39 +0000 (00:35 +0000)]
tests: check bpf syscall decoder unconditionally

* configure.ac (AC_CHECK_HEADERS([linux/bpf.h])): Check for
struct bpf_insn.
* tests/bpf.c: Remove the test guard, include "scno.h", "bpf_attr.h",
"xlat.h", and "xlat/bpf_commands.h".  Conditionalize inclusion of
<linux/bpf.h> on HAVE_LINUX_BPF_H.  Remove all HAVE_UNION_* checks.
(BPF_ATTR_DATA_FIELD): New macro.
(bpf_attr_data): New union.  Note that it is larger than modern
union bpf_attr, this allows more checks to be implemented in the future.
(sizeof_attr, test_bpf_): Replace union bpf_attr with
union bpf_attr_data.
(DEF_BPF_INIT_FIRST): Replace union bpf_attr with the corresponding
structure.
(init_BPF_MAP_CREATE_attr): Replace union bpf_attr with
struct BPF_MAP_CREATE_struct.
(init_BPF_MAP_LOOKUP_ELEM_attr): Replace union bpf_attr with
struct BPF_MAP_LOOKUP_ELEM_struct.
(init_BPF_MAP_UPDATE_ELEM_attr): Replace union bpf_attr with
struct BPF_MAP_UPDATE_ELEM_struct.
(init_BPF_MAP_DELETE_ELEM_attr): Replace union bpf_attr with
struct BPF_MAP_DELETE_ELEM_struct.
(init_BPF_MAP_GET_NEXT_KEY_attr): Replace union bpf_attr with
struct BPF_MAP_GET_NEXT_KEY_struct.
(init_BPF_PROG_LOAD_attr): Replace union bpf_attr with
struct BPF_PROG_LOAD_struct.
(init_BPF_OBJ_PIN_attr): Replace union bpf_attr with
struct BPF_OBJ_PIN_struct.
(init_BPF_PROG_ATTACH_attr): Replace union bpf_attr with
struct BPF_PROG_ATTACH_struct.
(init_BPF_PROG_DETACH_attr): Replace union bpf_attr with
struct BPF_PROG_DETACH_struct.
(init_BPF_PROG_GET_NEXT_ID_attr): Replace union bpf_attr with
struct BPF_PROG_GET_NEXT_ID_struct.
(sample_BPF_PROG_TEST_RUN_attr): Change type from union bpf_attr to
struct BPF_PROG_TEST_RUN_struct, all users updated.
(sample_BPF_OBJ_GET_INFO_BY_FD_attr): Change type from union bpf_attr
to struct BPF_OBJ_GET_INFO_BY_FD_struct, all users updated.

6 years agoCheck that structures defined by bpf_attr.h match system union bpf_attr
Dmitry V. Levin [Mon, 2 Apr 2018 19:10:55 +0000 (19:10 +0000)]
Check that structures defined by bpf_attr.h match system union bpf_attr

* gen_bpf_attr_check.sh: New file.
* Makefile.am (EXTRA_DIST): Add it.
(strace_SOURCES_check): New variable.
(strace_SOURCES): Add $(strace_SOURCES_check).
(BUILT_SOURCES, CLEANFILES): Add bpf_attr_check.c.
(bpf_attr_check.c): New rule.
(sys_func_h_sources): New variable.
(sys_func.h): Use it instead of strace_SOURCES_c.
* .gitignore: Add /bpf_attr_check.c.

6 years agobuild: generate all union bpf_attr checks automatically
Dmitry V. Levin [Mon, 2 Apr 2018 15:56:31 +0000 (15:56 +0000)]
build: generate all union bpf_attr checks automatically

Rather than list by hand some members of union bpf_attr that we check
for availability, automatically list all members of union bpf_attr we
are aware of.

* m4/gen_bpf_attr_m4.sh: New file.
* bootstrap: Invoke it.
* configure.ac (AC_CHECK_HEADERS([linux/bpf.h])): Use st_BPF_ATTR.
* m4/.gitignore: New file.

6 years agobpf: move definitions of bpf_attr structures to separate header file
Dmitry V. Levin [Mon, 2 Apr 2018 13:12:57 +0000 (13:12 +0000)]
bpf: move definitions of bpf_attr structures to separate header file

This also unifies decoders of bpf commands by moving common code
to new macros.

* bpf_attr.h: New file.
* Makefile.am (strace_SOURCES): Add it.
* bpf.c: Include it.
(DEF_BPF_CMD_DECODER): Rename to BEGIN_BPF_CMD_DECODER, add code common
to all decoders.  All users updated.
(END_BPF_CMD_DECODER): New macro, add its invocation to all users
of BEGIN_BPF_CMD_DECODER macro.

6 years agoIntroduce print_big_u64_addr
Eugene Syromyatnikov [Mon, 26 Mar 2018 04:13:23 +0000 (06:13 +0200)]
Introduce print_big_u64_addr

This is needed at least for bpf, btrfs, and sg_io, as 32-bit tracer
cannot figure out whether the kernel is 32-bit or 64-bit,
and its behaviour differs when it handles u64 as a pointer.

* linux/arch_defs_.h [!CAN_ARCH_BE_COMPAT_ON_64BIT_KERNEL]
(CAN_ARCH_BE_COMPAT_ON_64BIT_KERNEL): New definition, default to 0.
* linux/arm/arch_defs_.h (CAN_ARCH_BE_COMPAT_ON_64BIT_KERNEL):
Define to 1.
* linux/i386/arch_defs_.h (CAN_ARCH_BE_COMPAT_ON_64BIT_KERNEL):
Likewise.
* linux/mips/arch_defs_.h (CAN_ARCH_BE_COMPAT_ON_64BIT_KERNEL):
Likewise.
* linux/powerpc/arch_defs_.h (CAN_ARCH_BE_COMPAT_ON_64BIT_KERNEL):
Likewise.
* linux/riscv/arch_defs_.h (CAN_ARCH_BE_COMPAT_ON_64BIT_KERNEL):
Likewise.
* linux/s390/arch_defs_.h (CAN_ARCH_BE_COMPAT_ON_64BIT_KERNEL):
Likewise.
* linux/sparc/arch_defs_.h (CAN_ARCH_BE_COMPAT_ON_64BIT_KERNEL):
Likewise.
* linux/tile/arch_defs_.h (CAN_ARCH_BE_COMPAT_ON_64BIT_KERNEL):
Likewise.
* defs.h (print_big_u64_addr): New function.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agodefs.h: introduce max_addr and max_kaddr macros
Eugene Syromyatnikov [Sun, 25 Mar 2018 15:24:49 +0000 (17:24 +0200)]
defs.h: introduce max_addr and max_kaddr macros

In order to check an address against maximum addr/kaddr value
for the current personality.

* degs.h (max_addr, max_kaddr): New macros.

6 years agoIntroduce static_assert
Dmitry V. Levin [Tue, 3 Apr 2018 22:52:54 +0000 (22:52 +0000)]
Introduce static_assert

We are going to use static_assert provided by <assert.h> or,
if it doesn't work, our cheap imitation that doesn't display
the message specified as the second argument of static_assert.

* configure.ac (AC_CACHE_CHECK): Check for static_assert in <assert.h>,
define HAVE_STATIC_ASSERT if it is available.
* static_assert.h: New file.
* Makefile.am (strace_SOURCES): Add it.

6 years agotests: forward SIZEOF_KERNEL_LONG_T and SIZEOF_LONG to C preprocessor
Dmitry V. Levin [Tue, 3 Apr 2018 08:08:09 +0000 (08:08 +0000)]
tests: forward SIZEOF_KERNEL_LONG_T and SIZEOF_LONG to C preprocessor

* tests/Makefile.am (AM_CPPFLAGS): Forward SIZEOF_KERNEL_LONG_T
and SIZEOF_LONG as TESTS_SIZEOF_KERNEL_LONG_T and TESTS_SIZEOF_LONG.
* tests/tests.h [TESTS_SIZEOF_KERNEL_LONG_T] (SIZEOF_KERNEL_LONG_T):
Redefine to TESTS_SIZEOF_KERNEL_LONG_T.
[TESTS_SIZEOF_LONG] (SIZEOF_LONG): Redefine to TESTS_SIZEOF_LONG.

Complements: v4.21~5 ("Export SIZEOF_LONG and SIZEOF_KERNEL_LONG_T to tests")

6 years agotests/tests.h: fix indentation
Dmitry V. Levin [Tue, 3 Apr 2018 08:08:09 +0000 (08:08 +0000)]
tests/tests.h: fix indentation

6 years agotests: fix potential errno clobbering in netlink_kobject_uevent.test
Dmitry V. Levin [Wed, 4 Apr 2018 12:24:19 +0000 (12:24 +0000)]
tests: fix potential errno clobbering in netlink_kobject_uevent.test

* tests/netlink_kobject_uevent.c (errstr): New variable.
(sys_send): New function.
(main): Use them.

6 years agoRestore kvm ioctl definitions for aarch64 and mips architectures
Gleb Fotengauer-Malinovskiy [Tue, 3 Apr 2018 17:34:48 +0000 (20:34 +0300)]
Restore kvm ioctl definitions for aarch64 and mips architectures

* maint/ioctls_sym.sh: Add aarch64 and mips architectures to the list
of kvm-capable architectures.
* linux/aarch64/ioctls_arch0.h: Regenerate.
* linux/mips/ioctls_arch0.h: Regenerate.

Fixes: v4.15~92 ("Move KVM_* ioctl entries from ioctls_inc*.h to ioctls_arch*.h")
6 years agoUpdate ioctl entries from linux v4.16
Gleb Fotengauer-Malinovskiy [Tue, 3 Apr 2018 17:33:22 +0000 (20:33 +0300)]
Update ioctl entries from linux v4.16

* linux/32/ioctls_inc_align16.h: Update from linux v4.16
using ioctls_gen.sh.
* linux/32/ioctls_inc_align32.h: Likewise.
* linux/32/ioctls_inc_align64.h: Likewise.
* linux/64/ioctls_inc.h: Likewise.
* linux/x32/ioctls_inc0.h: Likewise.
* linux/arm/ioctls_arch0.h: Likewise.
* linux/i386/ioctls_arch0.h: Likewise.
* linux/powerpc/ioctls_arch0.h: Likewise.
* linux/s390/ioctls_arch0.h: Likewise.
* linux/s390x/ioctls_arch0.h: Likewise.
* linux/x86_64/ioctls_arch0.h: Likewise.
* NEWS: Mention this.

6 years agomaint: update for linux 4.16
Gleb Fotengauer-Malinovskiy [Tue, 3 Apr 2018 17:32:40 +0000 (20:32 +0300)]
maint: update for linux 4.16

* maint/ioctls_sym.sh: Add workaround for linux/ndctl.h file.
Update workaround for media/v4l2-common.h file.
(x86_list): Add KVM_GET_MSR_FEATURE_INDEX_LIST.

6 years agoutil.c: amend sprinttime_ex description a bit
Eugene Syromyatnikov [Sun, 18 Mar 2018 06:53:32 +0000 (07:53 +0100)]
util.c: amend sprinttime_ex description a bit

* util.c (sprinttime_ex): Document return value.

6 years agotests/bpf.c: add a check for NULL bpf_attr pointer
Eugene Syromyatnikov [Wed, 21 Mar 2018 18:09:52 +0000 (19:09 +0100)]
tests/bpf.c: add a check for NULL bpf_attr pointer

* tests/bpf.c (main): Add a check with 0 passed in the third argument.

6 years agobpf: print byte range for extra data
Eugene Syromyatnikov [Sat, 3 Mar 2018 02:13:35 +0000 (03:13 +0100)]
bpf: print byte range for extra data

As it could be not entirely clear what bytes are printed.

* bpf.c (decode_attr_extra_data): Print a comment about the byte range
to be printed.
* tests/bpf.c: Update expected output.

6 years agoRemove addflags
Eugene Syromyatnikov [Sat, 10 Mar 2018 04:38:10 +0000 (05:38 +0100)]
Remove addflags

It has only single user and implementation of xlat styles for it would
lead to lots of code duplication.

* defs.h (addflags): Remove declaration.
* mem.c (print_mmap_flags): Convert addflags call into printflags64 with
non-zeroeness flags check.
* xlat.c (addflags): Remove.

6 years agoAdd i18n support
Dmitry V. Levin [Sat, 1 Apr 2017 13:14:15 +0000 (13:14 +0000)]
Add i18n support

Let's make a step towards the growing strace userbase all around
the world and translate something to the language of their choice.

This change enables translation of error messages corresponding
to errno codes, making it consistent with error diagnostics of other
i18n-aware tools, e.g.

$ LANG=es_ES strace -qq -a38 -P /missing unlink /missing
unlink("/missing")                    = -1 ENOENT (No existe el fichero o el directorio)
unlink: no se puede deshacer el enlace '/missing': No existe el fichero o el directorio

* strace.c: Include <locale.h>.
(main): Invoke setlocale.
* tests/init.sh: Export LC_ALL=C.
* NEWS: Mention this enhancement.

6 years agoRemove RVAL_PRINT_ERR_VAL
Dmitry V. Levin [Thu, 29 Mar 2018 16:00:18 +0000 (16:00 +0000)]
Remove RVAL_PRINT_ERR_VAL

* defs.h (RVAL_PRINT_ERR_VAL): Remove.
* ldt.c (SYS_FUNC(modify_ldt)): Return 0.
* syscall.c (syscall_exiting_trace): When printing an error,
always print struct tcb.u_rval as if RVAL_PRINT_ERR_VAL was set.

6 years agoTreat RVAL_DECIMAL the same way as RVAL_UDECIMAL
Dmitry V. Levin [Thu, 29 Mar 2018 16:00:18 +0000 (16:00 +0000)]
Treat RVAL_DECIMAL the same way as RVAL_UDECIMAL

Assuming that syscalls may return negative values only as error codes,
always print non-error syscall return codes as unsigned.

* defs.h (RVAL_UDECIMAL): Remove.
(RVAL_DECIMAL): Rename to RVAL_UDECIMAL.
* syscall.c (syscall_exiting_trace) <case RVAL_DECIMAL>: Remove.
* clone.c (SYS_FUNC(fork)): Remove RVAL_UDECIMAL.
* lseek.c (SYS_FUNC(lseek)): Likewise.
* prctl.c (SYS_FUNC(prctl)): Likewise.
* uid.c (SYS_FUNC(getuid), SYS_FUNC(setfsuid)): Likewise.
* times.c (SYS_FUNC(times)): Always return 0.
* tests/inject-nf.c (main): Update expected output.

6 years agotests: check handling of some invalid delay injection parameters
Dmitry V. Levin [Thu, 29 Mar 2018 01:30:09 +0000 (01:30 +0000)]
tests: check handling of some invalid delay injection parameters

* tests/qual_inject-syntax.test: Check for negative delay injection
parameters.  Check for overriding delay injection parameters.

6 years agoImplement injection of negative return values
Eugene Syromyatnikov [Sun, 11 Feb 2018 23:41:36 +0000 (00:41 +0100)]
Implement injection of negative return values

Extend the range of injected return value to the maximum, print warnings
if negative injection value can be clipped in compat personality or can
inadvertently turn into a fault injection.

* defs.h (INJECT_F_ERROR): New macro.
* filter_qualify.c (parse_inject_token): Revert type of intval local
variable back to int, check INJECT_F_ERROR along with INJECT_F_RETVAL,
use strtoull to parse retval argument, print warnings in case of retval
clipping and inadvertent fault injection.
(qualify_inject_common): Set INJECT_F_ERROR instead of INJECT_F_RETVAL.
* syscall.c (tamper_with_syscall_exiting): Check inject_data.flags
to determine whether a fault injection or retval injection has to be
performed.
(syscall_exiting_trace) <case RVAL_DECIMAL>: Explicitly print
tcp->u_rval as int if current_klongsize < sizeof(tcp->u_rval).
* tests/inject-nf.c (main): Update.
* tests/inject-nf.test: Test injection of negative return values.
* tests/qual_inject-syntax.test: Remove retval=-1 check as it is now
allowed, add checks for invalid retval parameters.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoarch_defs.h: fix typo in comment
Dmitry V. Levin [Wed, 28 Mar 2018 04:29:22 +0000 (04:29 +0000)]
arch_defs.h: fix typo in comment

6 years agoMove delay interface from defs.h to delay.h
Dmitry V. Levin [Wed, 28 Mar 2018 04:29:22 +0000 (04:29 +0000)]
Move delay interface from defs.h to delay.h

* defs.h (alloc_delay_data, fill_delay_data, is_delay_timer_armed,
delay_timer_expired, arm_delay_timer, delay_tcb): Move...
* delay.h: ... to new file.
* Makefile.am (strace_SOURCES): Add it.
* filter_qualify.c: Include it.
* strace.c: Likewise.
* syscall.c: Likewise.

6 years agoTurn struct inject_data.rval into an index
Dmitry V. Levin [Wed, 28 Mar 2018 04:29:22 +0000 (04:29 +0000)]
Turn struct inject_data.rval into an index

Add one level of indirection to decrease the size of struct inject_data
as hundreds of these structures are created for each process when
injection mechanism is activated.

* retval.h: New file.
* retval.c: Likewise.
* Makefile.am (strace_SOURCES): Add them.
* defs.h (struct inject_data): Replace rval field with rval_idx.
* filter_qualify.c: Include "retval.h".
(parse_inject_token, qualify_inject_common): Initialize
struct inject_data.rval_idx using retval_new.
* syscall.c: Include "retval.h".
(tamper_with_syscall_exiting): Obtain the value that has to be injected
using retval_get.

6 years agodefs.h: update comment
Dmitry V. Levin [Tue, 27 Mar 2018 22:22:23 +0000 (22:22 +0000)]
defs.h: update comment

* defs.h (struct inject_data): Update comment about flags.

Complements: v4.21-108-gba8e768 ("Implement delay injection")

6 years agoxlat: cleanup mmap_flags.in
Eugene Syromyatnikov [Thu, 8 Mar 2018 16:55:01 +0000 (17:55 +0100)]
xlat: cleanup mmap_flags.in

* xlat/mmap_flags.in (_MAP_NEW): Remove SunOS-specific comment, add
a comment that this is a SPARC-specific constant (from
arch/sparc/include/uapi/asm/mman.h).
(MAP_GROWSUP): IA-64-specific constant (from
arch/ia64/include/uapi/asm/mman.h).
(MAP_INHERIT): Add a comment that this is a SPARC-specific constant
(from arch/sparc/include/uapi/asm/mman.h).
(_MAP_INHERIT): Add a comment that this is an Alpha-specific constant
(from arch/alpha/include/uapi/asm/mman.h).
(MAP_ANON): Remove, FreeBSD-specific constant.
(MAP_HASSEMAPHORE): Rename to...
(_MAP_HASSEMAPHORE): ...this, add a comment that this is an
Alpha-specific constant (from arch/alpha/include/uapi/asm/mman.h).
(MAP_NOSYNC, MAP_NOCORE): Remove.
(MAP_AUTOGROW, MAP_AUTORSRV, MAP_LOCAL): Add a comment that this is
an architecture-specific constant (from
arch/mips/include/uapi/asm/mman.h, arch/xtensa/include/uapi/asm/mman.h).
(_MAP_UNALIGNED): Add a comment that this is an Alpha-specific constant
(from arch/alpha/include/uapi/asm/mman.h).

6 years agotests: check decoding of kern_features syscall
Eugene Syromyatnikov [Wed, 7 Feb 2018 01:18:28 +0000 (02:18 +0100)]
tests: check decoding of kern_features syscall

* tests/kern_features.c: New file.
* tests/kern_features-fault.test: New test.
* tests/gen_tests.in (kern_features): New entry.
* tests/Makefile.am (DECODER_TESTS): Add kern_features-fault.test.
* tests/pure_executables.list: Add kern_features.
* tests/.gitignore: Likewise.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agosparc, sparc64: implement kern_features decoder
Eugene Syromyatnikov [Wed, 7 Feb 2018 01:11:54 +0000 (02:11 +0100)]
sparc, sparc64: implement kern_features decoder

* sparc.c: New file.
* Makefile.am (EXTRA_DIST): Add it.
* linux/sparc/syscallent.h ([340]): Remove NF flag, set kern_features
decoder.
* linux/sparc64/syscallent.h ([340]): Likewise.
* xlat/sparc_kern_features.in: New file.
* NEWS: Mention this enhancement.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoevdev: move mpers-specific parsers to a separate file
Dmitry V. Levin [Tue, 27 Mar 2018 01:57:00 +0000 (01:57 +0000)]
evdev: move mpers-specific parsers to a separate file

This change reduces binary code duplication on mpers platforms
and prepares evdev parsers to use printxval_bsearch.

* defs.h (evdev_ioctl, print_evdev_ff_type): New prototypes.
* evdev.c (evdev_ioctl): Un-mpersify.
(evdev_write_ioctl) Remove EVIOCSFF case, forward default case
to evdev_write_ioctl_mpers.
(decode_envelope, ff_effect_ioctl): Move to...
* evdev_mpers.c: ... new file.
* Makefile.am (strace_SOURCES): Add evdev_mpers.c.

6 years agoci: install libunwind8-dev
Eugene Syromyatnikov [Mon, 26 Mar 2018 12:55:57 +0000 (14:55 +0200)]
ci: install libunwind8-dev

While in debian/control we use libunwind-dev in Build-Depends, in case
of ci we have to be more conservative and use the name portable across
different ci implementations.

* ci/install-dependencies.sh (common_packages): Add libunwind8-dev.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agotests: check injection of return values into a "never fails" syscall
Eugene Syromyatnikov [Sun, 11 Feb 2018 23:45:37 +0000 (00:45 +0100)]
tests: check injection of return values into a "never fails" syscall

* tests/inject-nf.c: New file.
* tests/inject-nf.test: New test.
* tests/.gitignore: Add inject-nf.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(MISC_TESTS): Add inject-nf.test.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoIntroduce raw syscall invocation wrappers
Dmitry V. Levin [Fri, 23 Mar 2018 13:43:13 +0000 (13:43 +0000)]
Introduce raw syscall invocation wrappers

Unfortunately, syscall(3) provided by libc is too smart
for some of our needs.

* linux/raw_syscall.h: New file.
* linux/aarch64/raw_syscall.h: Likewise.
* linux/alpha/raw_syscall.h: Likewise.
* linux/arc/raw_syscall.h: Likewise.
* linux/arm/raw_syscall.h: Likewise.
* linux/avr32/raw_syscall.h: Likewise.
* linux/bfin/raw_syscall.h: Likewise.
* linux/hppa/raw_syscall.h: Likewise.
* linux/i386/raw_syscall.h: Likewise.
* linux/ia64/raw_syscall.h: Likewise.
* linux/m68k/raw_syscall.h: Likewise.
* linux/metag/raw_syscall.h: Likewise.
* linux/microblaze/raw_syscall.h: Likewise.
* linux/mips/raw_syscall.h: Likewise.
* linux/nios2/raw_syscall.h: Likewise.
* linux/or1k/raw_syscall.h: Likewise.
* linux/powerpc/raw_syscall.h: Likewise.
* linux/powerpc64/raw_syscall.h: Likewise.
* linux/riscv/raw_syscall.h: Likewise.
* linux/s390/raw_syscall.h: Likewise.
* linux/s390x/raw_syscall.h: Likewise.
* linux/sh/raw_syscall.h: Likewise.
* linux/sh64/raw_syscall.h: Likewise.
* linux/sparc/raw_syscall.h: Likewise.
* linux/sparc64/raw_syscall.h: Likewise.
* linux/tile/raw_syscall.h: Likewise.
* linux/x32/raw_syscall.h: Likewise.
* linux/x86_64/raw_syscall.h: Likewise.
* linux/xtensa/raw_syscall.h: Likewise.
* Makefile.am (EXTRA_DIST): Add them.

6 years agotests: fix potentially unbound variable in kernel_version_code
Dmitry V. Levin [Fri, 23 Mar 2018 13:43:13 +0000 (13:43 +0000)]
tests: fix potentially unbound variable in kernel_version_code

Fix the following use case:

$ sh -uc '. tests/init.sh; kernel_version_code 4.5'
tests/init.sh: line 242: 3: unbound variable

* tests/init.sh (kernel_version_code): Fix potentially unbound variable.

6 years agostrace: further optimize unblocking of the delay signal handler
Dmitry V. Levin [Fri, 23 Mar 2018 00:20:33 +0000 (00:20 +0000)]
strace: further optimize unblocking of the delay signal handler

Do not unblock the delay signal handler unless the delay timer is armed.

* defs.h (is_delay_timer_created): Remove.
(is_delay_timer_armed, delay_timer_expired): New prototypes.
* delay.c (delay_timer_is_armed): New static variable.
(is_delay_timer_created): Add static qualifier.
(is_delay_timer_armed, delay_timer_expired): New functions.
(arm_delay_timer): Set delay_timer_is_armed.
* strace.c (next_event): Use is_delay_timer_armed instead of
is_delay_timer_created to check whether the delay signal handler
has to be unblocked.
(timer_sighandler): Invoke delay_timer_expired.

6 years agostrace: rewrite restart error handling without sigsetjmp/siglongjmp
Dmitry V. Levin [Fri, 23 Mar 2018 00:20:33 +0000 (00:20 +0000)]
strace: rewrite restart error handling without sigsetjmp/siglongjmp

Further simplify and optimize error handling of the delay signal handler
by replacing sigsetjmp/siglongjmp mechanism with an error flag.

* strace.c: Do not include <setjmp.h>.
(restart_failed): New volatile variable.
(timer_jmp_buf): Remove.
(next_event): Cache is_delay_timer_created() return value,
remove sigsetjmp invocation, check restart_failed instead.
(timer_sighandler): Replace siglongjmp with setting restart_failed.

6 years agostrace: do not call sigsetjmp without a delay timer
Dmitry V. Levin [Fri, 23 Mar 2018 00:20:33 +0000 (00:20 +0000)]
strace: do not call sigsetjmp without a delay timer

As sigsetjmp costs a syscall, do not call it unless a delay timer
is already created and its signal handler is going to be unblocked.

* strace.c (next_event): Move sigsetjmp invocation under
is_delay_timer_created() condition.

Optimizes: v4.21-108-gba8e768 ("Implement delay injection")

6 years agotests/bpf.c: convert TEST_BPF_ macro to a function
Eugene Syromyatnikov [Tue, 20 Mar 2018 08:04:17 +0000 (09:04 +0100)]
tests/bpf.c: convert TEST_BPF_ macro to a function

As it looks like there's no compelling reason to keep it as a macro and
leaving it so quite complicates modification of the routine and makes
them error-prone.

* tests/bpf.c (TEST_BPF_): Convert it to...
(test_bpf): ...this.  Rename cmd_ to cmd, cmd_str_ to cmd_str,
init_first_ to init_first, print_first_ to print_first, init_attr_
to init_attr, print_attr_ to print_attr.
(TEST_BPF): Call test_bpf_ instead of TEST_BPF_.

6 years agotests: btrfs.c whitespace cleanup
Eugene Syromyatnikov [Wed, 21 Feb 2018 23:26:29 +0000 (00:26 +0100)]
tests: btrfs.c whitespace cleanup

* tests/btrfs.c: Add spaces after PRI* format specifiers.

6 years agotests: check delay injection
Elvira Khabirova [Sun, 18 Feb 2018 20:21:49 +0000 (23:21 +0300)]
tests: check delay injection

* tests/delay.c: New file.
* tests/delay.test: New test.
* tests/.gitignore: Add delay.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(delay_LDADD): New variable.
(MISC_TESTS): Add delay.test.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoImplement delay injection
Elvira Khabirova [Sun, 18 Feb 2018 20:21:48 +0000 (23:21 +0300)]
Implement delay injection

Add -e inject=SET:delay_enter= and -e inject=SET:delay_exit= options.

* configure.ac (AC_SEARCH_LIBS): Check for timer_create -lrt.
* delay.c: New file.
* Makefile.am (strace_SOURCES): Add it.
(strace_LDADD): Add $(timer_LIBS).
* defs.h (INJECT_F_DELAY_ENTER, INJECT_F_DELAY_EXIT,
TCB_INJECT_DELAY_EXIT, TCB_DELAYED, inject_delay_exit, syscall_delayed):
New macros.
(alloc_delay_data, fill_delay_data, is_delay_timer_created,
arm_delay_timer, delay_tcb): New prototypes.
(struct inject_data): Replace reserved field with delay_idx.
(struct tcb): Add delay_expiration_time field.
* filter_qualify.c (parse_delay_token): New function.
(parse_inject_token): Use it.
(qualify_inject_common): Initialize struct inject_opts.data.delay_idx.
* strace.c: Include <setjmp.h>
(timer_jmp_buf, timer_set): New static variables.
(timer_sighandler, restart_delayed_tcb, restart_delayed_tcbs): New
functions.
(init): Block SIGALRM, set SIGALRM handler.
(dispatch_event): Do not restart delayed syscalls.
(next_event): Unblock SIGALRM during wait4 invocation.
* syscall.c (tamper_with_syscall_entering): Arm delay timer if
INJECT_F_DELAY_ENTER injection flag is set, set TCB_INJECT_DELAY_EXIT
flag if INJECT_F_DELAY_EXIT injection flag is set.
tamper_with_syscall_exiting): Arm delay timer if inject_delay_exit.
(syscall_exiting_trace): Call tamper_with_syscall_exiting in case of
inject_delay_exit.
(syscall_exiting_finish): Clear TCB_INJECT_DELAY_EXIT flag.
* strace.1.in: Document delay injection.
* NEWS: Mention this improvement.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoDo not block handled signals in interactive mode
Dmitry V. Levin [Thu, 22 Mar 2018 06:23:25 +0000 (06:23 +0000)]
Do not block handled signals in interactive mode

Let these signals be handled asynchronously as they are acted on
only when waiting for process state changes.

* strace.c (start_set, blocked_set): Remove.
(set_sighandler): Do not update blocked_set.
(startup_attach, init, next_event): Remove all sigprocmask calls.

6 years agobpf: improve handling of various sizes of bpf_prog_attr structure
Eugene Syromyatnikov [Thu, 22 Feb 2018 02:17:04 +0000 (03:17 +0100)]
bpf: improve handling of various sizes of bpf_prog_attr structure

As program attributes have been added gradually over kernel versions,
attribute size less than expected should be printed accordingly.

* bpf.c (DEF_BPF_CMD_DECODER(BPF_PROG_LOAD)): Do not print structure
fields if their size is less than the initially introduced (in Linux
commit v3.18-rc1~52^2~1^2~7) version.  Print fields of union bpf_attr
introduced in various kernel versions when the length is big enough
(new fields were introduced in Linux commits v3.18-rc1~52^2~1^2~4,
v4.1-rc1~84^2~50, and v4.12-rc2~34^2~29^2~2).
* tests/bpf.c (print_BPF_PROG_LOAD_first): Update expected output.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agobtrfs: print struct btrfs_ioctl_logical_ino_args.reserved if non-zero
Eugene Syromyatnikov [Wed, 21 Feb 2018 23:24:16 +0000 (00:24 +0100)]
btrfs: print struct btrfs_ioctl_logical_ino_args.reserved if non-zero

* btrfs.c (btrfs_ioctl) <case BTRFS_IOC_LOGICAL_INO>: Print
struct btrfs_ioctl_logical_ino_args.reserved field if it is not zero.
* tests/btrfs.c (btrfs_test_ino_path_ioctls): Check it.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoMove is_filled and IS_ZERO to macros.h, rename IS_ZERO to IS_ARRAY_ZERO
Eugene Syromyatnikov [Wed, 21 Feb 2018 23:21:35 +0000 (00:21 +0100)]
Move is_filled and IS_ZERO to macros.h, rename IS_ZERO to IS_ARRAY_ZERO

* s390.c: Replace all IS_ZERO invocations with IS_ARRAY_ZERO.
(is_filled, IS_ZERO): Move...
* macros.h: ...here.
(is_filled): Add inline qualifier, add const qualifier to ptr.
(IS_ZERO): Rename to IS_ARRAY_ZERO, cast arr_ to "const char *".

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agompers.m4: enhance workaround for missing gnu/stubs-*.h files
Dmitry V. Levin [Tue, 20 Mar 2018 20:44:34 +0000 (20:44 +0000)]
mpers.m4: enhance workaround for missing gnu/stubs-*.h files

Make generated empty gnu stub files available for mpers_test.sh check.

* m4/mpers.m4 (st_MPERS): Add $IFLAG to CPPFLAGS for mpers_test.sh
invocation.

Complements: v4.11~223 ("mpers.m4: workaround missing gnu/stubs-*.h files")

6 years agoREADME.md: add references to binary strace packages
Eugene Syromyatnikov [Mon, 19 Mar 2018 19:49:58 +0000 (20:49 +0100)]
README.md: add references to binary strace packages

* README.md: Add references to binary strace packages in OBS,
Fedora rawhide, and Sisyphus.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoINSTALL-git.md: enhance phrasing
Eugene Syromyatnikov [Mon, 19 Mar 2018 04:49:27 +0000 (05:49 +0100)]
INSTALL-git.md: enhance phrasing

* INSTALL-git.md: Enhance phrasing.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agobootstrap: distribute README
Dmitry V. Levin [Tue, 20 Mar 2018 12:11:34 +0000 (12:11 +0000)]
bootstrap: distribute README

* bootstrap: Install README before invoking autoreconf to get README
included into distributed tarball.

Fixes: v4.21-93-g4bb8454 ("Move README to dist subdirectory")
6 years agoReplace struct timeval with struct timespec in time measurements
Dmitry V. Levin [Fri, 16 Mar 2018 00:55:58 +0000 (00:55 +0000)]
Replace struct timeval with struct timespec in time measurements

This is required to implement more precise time measurements.

* Makefile.am (strace_LDADD): Add $(clock_LIBS).
* defs.h (struct tcb): Change the type of stime, dtime, and etime fields
from struct timeval to struct timespec, all users updated.
(syscall_exiting_decode, syscall_exiting_trace, count_syscall): Change
the type of "struct timeval *" argument to "struct timespec *", all
users updated.
(tv_nz, tv_cmp, tv_float, tv_add, tv_sub, tv_div, tv_mul): Rename to
ts_nz, ts_cmp, ts_float, ts_add, ts_sub, ts_div, and ts_mul.  Change
the type of all "struct timeval *" arguments to "struct timespec *",
all users updated.
* util.c (tv_nz, tv_cmp, tv_float, tv_add, tv_sub, tv_div, tv_mul):
Rename to ts_nz, ts_cmp, ts_float, ts_add, ts_sub, ts_div, and ts_mul.
Change the type of all "struct timeval *" arguments to "struct timespec *".
* count.c (struct call_counts): Change the type of "time" field
from struct timeval to struct timespec, all users updated.
(overhead): Change type from struct timeval to struct timespec, all
users updated.
(count_syscall): Change the type of "struct timeval *" argument to
"struct timespec *".
* strace.c (printleader): Change the type of struct timeval variables
to struct timespec, call clock_gettime instead of gettimeofday.
(next_event, trace_syscall): Change the type of struct timeval variables
to struct timespec.
* syscall.c (syscall_entering_finish, syscall_exiting_decode): Call
clock_gettime instead of gettimeofday.

6 years agoFix -O option handling
Dmitry V. Levin [Tue, 20 Mar 2018 02:30:24 +0000 (02:30 +0000)]
Fix -O option handling

Fast syscalls usually take less than a microsecond of system cpu time
nowadays, making -O option almost useless.

* count.c (call_summary_pers): Avoid negative time counts.
* tests/count.test: Check it.
* NEWS: Mention it.

6 years agocount: cleanup count_syscall
Dmitry V. Levin [Fri, 16 Mar 2018 00:55:58 +0000 (00:55 +0000)]
count: cleanup count_syscall

* count.c (shortest): Remove.
(overhead): Initialize to zero.
(call_summary_pers): Remove shortest handling.
(count_syscall): Remove dead code.  The remaining code does the same
wrong calculations as before the change, though.

6 years agoprintleader: cleanup tflag handling
Dmitry V. Levin [Fri, 16 Mar 2018 00:55:58 +0000 (00:55 +0000)]
printleader: cleanup tflag handling

* strace.c (printleader): Move declarations of variables closer
to their first use.

6 years agoMove install.texi to maint subdirectory
Dmitry V. Levin [Fri, 16 Mar 2018 00:55:58 +0000 (00:55 +0000)]
Move install.texi to maint subdirectory

This file comes from GNU Autoconf and is used to generate INSTALL file.

* install.texi: Move...
* maint/install.texi: ...here.

6 years agodoc: update commit requirements
Eugene Syromyatnikov [Wed, 14 Mar 2018 19:43:47 +0000 (20:43 +0100)]
doc: update commit requirements

* README-hacking (Requirements): Enhance phrasing.
(Commit log requirements): Rename to "Commit requirements",
describe "absence of whitespace errors" requirement, add references
to the Linux kernel coding style and scripts/checkpatch.pl script.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoMove README to dist subdirectory
Eugene Syromyatnikov [Wed, 14 Mar 2018 16:53:04 +0000 (17:53 +0100)]
Move README to dist subdirectory

README was originally written for users of distribution tarballs.
Nowadays it appears to be confusing for those who build strace
using a GIT version of strace source code.

* README: Move...
* dist/README: ...here.
* bootstrap: Copy README from dist subdirectory to the toplevel
directory after successful autoreconf.

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

6 years agoREADME: synchronise with README.md
Eugene Syromyatnikov [Wed, 14 Mar 2018 16:51:13 +0000 (17:51 +0100)]
README: synchronise with README.md

* README: Extend description, reference COPYING.

6 years agopoll.c: remove special INFTIM handling
Eugene Syromyatnikov [Sat, 10 Mar 2018 05:27:21 +0000 (06:27 +0100)]
poll.c: remove special INFTIM handling

On Linux, poll syscall interprets any negative timeout value as an
infinite timeout, so no need to handle BSD-specific INFTIM.

* poll.c (SYS_FUNC(poll)): Remove INFTIM handling.

6 years agobuild: do not hardcode -lrt
Dmitry V. Levin [Wed, 14 Mar 2018 21:15:55 +0000 (21:15 +0000)]
build: do not hardcode -lrt

Depending on libc implementation, various -lrt functions can be
implemented either in -lc or in -lrt.  For example, starting with
glibc-2.17 the clock_* suite of functions is available directly in -lc.

Check whether clock_* and mq_* suites of functions are provided
by -lrt or by the main C library, do not link with -lrt unnecessarily.

This change affects only tests yet, but this is going to be
more important as soon as strace starts using clock_gettime.

* configure.ac (AC_SEARCH_LIBS): Check for clock_gettime and mq_open
in -lrt.
(AC_SUBST): Add clock_LIBS and mq_LIBS.
* tests/Makefile.am (mq_LDADD): Replace -lrt with $(mq_LIBS).
(threads_execve_LDADD, times_LDADD): Replace -lrt with $(clock_LIBS).

6 years agotests: do not link with -lrt unnecessarily
Dmitry V. Levin [Wed, 14 Mar 2018 21:15:55 +0000 (21:15 +0000)]
tests: do not link with -lrt unnecessarily

* tests/Makefile.am (attach_f_p_LDADD): Remove -lrt.
(clock_xettime_LDADD, mq_sendrecv_LDADD, mq_sendrecv_read_LDADD,
mq_sendrecv_write_LDADD): Remove.

6 years agoOptimize pid2tcb
Dmitry V. Levin [Tue, 1 Mar 2016 14:42:58 +0000 (14:42 +0000)]
Optimize pid2tcb

Introduce an internal cache of pid2tcb translations.
This can save more than 80% of CPU user time spent by strace.

Tested using the following setup:

#include <unistd.h>
#include <sys/stat.h>
#include <sys/wait.h>
int main()
{
int i;
sleep(1);
for (i = 1; i < 1000; ++i) {
pid_t pid = fork();
if (pid < 0)
return 2;
if (pid)
return wait(&i) != pid || i;
}
sleep(1);
for (i = 0; i < 10000000; ++i)
umask(0777);
return 0;
}

old$ ./set_ptracer_any ./pid2tcb >pid2tcb.wait & \
  while [ ! -s pid2tcb.wait ]; do sleep 0.1; done; \
  time -f '%Uuser %Ssystem %eelapsed %PCPU' \
  ../strace -qq -enone -esignal=none -f -p $!
5.51user 104.90system 122.45elapsed 90%CPU

new$ ./set_ptracer_any ./pid2tcb >pid2tcb.wait & \
  while [ ! -s pid2tcb.wait ]; do sleep 0.1; done; \
  time -f '%Uuser %Ssystem %eelapsed %PCPU' \
  ../strace -qq -enone -esignal=none -f -p $!
1.29user 102.78system 114.97elapsed 90%CPU

6 years agoEnable USE_SEIZE code unconditionally
Dmitry V. Levin [Tue, 13 Mar 2018 20:54:25 +0000 (20:54 +0000)]
Enable USE_SEIZE code unconditionally

It is by no means an experimental code.

* defs.h (USE_SEIZE): Remove.
* strace.c [!USE_SEIZE]: Remove.

6 years agoci: clone musl from the local server
Dmitry V. Levin [Tue, 13 Mar 2018 15:12:14 +0000 (15:12 +0000)]
ci: clone musl from the local server

Assume that strace project on the local server contains an appropriate
musl repository, use this repository instead of hardcoded github
location.

* ci/install-dependencies.sh (clone_repo): Use local server by default.
(musl-gcc): Un-hardcode the location of musl repository.

6 years agoci: refactor cloning of additional repositories
Dmitry V. Levin [Tue, 13 Mar 2018 15:12:14 +0000 (15:12 +0000)]
ci: refactor cloning of additional repositories

* ci/install-dependencies.sh (clone_repo): New function.
Use it instead of direct invocations of git clone.

6 years agoci: extend error diagnostics when configure invocation fails
Dmitry V. Levin [Tue, 13 Mar 2018 15:12:14 +0000 (15:12 +0000)]
ci: extend error diagnostics when configure invocation fails

* ci/run-build-and-tests.sh: Include $CC -dumpspecs output in addition
to config.log when ./configure fails.

6 years agoci: rename travis-build.sh and travis-install.sh scripts
Dmitry V. Levin [Tue, 13 Mar 2018 13:19:02 +0000 (13:19 +0000)]
ci: rename travis-build.sh and travis-install.sh scripts

* travis-build.sh: Rename to ci/run-build-and-tests.sh, all callers
updated.
* travis-install.sh: Rename to ci/install-dependencies.sh, all callers
updated.

6 years agotests: extend ioctl.test libc protection to -y output
Dmitry V. Levin [Tue, 13 Mar 2018 01:53:04 +0000 (01:53 +0000)]
tests: extend ioctl.test libc protection to -y output

* tests/ioctl.test: Extend the filter of ioctl calls with standard
descriptor arguments to -y output.

6 years agoptp.c: print field names and use macros form print_fields.h
Harsha Sharma [Sat, 10 Mar 2018 06:21:59 +0000 (11:51 +0530)]
ptp.c: print field names and use macros form print_fields.h

* ptp.c: Include "print_fields.h".
(ptp_ioctl): Print field names with field values for PTP_PEROUT_REQUEST,
use macros from print_fields.h.

6 years agotests: add check for decoding of netfilter subsystem
Chen Jingpiao [Sun, 11 Mar 2018 12:14:57 +0000 (20:14 +0800)]
tests: add check for decoding of netfilter subsystem

* tests/netlink_netfilter.c(test_nfgenmsg): Add check for decoding
of netfilter subsystem.

6 years agonfnetlink: introduce generic netfilter subsystem decoder
Chen Jingpiao [Sun, 11 Mar 2018 12:14:56 +0000 (20:14 +0800)]
nfnetlink: introduce generic netfilter subsystem decoder

* netlink_netfilter.c: Include "nlattr.h".
(decode_netlink_netfilter): Call decode_nlattr.

6 years agoMove nl_netfilter_msg_types definition from netlink.c to netlink_netfilter.c
Chen Jingpiao [Sat, 10 Mar 2018 01:44:35 +0000 (09:44 +0800)]
Move nl_netfilter_msg_types definition from netlink.c to netlink_netfilter.c

The side effect of #include "xlat/nl_netfilter_msg_types.h" is
NFNL_MSG_BATCH_* constants properly defined in that header file.
While netlink.c does not use these constants itself,
netlink_netfilter.c is going to need them soon.

* defs.h (nl_netfilter_msg_types): New xlat prototype.
* netlink.c: Move inclusion of "xlat/nl_netfilter_msg_types.h" ...
* netlink_netfilter.c: ... here.

6 years agotests: add check for NETLINK_NETFILTER parser
Chen Jingpiao [Thu, 8 Mar 2018 14:53:45 +0000 (22:53 +0800)]
tests: add check for NETLINK_NETFILTER parser

* tests/netlink_netfilter.c: Include <netinet/in.h>, <arpa/inet.h>
and <linux/netfilter/nf_tables.h>.
Replace "netlink.h" with "test_netlink.h".
(NFNL_SUBSYS_NFTABLES, NFT_MSG_NEWTABLE): New macros.
(test_nlmsg_done, test_nfgenmsg): New functions.
(main): Use them.

6 years agonetlink: introduce NETLINK_NETFILTER parser
Chen Jingpiao [Thu, 8 Mar 2018 14:53:44 +0000 (22:53 +0800)]
netlink: introduce NETLINK_NETFILTER parser

* netlink_netfilter.c: New file.
* Makefile.am (strace_SOURCES): Add it.
* defs.h (decode_netlink_netfilter): New prototype.
* netlink.c (netlink_decoders): Add NETLINK_NETFILTER.
* xlat/netfilter_versions.in: New file.

6 years agoxlat: remove NFNL_SUBSYS_COUNT constant
Chen Jingpiao [Sun, 11 Mar 2018 12:16:01 +0000 (20:16 +0800)]
xlat: remove NFNL_SUBSYS_COUNT constant

NFNL_SUBSYS_COUNT is not a symbol with some constant value, it changes
with time, just print it as an unrecognized number.

* xlat/nl_netfilter_subsys_ids.in (NFNL_SUBSYS_COUNT): Remove.

6 years agoinject_data: make room for more injection features
Dmitry V. Levin [Sat, 10 Mar 2018 00:13:04 +0000 (00:13 +0000)]
inject_data: make room for more injection features

* defs.h (struct inject_data): Squeeze flags and signo fields from
uint16_t to uint8_t to make room for more injection features.

6 years agoxlat: sort v4l2_pix_fmts.in and v4l2_sdr_fmts.in
Eugene Syromyatnikov [Wed, 7 Mar 2018 14:18:55 +0000 (15:18 +0100)]
xlat: sort v4l2_pix_fmts.in and v4l2_sdr_fmts.in

* xlat/v4l2_pix_fmts.in: Sort by value, add a comment about sorting.
* xlat/v4l2_sdr_fmts.in: Likewise.

6 years agoxlat: add comments to all sorted xlat files
Dmitry V. Levin [Fri, 9 Mar 2018 02:48:30 +0000 (02:48 +0000)]
xlat: add comments to all sorted xlat files

Add a short comment describing the method used to sort entries.

* xlat/ethernet_protocols.in: Update the comment about sorting.
* xlat/fsmagic.in: Likewise.
* xlat/evdev_keycode.in: Add a comment about sorting.
* xlat/hw_breakpoint_type.in: Likewise.
* xlat/perf_hw_cache_id.in: Likewise.
* xlat/perf_hw_cache_op_id.in: Likewise.
* xlat/perf_hw_cache_op_result_id.in: Likewise.
* xlat/perf_hw_id.in: Likewise.
* xlat/perf_sw_ids.in: Likewise.
* xlat/perf_type_id.in: Likewise.

6 years agobpf: remove page size caching
Eugene Syromyatnikov [Mon, 5 Mar 2018 09:17:44 +0000 (10:17 +0100)]
bpf: remove page size caching

get_pagesize() has a static cache anyway, no need to duplicate it.

* bpf.c (SYS_FUNC(bpf)): Remove static size_t page_size and its
initialisation, use get_pagesize() as the size of buf directly.

6 years agobpf_filter: fix indentation of the switch clause
Eugene Syromyatnikov [Thu, 22 Feb 2018 05:30:54 +0000 (06:30 +0100)]
bpf_filter: fix indentation of the switch clause

* bpf_filter.c (print_bpf_filter_code): Fix switch clause indentation.

6 years agoxlat: provide fallback definitions for arch-independent mmap flags
Dmitry V. Levin [Thu, 8 Mar 2018 22:27:26 +0000 (22:27 +0000)]
xlat: provide fallback definitions for arch-independent mmap flags

This is important for recently introduced MAP_SHARED_VALIDATE flag.

* xlat/mmap_flags.in (MAP_SHARED, MAP_PRIVATE, MAP_SHARED_VALIDATE):
Add constant values.

Fixes: v4.21-67-g8c209d1 ("tests: fix remap_file_pages.test breakage on hppa")
6 years agobpf: print kern_version in the form of KERNEL_VERSION macro
Eugene Syromyatnikov [Thu, 22 Feb 2018 01:44:04 +0000 (02:44 +0100)]
bpf: print kern_version in the form of KERNEL_VERSION macro

* bpf.c (DEF_BPF_CMD_DECODER(BPF_PROG_LOAD)): Print
union bpf_attr.kern_version in the form of KERNEL_VERSION macro call.
* tests/bpf.c: Update expected output.

6 years agotests: fix remap_file_pages.test breakage on hppa
Eugene Syromyatnikov [Mon, 5 Mar 2018 03:15:53 +0000 (04:15 +0100)]
tests: fix remap_file_pages.test breakage on hppa

Apparently, hppa is the only architecture that has MAP_TYPE
defined to 0x3 instead of 0xf, and the tests hit that corner case.

* tests/remap_file_pages.c (main) [MAP_HUGETLB]: Print the value
of mapping type depending on the architecture (MAP_SHARED_VALIDATE
for hppa and unknown value for other architectures).

Fixes: v4.21~59 ("xlat: update MAP_* constants")
6 years agoSort Ethernet protocols xlat
Eugene Syromyatnikov [Fri, 16 Feb 2018 18:01:24 +0000 (19:01 +0100)]
Sort Ethernet protocols xlat

* defs.h (ethernet_protocols_size): New declaration.
* netlink_packet_diag.c (decode_packet_diag_req): Use
printxval_searchnn to print Ethernet protocols.
* sockaddr.c (ethernet_protocols_size): New constant, item count
in ethernet_protocols array.
(print_sockaddr_data_ll): Use printxval_search instead of
printxval to print Ethernet protocols.
* xlat/ethernet_protocols.in: Sort it by value, add comment
about the fact.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoChange sorted arrays to be terminated with XLAT_END like unsorted arrays
Eugene Syromyatnikov [Wed, 7 Mar 2018 18:07:59 +0000 (19:07 +0100)]
Change sorted arrays to be terminated with XLAT_END like unsorted arrays

It is quite unwieldy to have this distinction between sorted and
unsorted arrays when we can just decrement the size in a wrapper.

* defs.h (printxval_search): Decrement array size.
* xlat/fsmagic.in (#unterminated): Remove.
* xlat/hw_breakpoint_type.in (#unterminated): Remove.
* xlat/perf_hw_cache_id.in (#unterminated): Remove.
* xlat/perf_hw_cache_op_id.in (#unterminated): Remove.
* xlat/perf_hw_cache_op_result_id.in (#unterminated): Remove.
* xlat/perf_hw_id.in (#unterminated): Remove.
* xlat/perf_sw_ids.in (#unterminated): Remove.
* xlat/perf_type_id.in (#unterminated): Remove.
* xlat/gen.sh (gen_header): Remove #unterminated support.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agostrace.1.in: add a note about tracing of scripts without shebang
Eugene Syromyatnikov [Wed, 28 Feb 2018 17:17:26 +0000 (18:17 +0100)]
strace.1.in: add a note about tracing of scripts without shebang

* strace.1.in (.SH NOTES): Note that tracing of scripts without shebang
won't work.

Reported-by: Mike Parker
Closes: https://github.com/strace/strace/issues/46
6 years agostrace.1.in: mention that -c suppresses regular output
Eugene Syromyatnikov [Wed, 28 Feb 2018 16:25:31 +0000 (17:25 +0100)]
strace.1.in: mention that -c suppresses regular output

As the note that -C makes strace "also print regular output" can be
easily overlooked.

* strace.1.in (.SS Statistics) <.TP .B \-c>: Mention that -c supresses
regular output.

6 years agoerrnoent.h: add ERECALLCONFLICT
Eugene Syromyatnikov [Wed, 28 Feb 2018 16:12:04 +0000 (17:12 +0100)]
errnoent.h: add ERECALLCONFLICT

* linux/errnoent.h ([530]): Add ERECALLCONFLICT error introduced by
Linux commit v4.7-rc1~40^2~6.
* linux/alpha/errnoent.h ([530]): Likewise.
* linux/hppa/errnoent.h ([530]): Likewise.
* linux/mips/errnoent.h ([530]): Likewise.
* linux/sparc/errnoent.h ([530]): Likewise.

6 years agoxlat: add BPF_F_ALLOW_MULTI constant
Eugene Syromyatnikov [Thu, 1 Mar 2018 19:19:16 +0000 (20:19 +0100)]
xlat: add BPF_F_ALLOW_MULTI constant

* xlat/bpf_attach_flags.in (BPF_F_ALLOW_MULTI): New constant, introduced
by Linux commit v4.15-rc1~84^2~558^2~7.

6 years agoxlat: add BPF_MAP_TYPE_CPUMAP constant
Eugene Syromyatnikov [Thu, 1 Mar 2018 18:50:39 +0000 (19:50 +0100)]
xlat: add BPF_MAP_TYPE_CPUMAP constant

* xlat/bpf_map_types.in (BPF_MAP_TYPE_CPUMAP): New constant, introduced
by Linux commit v4.15-rc1~84^2~427^2~4.

6 years agotests/test_printstrn.c: do not declare i again
Eugene Syromyatnikov [Fri, 2 Mar 2018 05:19:03 +0000 (06:19 +0100)]
tests/test_printstrn.c: do not declare i again

6 years agotests/s390_sthyi.c: make utility functions inline
Eugene Syromyatnikov [Thu, 1 Mar 2018 05:28:05 +0000 (06:28 +0100)]
tests/s390_sthyi.c: make utility functions inline

When built with --enable-gcc-Werror, s390_sthyi test build fails
with the following error:

s390_sthyi.c:63:1: error: ‘print_u8’ defined but not used [-Werror=unused-function]
 print_u8(const char *prefix, unsigned char *buf, unsigned int offs, bool zero)
 ^~~~~~~~

Apparently, after some back and forth, all occurrences of printing u8
values landed under verbose printing, so this function is no longer
used in non-verbose mode.  Let's avoid this in the future by inlining
all the utility functions in this test.

* tests/s390_sthyi.c (print_0x8, print_u8, print_u16, print_x32,
print_weight, ebcdic2ascii, is_empty, print_ebcdic): Add inline
qualifier.
[!VERBOSE] (is_empty): Remove "# if VERBOSE" guard.

6 years agobtrfs: print struct btrfs_ioctl_logical_ino_args.flags field
Eugene Syromyatnikov [Wed, 21 Feb 2018 23:18:10 +0000 (00:18 +0100)]
btrfs: print struct btrfs_ioctl_logical_ino_args.flags field

The field has been introduced in Linux commit v4.15-rc1~135^2~17.

* btrfs.c: Implement decoding of
struct btrfs_ioctl_logical_ino_args.flags field.
* configure.ac: Check for struct btrfs_ioctl_logical_ino_args.flags
presence in linux/btrfs.h.
* tests/btrfs.c: Update expected output, add additional checks.
* xlat/btrfs_logical_ino_args_flags.in: New file.

6 years agobtrfs.c: print __u64 fields with pointer semantics using printaddr64
Eugene Syromyatnikov [Wed, 21 Feb 2018 22:20:46 +0000 (23:20 +0100)]
btrfs.c: print __u64 fields with pointer semantics using printaddr64

* btrfs.c (btrfs_ioctl) <case BTRFS_IOC_INO_PATHS>: Print fspath field
with printaddr64.
(btrfs_ioctl) <case BTRFS_IOC_LOGICAL_INO>: Print inodes field with
printaddr64.
* tests/btrfs.c: Add checks for NULL in fspath and inodes fields.
* NEWS: Mention it.

6 years agoutil.c: introduce printaddr64
Eugene Syromyatnikov [Wed, 21 Feb 2018 22:15:54 +0000 (23:15 +0100)]
util.c: introduce printaddr64

Sometimes, 64-bit value is expected to be interpreted as an address
(in BTRFS ioctl interface, for example).

* defs.h (printaddr64): New declaration.
* util.c (printaddr64): Rename from printaddr, change argument type
to uint64_t.
(printaddr): Turn into a thin wrapper around printaddr64.
(printnum_addr_int, printnum_addr_int64): Use printaddr64 instead of
printaddr.  printnum_addr_int64 is not used outside the cases where
kernel_long is less or equal than 64 bit currently, so this change
should be safe.

6 years agoprctl: add decoding of PR_SVE_SET_VL and PR_SVE_GET_VL commands
Eugene Syromyatnikov [Wed, 21 Feb 2018 19:57:16 +0000 (20:57 +0100)]
prctl: add decoding of PR_SVE_SET_VL and PR_SVE_GET_VL commands

These commands were introduced in Linux commit v4.15-rc1~110^2~9.

* xlat/pr_sve_vl_flags.in: New file.
* xlat/prctl_options.in: Likewise.
* prctl.c: Include "xstring.h" and "xlat/pr_sve_vl_flags.h".
[!PR_SVE_VL_LEN_MASK] (PR_SVE_VL_LEN_MASK): New macro constant.
(sprint_sve_val): New function.
(SYS_FUNC(prctl)): Add decoding for PR_SVE_GET_VL and PR_SVE_SET_VL
commands.
* NEWS: Mention it.

6 years agoImplement PTRACE_SECCOMP_GET_METADATA ptrace request decoding
Eugene Syromyatnikov [Wed, 21 Feb 2018 18:20:54 +0000 (19:20 +0100)]
Implement PTRACE_SECCOMP_GET_METADATA ptrace request decoding

* defs.h (seccomp_filter_flags): New declaration.
* process.c (SYS_FUNC(ptrace)): Implement PTRACE_SECCOMP_GET_METADATA
request decoding.
* ptrace.h [!PTRACE_SECCOMP_GET_METADATA] (PTRACE_SECCOMP_GET_METADATA):
New macro constant.
* xlat/ptrace_cmds.in (PTRACE_SECCOMP_GET_METADATA): New constant.
* tests/ptrace.c (main): Add some checks for PTRACE_SECCOMP_GET_METADATA
request decoding.
* NEWS: Mention it.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agobuild: prepare for -Wimplicit-fallthrough=5
Dmitry V. Levin [Tue, 6 Mar 2018 23:52:08 +0000 (23:52 +0000)]
build: prepare for -Wimplicit-fallthrough=5

* gcc_compat.h (ATTRIBUTE_FALLTHROUGH): New macro.
* block.c (block_ioctl): Use it instead of "fall through" comment.
* btrfs.c (btrfs_ioctl): Likewise.
* loop.c (loop_ioctl): Likewise.
* mtd.c (mtd_ioctl): Likewise.
* rtc.c (rtc_ioctl): Likewise.
* v4l2.c (v4l2_ioctl): Likewise.
* dm.c (dm_decode_values): Likewise.
* process.c (SYS_FUNC(ptrace)): Likewise.
* quota.c (decode_cmd_data): Likewise.
* ucopy.c (umovestr): Likewise.
* unwind.c (unwind_print_stacktrace, unwind_capture_stacktrace)):
Likewise.
* term.c (term_ioctl): Add ATTRIBUTE_FALLTHROUGH.
* ioctl.c (ioctl_decode) [ALPHA || POWERPC]: Likewise.
* m4/st_warn_cflags.m4 (gl_WARN_ADD): Add -Wimplicit-fallthrough=5.
* tests/ioctl_v4l2.c (init_v4l2_format): Reorganize the switch statement
without implicit fallthrough.

6 years agoxlat: add eBPF-based device controller constants
Eugene Syromyatnikov [Tue, 20 Feb 2018 18:48:08 +0000 (19:48 +0100)]
xlat: add eBPF-based device controller constants

Add new BPF_PROG_TYPE_CGROUP_DEVICE eBPF program type and new
BPF_CGROUP_DEVICE eBPF program attach type, added in Linux commit
v4.15-rc1~84^2~120^2~2.

* xlat/bpf_attach_type.in (BPF_CGROUP_DEVICE): New constant.
* xlat/bpf_prog_types.in (BPF_PROG_TYPE_CGROUP_DEVICE): Likewise.
* NEWS: Mention it.

6 years agoxlat: provide fallback definitions for input event constants
Eugene Syromyatnikov [Mon, 19 Feb 2018 18:25:44 +0000 (19:25 +0100)]
xlat: provide fallback definitions for input event constants

Values added using the following pair of commands:

$ cat xlat/evdev_keycode.in |
while read r; do [ -n "$r" ] &&
sed -rn 's/^#define[[:space:]]+('$r'[[:space:]]+[^[:space:]]+).*/\1/p' \
~/dev/linux/include/uapi/linux/input-event-codes.h || echo;
done > xlat/evdev_keycode.in.new
$ sort -s -n -k1,1 \
<(awk '{if (NF>1) {last = strtonum($2)}; printf("%d %s\n", last, $0)}' \
xlat/evdev_keycode.in.new) \
| sed 's/^[0-9]* //'  > xlat/evdev_keycode.in

It also verifies that the values are sorted and bsearch-ready.

* xlat/evdev_keycode.in: Add constant values.