2026-10-22  Dmitry V. Levin  <ldv@strace.io>

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

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

2026-10-22  Dmitry V. Levin  <ldv@strace.io>

	Fix preprocessor indentation.
	Indent the C preprocessor directives to reflect their nesting
	using the following script:

	$ cppi -l $(git grep -El '^[[:space:]]*#[[:space:]]*(if|ifdef|ifndef|elif|else|endif|define|pragma)[[:space:]]' src tests |grep -Ev '\.(in|md|sh|test)$') |while read f; do
		cppi < "$f" > "$f".cppi; mv "$f".cppi "$f"
	done

2026-10-22  Thomas Weißschuh (Schneider Electric)  <thomas.weissschuh@linutronix.de>
	    Dmitry V. Levin  <ldv@strace.io>

	time: decode auxiliary clock IDs.
	Linux kernel commit 9094c72c3d81 ("time: Introduce auxiliary
	POSIX clocks") reserves CLOCK_AUX through CLOCK_AUX_LAST for
	auxiliary clocks.  Decode those IDs in all xlat modes.

	Keep the helpers that include <linux/time.h> in separate
	translation units to avoid conflicts with libc time definitions.

	* src/auxiliary_clock.c: New file.
	New helpers for the auxiliary clock ID range.
	* src/auxiliary_clock.h: Likewise.
	* src/Makefile.am (libstrace_a_SOURCES): Add auxiliary_clock.c
	and auxiliary_clock.h.
	* src/time.c: Include "auxiliary_clock.h".
	(printclockname): Decode auxiliary clock IDs.
	* tests/clock_ids_for_tests.c (clock_ids_for_tests): Add the first
	and last auxiliary clock IDs to the test table.
	(clock_aux_last_for_tests): New helper function.
	* tests/clock_ids_for_tests.h (clock_aux_last_for_tests): Declare it.
	* tests/printclockname.c (main): Check the first and last auxiliary
	clock IDs and the first ID outside their range.
	* NEWS: Mention this change.

	Assisted-by: OpenCode:gpt-6-sol

2026-10-22  Thomas Weißschuh (Schneider Electric)  <thomas.weissschuh@linutronix.de>

	bundled: add linux/time.h from Linux v7.3.
	Auxiliary clock IDs were introduced by Linux kernel commit
	9094c72c3d81 ("time: Introduce auxiliary POSIX clocks").  Bundle
	the UAPI header so CLOCK_AUX and its range are available when the
	host kernel headers predate this change.

	* bundled/linux/include/uapi/linux/time.h: New file, imported from
	headers_install'ed Linux kernel v7.3.
	* bundled/Makefile.am (EXTRA_DIST): Add linux/include/uapi/linux/time.h.

2026-10-22  Thomas Weißschuh (Schneider Electric)  <thomas.weissschuh@linutronix.de>
	    Dmitry V. Levin  <ldv@strace.io>

	time: always decode dynamic clock IDs.
	The dynamic clock decoder is conditional on CLOCKID_TO_FD, which is
	not defined by the UAPI headers, glibc, or musl.  Supply local
	definitions so these IDs are decoded on those systems.  Define
	CPUCLOCK_CLOCK_MASK separately for systems that provide CLOCKID_TO_FD
	but not this mask.

	Show the numeric ID alongside its symbolic interpretation because
	the dynamic-clock macros are non-standard.  Mask off the per-thread
	bit when looking up CPU clock names, and avoid nested comments in
	verbose output.  Print the numeric CPU-clock type when unknown.

	* src/time.c: Include "xlat/cpuclocknames.h", define dynamic clock ID
	macros locally, and define CPUCLOCK_CLOCK_MASK independently.
	(printcpuclockname): New helper.
	(printclockname): Decode negative clock IDs and always print their
	numeric values with symbolic comments.
	* tests/printclockname.c (main): Check file descriptor and CPU clock
	IDs in each xlat mode, including unknown CPU-clock types.
	* NEWS: Mention this change.

	Suggested-by: Dmitry V. Levin <ldv@strace.io>
	Link: https://github.com/strace/strace/pull/414#discussion_r3830577708
	Assisted-by: OpenCode:gpt-6-sol

2026-10-22  Thomas Weißschuh (Schneider Electric)  <thomas.weissschuh@linutronix.de>
	    Dmitry V. Levin  <ldv@strace.io>

	tests: add dedicated clock ID decoding tests.
	Existing clock syscall tests do not cover every xlat style.  Add a
	focused clock_getres test in abbreviated, raw, and verbose modes so
	later clock ID decoder changes can be checked without duplicating
	the syscall tests.

	Keep <linux/time.h> in a separate test compilation unit to avoid
	conflicts with libc time definitions in the test program.

	* tests/clock_ids_for_tests.c: New file.
	* tests/clock_ids_for_tests.h: Likewise.
	* tests/printclockname.c: Likewise.
	* tests/printclockname-Xabbrev.c: Likewise.
	* tests/printclockname-Xraw.c: Likewise.
	* tests/printclockname-Xverbose.c: Likewise.
	* tests/Makefile.am (libtests_a_SOURCES): Add clock_ids_for_tests.c
	and clock_ids_for_tests.h.
	(EXTRA_DIST): Add printclockname.c.
	* tests/gen_tests.in: Update the clock trace expression tests.
	(printclockname-Xabbrev, printclockname-Xraw, printclockname-Xverbose):
	New tests.
	* tests/pure_executables.list: Add printclockname-Xabbrev,
	printclockname-Xraw, and printclockname-Xverbose.
	* tests/.gitignore: Likewise.

	Assisted-by: OpenCode:gpt-6-sol

2026-10-22  Thomas Weißschuh (Schneider Electric)  <thomas.weissschuh@linutronix.de>

	time: fix compilation of CLOCKID_TO_FD branch.
	Without braces around the FD_TO_CLOCKID branch, its else has no
	matching if, so the decoder cannot compile when CLOCKID_TO_FD
	is defined.  Apparently, this code has never been enabled.

	* src/time.c (printclockname) [CLOCKID_TO_FD]: Add braces around
	the FD_TO_CLOCKID branch to fix the malformed conditional.

2026-10-21  Dmitry V. Levin  <ldv@strace.io>

	tests: check zero-nstype setns for user namespaces.
	A successful setns(fd, 0) with a user-namespace descriptor must
	report the new user namespace ID under --namespace=new.  Check this
	both with ordinary procfs and with procfs mounted from an ancestor
	PID namespace.

	The earlier explicit-nstype test shares the child-created namespace
	and descriptor-passing setup.  Since joining a user namespace cannot
	be undone by joining its ancestor, run the zero-nstype call in its
	own executable instead of following the explicit call.

	* tests/setns-report-ns-id-user.c: New file.
	* tests/gen_tests.in (setns-report-ns-id-user,
	setns-report-ns-id-user--pidns): New tests.
	* tests/pure_executables.list: Add setns-report-ns-id-user.
	* tests/.gitignore: Likewise.

	Assisted-by: OpenCode:gpt-6-sol

2026-10-21  Masatake YAMATO  <yamato@redhat.com>
	    Dmitry V. Levin  <ldv@strace.io>

	setns: decode namespace transitions with zero nstype.
	When nstype is zero, setns derives the namespace type from its fd.
	Read the fd target through the procfs-aware helper, validate its
	type, and report the resulting namespace ID.  Existing PID and time
	namespace handling also applies to this case.

	* src/clone.c (read_namespace_type_for_fd): Add a helper to obtain
	and validate the namespace type from the tracee fd.
	(get_namespace_auxstr): Accept an expected namespace type for zero
	nstype.
	(SYS_FUNC(setns)): Derive the namespace type from the fd when nstype
	is zero.
	(SYS_FUNC(clone), SYS_FUNC(clone3), SYS_FUNC(unshare)): Update callers.
	* tests/setns-report-ns-id.c (main): Check zero nstype.
	* tests/setns-report-ns-id-children.c (test_children_namespace):
	Likewise.
	* NEWS: Mention this change.

	Assisted-by: Antigravity:Gemini-3.5-Flash (commit log)
	Assisted-by: OpenCode:gpt-6-sol

2026-10-21  Dmitry V. Levin  <ldv@strace.io>

	unshare: report PID and time namespaces for future children.
	unshare(CLONE_NEWPID) and unshare(CLONE_NEWTIME) change the
	namespaces for future children, not those of the caller.  Reading
	/proc/<pid>/ns/pid or time after either syscall reports an old ID.
	Read pid_for_children and time_for_children instead.

	The pid_for_children link can be empty until the first child enters
	the new PID namespace.  Omit that ID when unavailable rather than
	print an empty field or the caller's old namespace.  Update the
	unshare test to check the child namespace links and their formatting,
	including separate PID and time namespace calls when supported.

	* src/clone.c (read_namespace_id): Treat an empty symlink as
	unavailable.
	(SYS_FUNC(unshare)): Request namespace IDs for future children.
	* tests/unshare.c (main): Check child namespace IDs and omit an
	unavailable PID ID without introducing separators.
	* NEWS: Mention this fix.

	Assisted-by: OpenCode:gpt-6-sol

2026-10-21  Dmitry V. Levin  <ldv@strace.io>

	setns: report PID and time namespaces for future children.
	A successful setns into a PID or time namespace changes the
	namespace for future children, not the caller's current namespace.
	Read pid_for_children or time_for_children after the syscall so the
	return annotation reports the new namespace ID.  Test each namespace
	independently so unavailable cases skip rather than silently pass.

	* src/clone.c (read_namespace_id): Read the PID and time namespace
	links for future children when requested.
	(get_namespace_auxstr): Pass the child namespace context to lookups.
	(SYS_FUNC(setns)): Request child namespace IDs.
	(SYS_FUNC(clone), SYS_FUNC(clone3), SYS_FUNC(unshare)): Preserve their
	existing namespace lookup behavior.
	* tests/setns-report-ns-id-children.c: New file.
	* tests/setns-report-ns-id-pid.c: Likewise.
	* tests/setns-report-ns-id-time.c: Likewise.
	* tests/Makefile.am (EXTRA_DIST): Add setns-report-ns-id-children.c.
	* tests/gen_tests.in (setns-report-ns-id-pid,
	setns-report-ns-id-pid--pidns, setns-report-ns-id-time,
	setns-report-ns-id-time--pidns): New tests.
	* tests/pure_executables.list: Add setns-report-ns-id-pid and
	setns-report-ns-id-time.
	* tests/.gitignore: Likewise.
	* NEWS: Mention this fix.

	Assisted-by: OpenCode:gpt-6-sol

2026-10-21  Dmitry V. Levin  <ldv@strace.io>

	strace: translate procfs PIDs in attach failure diagnostics.
	On an EPERM attach, proc_pid_tracer looked up /proc/<pid>/status
	using the strace-visible target PID.  An inherited procfs mount
	may use an ancestor PID namespace, hiding the real TracerPid or
	reporting an unrelated process.  Resolve the target via get_proc_pid.

	The TracerPid value is itself in the procfs PID namespace.  Recover
	its strace-visible PID from NSpid, validating it by translating back
	to the same procfs PID so a sibling namespace cannot be mistaken for
	ours.  Label the procfs PID explicitly if it cannot be translated.

	Test both outcomes.  Run the existing-tracer fixture entirely inside
	a nested PID namespace to check a visible tracer PID.  In a second
	fixture, let an outer strace follow a target into that namespace and
	attach from within it.  Read the outer tracer PID from procfs and
	check that the diagnostic identifies it as a procfs PID.

	* src/defs.h (get_strace_pid): Declare the new helper.
	* src/pidns.c (get_strace_pid): Map a procfs PID into strace's PID
	namespace and verify the mapping.
	* src/strace.c (proc_pid_tracer): Resolve the target PID for procfs.
	(diagnose_attach_eperm): Report a strace-visible tracer PID when
	available, or identify it as a procfs PID.
	* tests/attach-p-eperm-already-traced--pidns.test: New test, checks
	a visible tracer PID in a nested namespace.
	* tests/attach-p-eperm-tracer-outside-pidns.test: New test, checks
	the fallback for a tracer outside that namespace.
	* tests/Makefile.am (MISC_TESTS): Add
	attach-p-eperm-already-traced--pidns.test and
	attach-p-eperm-tracer-outside-pidns.test.
	* NEWS: Mention this fix.

	Assisted-by: OpenCode:gpt-6-sol

2026-10-21  Dmitry V. Levin  <ldv@strace.io>

	pidns: translate PID before reading command names from procfs.
	With strace in a PID namespace but /proc mounted from an ancestor,
	the strace-visible PID is not a procfs PID.  Looking up that number
	in /proc/<pid>/comm can even print the name of an unrelated process.
	Translate it with get_proc_pid and omit the name if translation fails.

	Generate a variant of the existing --decode-pids=comm test using the
	shared helper for an inherited procfs mount.  Source the original
	generated test to retain its syscall and signal options; its expected
	output checks names on PID-valued results and syscall arguments.

	* src/pidns.c (printpid_translation): Resolve the procfs PID before
	printing its command name.
	* tests/gen_tests.in (strace--decode-pids-comm--pidns): New test.
	* NEWS: Mention this fix.

	Assisted-by: OpenCode:gpt-6-sol

2026-10-21  Dmitry V. Levin  <ldv@strace.io>

	unshare: use procfs PID when reporting namespace IDs.
	Like setns, the unshare decoder read /proc/<pid>/ns using the PID
	visible to strace.  When /proc belongs to an ancestor PID namespace,
	that PID can identify another process or no process at all, so a
	successful unshare loses its namespace ID annotation.  Translate the
	PID with get_proc_pid before constructing the procfs path.

	Generate a variant of the existing unshare namespace-ID test using
	the shared nested-PID-namespace helper.  It runs strace with the
	inherited /proc mount and sources the original generated test to
	compare successful annotations with IDs read by the tracee.

	* src/clone.c (SYS_FUNC(unshare)): Translate the PID for procfs.
	* tests/gen_tests.in (unshare-report-ns-id--pidns): New test.
	* NEWS: Mention this fix.

	Assisted-by: OpenCode:gpt-6-sol

2026-10-21  Dmitry V. Levin  <ldv@strace.io>

	setns: use procfs PID when reporting namespace IDs.
	The PID of a tracee as seen by strace may differ from its PID in
	the mounted /proc, for example when strace runs in a nested PID
	namespace with an inherited procfs mount.  The setns decoder used
	the former to read /proc/<pid>/ns, omitting the namespace ID or
	reading another process.  Resolve it with get_proc_pid first.

	Generate variants of all six setns namespace ID tests using a shared
	helper that runs strace in a nested PID namespace with the inherited
	/proc mount.  It sources each original generated test, retaining its
	strace options and expected namespace ID.  Make the sourced script
	a prerequisite of each variant, and replace generated scripts
	atomically so concurrent builds cannot truncate a script being read.

	* src/clone.c (SYS_FUNC(setns)): Translate the PID for procfs.
	* tests/gen_tests.in (setns-report-ns-id-cgroup--pidns,
	setns-report-ns-id-ipc--pidns, setns-report-ns-id-mnt--pidns,
	setns-report-ns-id-net--pidns,
	setns-report-ns-id-user-explicit--pidns,
	setns-report-ns-id-uts--pidns): New tests.
	* tests/procfs-pidns.sh: New file.
	* tests/gen_tests.sh: Add generated-test dependencies and replace
	scripts atomically.
	* tests/Makefile.am (check_SCRIPTS): Add procfs-pidns.sh.
	* NEWS: Mention this fix.

	Assisted-by: OpenCode:gpt-6-sol

2026-10-21  Dmitry V. Levin  <ldv@strace.io>

	tests: check explicit setns with a user namespace.
	A successful setns(fd, CLONE_NEWUSER) must report the new user
	namespace ID.  A single process cannot create nested user namespaces
	and join an ancestor, so have a child create the target namespace and
	pass its descriptor to the parent over a socket.

	* tests/setns-report-ns-id-user-common.c: New file.
	* tests/setns-report-ns-id-user-explicit.c: Likewise.
	* tests/Makefile.am (EXTRA_DIST): Add setns-report-ns-id-user-common.
	* tests/gen_tests.in (setns-report-ns-id-user-explicit): New test.
	* tests/pure_executables.list: Add setns-report-ns-id-user-explicit.
	* tests/.gitignore: Likewise.

	Assisted-by: OpenCode:gpt-6-sol

2026-10-21  Dmitry V. Levin  <ldv@strace.io>

	tests: check explicit setns for mount, UTS, IPC, and cgroup namespaces.
	Exercise successful explicit-nstype setns calls for mount, UTS, IPC,
	and cgroup namespaces using the shared test template.  Keep each
	type independent so an unavailable namespace skips only its test.

	* tests/setns-report-ns-id-cgroup.c: New file.
	* tests/setns-report-ns-id-ipc.c: Likewise.
	* tests/setns-report-ns-id-mnt.c: Likewise.
	* tests/setns-report-ns-id-uts.c: Likewise.
	* tests/gen_tests.in (setns-report-ns-id-cgroup,
	setns-report-ns-id-ipc, setns-report-ns-id-mnt,
	setns-report-ns-id-uts): New tests.
	* tests/pure_executables.list: Add setns-report-ns-id-cgroup,
	setns-report-ns-id-ipc, setns-report-ns-id-mnt, and
	setns-report-ns-id-uts.
	* tests/.gitignore: Likewise.

	Assisted-by: OpenCode:gpt-6-sol

2026-10-21  Dmitry V. Levin  <ldv@strace.io>

	tests: parameterize setns namespace ID test.
	Make the network namespace test reusable for other namespace types
	while preserving its existing explicit-nstype coverage.

	* tests/setns-report-ns-id.c (main): Accept the namespace name,
	flag, and flag string from an including test.
	* tests/setns-report-ns-id-net.c: New file.
	* tests/Makefile.am (EXTRA_DIST): Add setns-report-ns-id.c.
	* tests/gen_tests.in (setns-report-ns-id): Rename to
	setns-report-ns-id-net.
	* tests/pure_executables.list: Replace setns-report-ns-id with
	setns-report-ns-id-net.
	* tests/.gitignore: Likewise.

	Assisted-by: OpenCode:gpt-6-sol

2026-10-21  Dmitry V. Levin  <ldv@strace.io>

	tests: factor out setns namespace ID test helpers.
	Extract namespace link reading, expected output, and namespace-pair
	setup from the network test so the PID, time, and other namespace
	tests can share them.  Read the saved namespace through its fd to
	identify the same namespace that will be passed to setns.

	* tests/setns-report-ns-id-common.h: New file.
	* tests/Makefile.am (EXTRA_DIST): Add setns-report-ns-id-common.h.
	* tests/setns-report-ns-id.c: Include "setns-report-ns-id-common.h".
	(main): Use read_proc_self_fd_link, open_namespace_pair, and
	setns_and_print_expected.

	Assisted-by: OpenCode:gpt-6-sol

2026-10-20  Masatake YAMATO  <yamato@redhat.com>

	tests: use a user namespace for setns namespace ID checks.
	The test previously needed privileges to create a network namespace
	and rejoin the one saved in its fd.  When possible, enter a user
	namespace and create a network namespace owned by it before opening
	the fd.  This allows the test to run without global CAP_SYS_ADMIN.

	If creating a user namespace fails, continue with the caller's
	existing privileges.  The additional network namespace creation may
	still cause the test to skip under restrictive limits or policies.

	* tests/setns-report-ns-id.c (main): Try to create a user namespace
	and an owned network namespace before opening the namespace fd.

	Assisted-by: Antigravity:Gemini-3.5-Flash
	Assisted-by: OpenCode:gpt-6-sol

2026-10-20  Dmitry V. Levin  <ldv@strace.io>

	tests: consistently use CLONE_* constants instead of numeric values.
	* tests/ioctl_nsfs.c: Include <linux/sched.h> instead of providing
	a fallback CLONE_NEWUSER definition.
	* tests/setns.c: Include <linux/sched.h>.
	(main): Use CLONE_* constants instead of raw numeric values in the
	nstypes array.
	* tests/setns-report-ns-id.c: Include <linux/sched.h>.
	(main): Use CLONE_NEWNET constant instead of the raw numeric value.
	* tests/unshare.c: Include <linux/sched.h>.
	(main): Use CLONE_* constants instead of raw numeric values in the
	unshare_flags array.

	tests/attach-p-eperm-already-traced.test: synchronize using FIFOs.
	* tests/attach-p-eperm-already-traced.test: Replace the sleep and
	signal handshake with FIFOs.  Bound PID retrieval when timeout works,
	release the tracee on early failure, and check the tracer exit status.

2026-10-19  Eduard Zateev  <hackerowskiy@gmail.com>
	    Dmitry V. Levin  <ldv@strace.io>

	rtnl: decode AF_BRIDGE RTM_GETNEIGH request layouts.
	AF_BRIDGE RTM_GETNEIGH single-entry requests use ndmsg, but dumps
	can carry ndmsg or ifinfomsg depending on NETLINK_GET_STRICT_CHK.
	An ifi_change value can resemble a neighbor attribute header, while
	a malformed neighbor attribute can resemble an ifinfomsg request.
	Compare both attribute layouts without validating request fields:
	prefer legacy if both fit and print raw data if neither fits. Keep
	the 12- and 20-byte ndmsg compatibility forms.

	* src/netlink_route.c (decode_rtnl_family): Export and rename
	decode_family for use by the neighbor decoder.
	* src/netlink_route.h (decode_rtnl_family): Declare.
	* src/rtnl_neigh.c (has_fdb_dump_attrs): Recognize either attribute
	layout without validating attribute types or request fields; allow
	an unpadded final attribute.
	(decode_rtm_getneigh): Decode single-entry requests as ndmsg and
	select the dump layout conservatively, falling back to raw data when
	neither fits.
	* tests/netlink_route.c (test_rtnl_neigh): Cover single-entry requests,
	compatibility dump sizes, multiple attributes, rejected requests,
	ambiguous and malformed layouts, and unreadable and unpadded data.
	* NEWS: Mention this fix.

	Assisted-by: Codex:GPT-6
	Assisted-by: OpenCode:openai/gpt-6-sol

2026-10-19  Gleb Fotengauer-Malinovskiy  <glebfm@altlinux.org>

	Update ioctl entries from linux v7.3.
	* src/linux/32/ioctls_inc_align16.h: Update from linux v7.3 using
	ioctls_gen.sh.
	* src/linux/32/ioctls_inc_align32.h: Likewise.
	* src/linux/32/ioctls_inc_align64.h: Likewise.
	* src/linux/64/ioctls_inc.h: Likewise.
	* src/linux/x32/ioctls_inc0.h: Likewise.
	* src/linux/i386/ioctls_arch0.h: Likewise.
	* src/linux/powerpc/ioctls_arch0.h: Likewise.
	* src/linux/x86_64/ioctls_arch0.h: Likewise.
	* NEWS: Mention this change.

2026-10-18  Dmitry V. Levin  <ldv@strace.io>

	doc: document bundled header update script.
	* doc/README-bundled.md: Describe maint/update-bundled-headers.sh
	usage, options, and workflow for adding headers.

	Assisted-by: OpenCode:openai/gpt-6-sol

2026-10-18  Dmitry V. Levin  <ldv@strace.io>

	doc: correct developer documentation against current tree.
	* doc/COMMIT-MESSAGES.md: Clarify AI attribution and whitespace check.
	* doc/DECODER_API.md: Correct printer and xlat descriptions.
	* doc/HOWTO_ADD_IOCTL.md: Fix ioctl examples and return guidance.
	* doc/HOWTO_ADD_NETLINK.md: Correct test skip description.
	* doc/HOWTO_ADD_SYSCALL.md: Fix xlat and test instructions.
	* doc/HOWTO_TEST.md: Correct test and output examples.
	* doc/INTERNALS.md: Remove duplicate event description.
	* doc/README-bundled.md: Update version and header selection details.
	* doc/README-mpers.md: Replace obsolete example.
	* doc/README-xlat.md: Clarify unconditional xlat behavior.

	Assisted-by: OpenCode:openai/gpt-6-sol

2026-10-18  Eduard Zateev  <hackerowskiy@gmail.com>

	tests: invoke pwrite64 and pwritev syscalls directly.
	Musl implements pwrite and pwritev using pwritev2, so the decoder tests
	miss the expected pwrite64 and pwritev calls.  Invoke the tested syscalls
	directly, preserving the argument layout for 64-bit offsets.

	* tests/pread64-pwrite64.c: Include "scno.h".
	(k_pwrite64): New function.
	(test_dump, main): Use it instead of pwrite.
	* tests/preadv-pwritev.c: Include "scno.h" and check __NR_pwritev
	instead of HAVE_PWRITEV.
	(k_pwritev): New function.
	(main): Use it instead of pwritev.
	* tests/pwritev.c: Likewise.
	Remove the now-unused nonnull diagnostic suppression.

	Fixes: https://github.com/strace/strace/issues/349
	Assisted-by: Codex:GPT-6

2026-10-18  Dmitry V. Levin  <ldv@strace.io>

	Bring various lists back to the sorted order.
	* bundled/Makefile.am (EXTRA_DIST): Make the list sorted again.
	* src/Makefile.am (libstrace_a_SOURCES, syscallent_names, CLEANFILES):
	Likewise.
	* tests/Makefile.am (MISC_TESTS): Likewise.
	* tests/pure_executables.list: Likewise.
	* tests/.gitignore: Likewise.

2026-10-14  Dmitry V. Levin  <ldv@strace.io>

	rtnl_link: decode macvlan source MAC addresses.
	The kernel emits IFLA_MACVLAN_MACADDR_DATA as a list of
	IFLA_MACVLAN_MACADDR attributes without the NLA_F_NESTED flag.

	* src/rtnl_link.c (decode_ifla_macvlan_macaddr_data): New function.
	(ifla_info_data_macvlan_nla_decoders): Decode individual and nested
	source MAC addresses.
	* tests/nlattr_ifla_linkinfo.c (main): Check individual and nested
	source MAC addresses, truncated data, and unknown nested attributes.

	Assisted-by: OpenCode:gpt-6-sol

2026-10-14  Etienne Champetier  <e.champetier@ateme.com>
	    Dmitry V. Levin  <ldv@strace.io>

	rtnl_link: decode IFLA_INFO_DATA for macvlan devices.
	* src/xlat/rtnl_ifla_info_data_macvlan_attrs.in: New file.
	* src/xlat/rtnl_ifla_macvlan_flags.in: Likewise.
	* src/xlat/rtnl_ifla_macvlan_macaddr_modes.in: Likewise.
	* src/xlat/rtnl_ifla_macvlan_modes.in: Likewise.
	* src/rtnl_link.c: Include new xlat headers.
	(decode_ifla_macvlan_mode, decode_ifla_macvlan_flags,
	decode_ifla_macvlan_macaddr_mode, decode_nla_linkinfo_data_macvlan):
	New functions.
	(ifla_info_data_macvlan_nla_decoders): New array.
	(decode_nla_linkinfo_data): Handle macvlan linkinfo data.
	* tests/nlattr_ifla_linkinfo.c (main): Check macvlan attribute
	decoding.
	* NEWS: Mention this change.

	Assisted-by: OpenCode:gpt-6-sol

2026-10-13  Barnabás Pőcze  <pobrn@protonmail.com>
	    Dmitry V. Levin  <ldv@strace.io>

	v4l2: decode VIDIOC_{UN,}SUBSCRIBE_EVENT ioctl commands.
	Decode event types, including private types relative
	to V4L2_EVENT_PRIVATE_START, and subscription flags.
	Unsubscription uses only the event type and ID.

	* src/xlat/v4l2_event_subscription_flags.in: New file based on
	Linux v7.3-rc4.
	* src/xlat/v4l2_event_types.in: Likewise.
	* src/v4l2.c: Include "xlat/v4l2_event_subscription_flags.h" and
	"xlat/v4l2_event_types.h".
	(print_v4l2_event_type): New helper to print standard, private,
	and unknown event types.
	(print_v4l2_subscribe_event): New decoder for event subscriptions.
	(v4l2_ioctl): Use it to handle VIDIOC_SUBSCRIBE_EVENT and
	VIDIOC_UNSUBSCRIBE_EVENT.
	* tests/ioctl_v4l2.c (main): Remove these commands from the unsupported
	ioctl list; check event types and subscription flags, including
	private and unknown values.
	* NEWS: Mention this change.

2026-10-13  Dmitry V. Levin  <ldv@strace.io>

	tests: use struct strival_long instead of open-coding it.
	* tests/prctl-fp-mode.c (main): Define get_strs[] as an array of struct
	strival_long.
	* tests/prctl-mdwe.c (main): Likewise.
	* tests/prctl-spec-inject.c (main): Define spec_strs[] and get_strs[] as
	arrays of struct strival_long.

	Assisted-by: OpenCode:openai/gpt-6-sol

2026-10-13  Dmitry V. Levin  <ldv@strace.io>

	tests/tests.h: define struct strival_long.
	* tests/tests.h (strival_long): New struct for signed long values
	and their strings.

	Assisted-by: OpenCode:openai/gpt-6-sol

2026-10-13  Dmitry V. Levin  <ldv@strace.io>

	tests: use struct strval32 instead of open-coding it.
	* tests/add_key.c (main): Define keyrings[] as an array of struct
	strval32.
	* tests/request_key.c (main): Likewise.
	* tests/ioctl_perf.c (main): Define flag_iocs[] as an array of struct
	strval32.
	* tests/ioctl_watchdog.c (main): Define simple_get_cmds[] as an array of
	struct strval32.
	* tests/ioctl_seccomp.c (main): Define id_valid_cmds[] as an array of
	struct strval32.
	* tests/ioctl_hdio.c (main): Define unsupp_cmds[], getter_cmds[], and
	setter_cmds[] as arrays of struct strval32.
	* tests/ioctl_mtd.c (main): Define ptr_cmds[] and eiu_cmds[] as arrays
	of struct strval32.
	* tests/ioctl_rtc.c (main): Define noarg_cmds[], long_cmds[],
	plong_cmds[], ptr_cmds[], r_time_cmds[], w_time_cmds[], r_wkalrm_cmds[],
	w_wkalrm_cmds[], r_pll_cmds[], and w_pll_cmds[] as arrays of struct
	strval32.
	* tests/ioctl_ubi.c (main): Define noarg_cmds[], pint_cmds[],
	pint64_cmds[], ptr_cmds[], attach_cmds[], leb_cmds[], map_cmds[],
	mkvol_cmds[], rnvol_cmds[], rsvol_cmds[], and prop_cmds[] as arrays of
	struct strval32.
	* tests/ioctl_sock.c (test_ptr): Define cmd[] and unknown_cmd[] as
	arrays of struct strval32.
	(test_str): Define cmd[] as an array of struct strval32.
	* tests/ioctl_v4l2.c (main): Define cmd_flags[] and unsupp_cmds[] as
	arrays of struct strval32.
	* tests/io_uring_register.c: Define fd_arr_ops[], rsrc_reg_ops[],
	rsrc_upd_ops[], ringfd_ops[], buf_reg_ops[], sync_cancel_reg_ops[],
	file_index_range_ops[], buf_status_ops[], and no_arg_ops[] as arrays of
	struct strval32.

	Assisted-by: OpenCode:openai/gpt-6-sol

2026-10-13  Dmitry V. Levin  <ldv@strace.io>

	tests: use struct strval_klong instead of open-coding it.
	* tests/finit_module.c (main): Define flags[] as an array of struct
	strval_klong.
	* tests/kern_features.c (test_kern_features): Define checks[] as an
	array of struct strval_klong.
	* tests/pkey_alloc.c (main): Define rights[] as an array of struct
	strval_klong.
	* tests/pkey_mprotect.c (main): Define prots[] as an array of struct
	strval_klong.
	* tests/prctl-arg2-intptr.c (main): Define options[] as an array of
	struct strval_klong.
	* tests/prctl-pac-enabled-keys.c (main): Define args[] as an array of
	struct strval_klong.
	* tests/prctl-riscv-v-ctrl.c (main): Likewise.
	* tests/prctl-tagged-addr.c (main): Likewise.
	* tests/prctl-pac-reset-keys.c (main): Define arg2[] as an array of
	struct strval_klong.
	* tests/ioctl_kd.c (main): Define sigaccept_vecs[] and meta_vecs[] as
	arrays of struct strval_klong.
	* tests/keyctl.c (main): Define move_keys[] and move_flags[] as arrays
	of struct strval_klong.
	* tests/prctl-fp-mode.c (main): Define set_strs[] as an array of struct
	strval_klong.
	* tests/prctl-mdwe.c (main): Likewise.
	* tests/prctl-spec-inject.c (main): Likewise.
	* tests/riscv_flush_icache.c (main): Define addrs[] and flags[] as
	arrays of struct strval_klong.
	* tests/s390_runtime_instr.c (main): Define cmd_args[] and
	start_sig_args[] as arrays of struct strval_klong.

	Assisted-by: OpenCode:openai/gpt-6-sol

2026-10-13  Dmitry V. Levin  <ldv@strace.io>

	tests/sol_tipc-importance: use struct strival32 instead of open-coding it
	* tests/sol_tipc-importance.c (main): Define imp_optvals[] as an array
	of struct strival32.

	Assisted-by: OpenCode:openai/gpt-6-sol

2026-10-13  Dmitry V. Levin  <ldv@strace.io>

	tests/nlattr_fib_rule_hdr: use struct strval8 instead of open-coding it.
	* tests/nlattr_fib_rule_hdr.c (main): Define proto_args[] and
	ipproto_args[] as arrays of struct strval8.

	Assisted-by: OpenCode:openai/gpt-6-sol

2026-10-11  Dmitry V. Levin  <ldv@strace.io>

	CI: add GCC 16 and Clang 20-22 jobs.
	* .github/workflows/ci.yml: Add GCC 16 and Clang 20-22 matrix entries
	on Ubuntu 26.04 and Ubuntu 26.04 ARM runners.

2026-10-11  Dmitry V. Levin  <ldv@strace.io>

	CI: add GCC 15 jobs on Ubuntu 26.04 ARM.
	Extend GCC 15 coverage to aarch64 with the same build variants used
	for the existing ARM compiler jobs.

	* .github/workflows/ci.yml: Add GCC 15 aarch64 jobs for the kheaders,
	libdw, and libunwind variants.

2026-10-11  Dmitry V. Levin  <ldv@strace.io>

	CI: move GCC 11-15 and Clang 17-19 jobs to Ubuntu 26.04.
	* .github/workflows/ci.yml: Run GCC 11-15 and Clang 17-19 matrix entries
	on Ubuntu 26.04 and Ubuntu 26.04 ARM runners.

	CI: move GCC 9-11 jobs to Ubuntu 24.04.
	* .github/workflows/ci.yml: Run GCC 9-11 matrix entries on Ubuntu 24.04
	instead of Ubuntu 22.04.

2026-10-06  Dmitry V. Levin  <ldv@strace.io>

	i386: define __FRAME_OFFSETS before #include <linux/ptrace.h>
	Starting with Linux kernel commit v7.3-rc6~2^2, defining __FRAME_OFFSETS
	is required to obtain definitions of register offset macros.

	* src/arch_defs.h [!ARCH_NEEDS_FRAME_OFFSETS]
	(ARCH_NEEDS_FRAME_OFFSETS): Define to 0.
	* src/linux/i386/arch_defs_.h (ARCH_NEEDS_FRAME_OFFSETS): Define to 1.
	* src/ptrace.h: Include "arch_defs.h".
	[ARCH_NEEDS_FRAME_OFFSETS && !__FRAME_OFFSETS] (__FRAME_OFFSETS): Define
	before #include <linux/ptrace.h>.

2026-10-06  Dmitry V. Levin  <ldv@strace.io>

	s390: fix out-of-bounds read in STHYI tail decoding.
	The PRINT_UNKNOWN_TAIL macro assumed that the declared section size
	never exceeded the backing allocation.  When decoding the top-level
	STHYI header returned by the kernel, print_sthyi_buf passed hdr->infhdln
	(a uint16_t that can reach 65535) as the tail bound, but the backing
	buffer is only PAGE_SIZE bytes, causing a stack buffer over-read inside
	strace.

	Replace the PRINT_UNKNOWN_TAIL_EX macro with a static
	print_unknown_tail function that takes an explicit available_size
	parameter and clamps all memory access to MIN(declared, available).
	When declared exceeds available, the function prints "..." to indicate
	truncation.

	Retain the PRINT_UNKNOWN_TAIL convenience macro for call sites that
	use sizeof(*hdr) as the decoded size.

	For the top-level header, pass sizeof(data) as the available bound.
	For validated section printers, pass the already-checked section size.

	* src/s390.c (print_unknown_tail): New function.
	(PRINT_UNKNOWN_TAIL_EX): Remove.
	(PRINT_UNKNOWN_TAIL): Add available_size parameter, call
	print_unknown_tail instead of removed PRINT_UNKNOWN_TAIL_EX.
	(print_sthyi_machine, print_sthyi_partition, print_sthyi_hypervisor):
	Use print_unknown_tail instead of PRINT_UNKNOWN_TAIL_EX.
	(print_sthyi_guest): Pass available_size to PRINT_UNKNOWN_TAIL.
	(print_sthyi_buf): Likewise, using sizeof(data) as the bound.
	* NEWS: Mention this change.

	Reported-by: AISLE in partnership with Red Hat
	Assisted-by: Claude:claude-opus-4-6

2026-10-05  Dmitry V. Levin  <ldv@strace.io>

	netlink: limit nested NLMSG_ERROR decoding.
	A tracee can construct deeply nested NLMSG_ERROR messages and make the
	decoder recurse until strace exhausts its stack.  Stop after eight
	nested errors, which is well beyond normal netlink error usage, and
	abbreviate the remaining payload.

	* src/netlink.c (NLMSG_ERROR_MAX_NESTING): New constant.
	(decode_nlmsgerr): Propagate the error nesting level.
	(decode_payload): Stop decoding errors at the nesting limit.
	(decode_nlmsghdr_with_payload): Propagate the error nesting level.
	(decode_netlink): Initialize the error nesting level.
	* tests/netlink_protocol.c (print_nlmsgerr_nesting_header,
	(test_nlmsgerr_nesting): New functions.
	(main): Use test_nlmsgerr_nesting.
	* NEWS: Mention this change.

	Reported-by: AISLE in partnership with Red Hat
	Assisted-by: OpenCode:gpt-5.6-sol

2026-10-04  dependabot[bot]  <49699333+dependabot[bot]@users.noreply.github.com>

	build(deps): bump codecov/codecov-action from 7.0.0 to 7.1.1.
	Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 7.0.0 to 7.1.1.
	- [Release notes](https://github.com/codecov/codecov-action/releases)
	- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
	- [Commits](https://github.com/codecov/codecov-action/compare/fb8b3582c8e4def4969c97caa2f19720cb33a72f...303a32d7a59b442fa8d48b6a1cc6825c09c847a5)

	---
	updated-dependencies:
	- dependency-name: codecov/codecov-action
	  dependency-version: 7.1.1
	  dependency-type: direct:production
	  update-type: version-update:semver-minor
	...

2026-10-04  dependabot[bot]  <49699333+dependabot[bot]@users.noreply.github.com>

	build(deps): bump redhat-plumbers-in-action/differential-shellcheck.
	Bumps [redhat-plumbers-in-action/differential-shellcheck](https://github.com/redhat-plumbers-in-action/differential-shellcheck) from 5.5.6 to 5.5.7.
	- [Release notes](https://github.com/redhat-plumbers-in-action/differential-shellcheck/releases)
	- [Changelog](https://github.com/redhat-plumbers-in-action/differential-shellcheck/blob/main/docs/CHANGELOG.md)
	- [Commits](https://github.com/redhat-plumbers-in-action/differential-shellcheck/compare/d965e66ec0b3b2f821f75c8eff9b12442d9a7d1e...f51c7c0d32777d00de777131d25918617a246415)

	---
	updated-dependencies:
	- dependency-name: redhat-plumbers-in-action/differential-shellcheck
	  dependency-version: 5.5.7
	  dependency-type: direct:production
	  update-type: version-update:semver-patch
	...

2026-09-21  Gabi Falk  <gabifalk@gmx.com>

	uid: decode gid syscalls with their own argument names.
	getresgid, setfsgid, setgid, setregid, and setresgid share the decoders
	of their uid counterparts, so -N/--arg-names labels their arguments
	ruid, euid, suid, uid, and fsuid.  Give them decoders of their own with
	the gid argument names.

	* src/uid.c (sys_getresgid, sys_setfsgid, sys_setgid, sys_setregid,
	sys_setresgid): New macros.
	(getresgid, setfsgid, setgid, setregid, setresgid): New syscall
	decoders.
	* src/syscall.h (getresgid16, setfsgid16, setgid16, setregid16,
	setresgid16): New declarations.
	* src/syscall_dummy.h (sys_getresgid, sys_getresgid16, sys_setfsgid,
	sys_setfsgid16, sys_setgid, sys_setgid16, sys_setregid, sys_setregid16,
	sys_setresgid, sys_setresgid16): Remove.
	* NEWS: Mention this fix.

	Fixes: v6.16~23 "src: annotate syscall parsers using tprints_arg_name and tprints_arg_next_name"
	Assisted-by: Claude:claude-fable-5-1

2026-09-20  Gabi Falk  <gabifalk@gmx.com>

	tests: fix epoll_pwait2 test to actually run strace.
	The epoll_pwait2 entry in gen_tests.in consists of the redirection
	9>>/dev/full alone.  gen_tests.sh treats the first argument that is
	neither an option nor a script reference as a command to run, so the
	generated test consists of a bare redirection that does nothing and
	exits successfully without ever running strace.

	* tests/gen_tests.in (epoll_pwait2): Add --trace=epoll_pwait2 before
	the redirection.

	Fixes: v6.13~42 "tests/epoll_pwait2: move opening of /dev/full to gen_tests"

2026-09-15  Dmitry V. Levin  <ldv@strace.io>

	doc: document architecture-dependent ioctl numbers and size-only MPERS.
	* doc/HOWTO_ADD_IOCTL.md: Document the case where ioctl numbers
	encode a personality-dependent struct size, causing plain case labels
	to silently fail for compat tracees, and the mask-out-size-bits fix.
	* doc/README-mpers.md: Document the size-only MPERS pattern for
	structs where only the size differs between personalities but the
	fields of interest are at personality-agnostic offsets.

	Assisted-by: Claude:claude-opus-4-6

2026-09-14  Dmitry V. Levin  <ldv@strace.io>

	tun: implement decoding of TUN/TAP ioctls.
	* src/xlat/tun_ifr_flags.in: New file.
	* src/xlat/tun_offload_features.in: Likewise.
	* src/xlat/tun_filter_flags.in: Likewise.
	* src/tun_ioctl.c: New file.
	* src/ioctl.c (T_ioctl): New function.
	(ioctl_decode) <case 'T'>: Use it.
	* src/defs.h: Add DECL_IOCTL(tun).
	* src/Makefile.am (libstrace_a_SOURCES): Add tun_ioctl.c.
	* src/sock.c (get_ifreq_size): New MPERS function.
	* tests/ioctl_tun.c: New file.
	* tests/ioctl_tun-success.c: Likewise.
	* tests/ioctl_tun-v.c: Likewise.
	* tests/ioctl_tun-v-success.c: Likewise.
	* tests/ioctl_tun-y.c: Likewise.
	* tests/ioctl_tun-y-success.c: Likewise.
	* tests/gen_tests.in (ioctl_tun, ioctl_tun-success, ioctl_tun-v,
	ioctl_tun-v-success, ioctl_tun-y, ioctl_tun-y-success): New tests.
	* tests/Makefile.am (check_PROGRAMS): Add ioctl_tun-success,
	ioctl_tun-v-success, and ioctl_tun-y-success.
	* tests/pure_executables.list: Add ioctl_tun, ioctl_tun-v,
	and ioctl_tun-y.
	* tests/.gitignore: Add ioctl_tun, ioctl_tun-success, ioctl_tun-v,
	ioctl_tun-v-success, ioctl_tun-y, and ioctl_tun-y-success.
	* NEWS: Mention this change.

	Assisted-by: Claude:claude-opus-4-6

2026-09-14  Dmitry V. Levin  <ldv@strace.io>

	bundled: add linux/include/uapi/linux/if_tun.h.
	* bundled/linux/include/uapi/linux/if_tun.h: New file,
	imported from headers_install'ed Linux kernel v7.3-rc2.
	* bundled/Makefile.am (EXTRA_DIST): Add
	linux/include/uapi/linux/if_tun.h.

	Assisted-by: Claude:claude-opus-4-6

2026-09-13  Baruch Siach  <baruch@tkos.co.il>

	defs.h: fix build with uClibc.
	Commit ee5459531280f ("open: refactor sprint_open_modes64 to support
	multiple xlat tables") added a reference to va_list, but did not add the
	required header. This breaks build with uClibc:

	In file included from bjm.c:12:
	defs.h:1060:53: error: unknown type name ‘va_list’
	 1060 |                                    enum xlat_style, va_list xlats);
	      |                                                     ^~~~~~~

	Include stdarg.h to fix the build.

2026-09-13  Dmitry V. Levin  <ldv@strace.io>

	bundled: add linux/include/uapi/{asm-generic,linux}/posix_types.h.
	* bundled/linux/include/uapi/asm-generic/posix_types.h: New file,
	imported from headers_install'ed Linux kernel v7.3-rc2.
	* bundled/linux/include/uapi/linux/posix_types.h: Likewise.
	* bundled/Makefile.am (EXTRA_DIST): Add
	linux/include/uapi/asm-generic/posix_types.h and
	linux/include/uapi/linux/posix_types.h.

	Resolves: https://github.com/strace/strace/issues/419
	Fixes: v7.2-2-g81c81227f "bundled: add linux/include/uapi/linux/time_types.h"

2026-09-10  Dmitry V. Levin  <ldv@strace.io>

	io_uring: implement decoding of ZCRX_CTRL_ADD_AREA ctrl operation.
	* src/xlat/uring_zcrx_ctrl_ops.in (ZCRX_CTRL_ADD_AREA): New constant
	introduced by Linux kernel commit v7.3-rc1~115^2~3.
	* src/io_uring.c (print_zcrx_ctrl_add_area): New function.
	(print_io_uring_zcrx_ctrl) <ZCRX_CTRL_ADD_AREA>: Use it.
	* tests/io_uring_register.c (test_IORING_REGISTER_ZCRX_CTRL): Check it.
	* NEWS: Mention this change.

	Assisted-by: Claude:claude-opus-4-6

2026-09-10  Dmitry V. Levin  <ldv@strace.io>

	io_uring: use PRINT_FIELD_OBJ_TCB_PTR macro.
	* src/io_uring.c (print_io_uring_zcrx_ifq_reg): Replace
	tprints_field_name() followed by print_io_uring_zcrx_offsets()
	invocation with PRINT_FIELD_OBJ_TCB_PTR() macro for offsets field.
	(print_io_uring_zcrx_ctrl): Replace tprints_field_name() followed by
	printer invocations with PRINT_FIELD_OBJ_TCB_PTR() macro for zc_export,
	zc_flush, and zc_arm_event fields.

	Assisted-by: Claude:claude-opus-4-6

2026-09-09  Dmitry V. Levin  <ldv@strace.io>

	landlock: implement decoding of landlock_restrict_self flags.
	* src/xlat/landlock_restrict_self_flags.in: New file.
	* src/landlock.c: Include "xlat/landlock_restrict_self_flags.h".
	(landlock_restrict_self): Use printflags with
	landlock_restrict_self_flags instead of PRINT_VAL_X.
	* tests/landlock_restrict_self.c: Include <linux/landlock.h>,
	update flags_vals to use symbolic flag names.
	* NEWS: Mention this change.

	Assisted-by: Claude:claude-opus-4-6

2026-09-09  Dmitry V. Levin  <ldv@strace.io>

	xlat: update NL80211_CMD_* constants.
	* src/xlat/genl_nl80211_cmd.in (NL80211_CMD_PROBE_CLIENT): Rename
	to NL80211_CMD_PROBE_PEER, following-up the Linux kernel commit
	v7.3-rc1~133^2~195^2~42.
	* NEWS: Mention this change.

	Assisted-by: Claude:claude-opus-4-6

2026-09-09  Dmitry V. Levin  <ldv@strace.io>

	bpf: implement decoding of bpf_link_info.
	Implement decoding of bpf_link_info for BPF_OBJ_GET_INFO_BY_FD,
	including all 15 link types (raw_tracepoint, tracing, cgroup, iter,
	netns, xdp, struct_ops, netfilter, kprobe_multi, uprobe_multi,
	tracing_multi, perf_event with sub-types, tcx, netkit, sockmap).

	struct bpf_link_info was introduced by Linux commit
	v5.8-rc1~165^2~343^2~16^2~6; the most recent addition
	(tracing_multi) was added by v7.3-rc1~134^2~187^2~2.

	* src/xlat/bpf_link_type.in: New file.
	* src/xlat/bpf_perf_event_type.in: New file.
