Prepare for 7.3 release. Update copyright headers. Headers updated automatically using maint/update_copyright_years.sh script. 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|e ndif|define|pragma)[[:space:]]' src tests |grep -Ev '\.(in|md|sh|test)$') |while read f; do cppi < "$f" > "$f".cppi; mv "$f".cppi "$f" done 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 in separate translation units to avoid conflicts with libc time definitions. Assisted-by: OpenCode:gpt-6-sol 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. 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. Suggested-by: Dmitry V. Levin Link: #discussion_r3830577708 Assisted-by: OpenCode:gpt-6-sol 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 in a separate test compilation unit to avoid conflicts with libc time definitions in the test program. Assisted-by: OpenCode:gpt-6-sol 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. 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. Assisted-by: OpenCode:gpt-6-sol 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. Assisted-by: Antigravity:Gemini-3.5-Flash (commit log) Assisted-by: OpenCode:gpt-6-sol 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//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. Assisted-by: OpenCode:gpt-6-sol 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. Assisted-by: OpenCode:gpt-6-sol strace: translate procfs PIDs in attach failure diagnostics. On an EPERM attach, proc_pid_tracer looked up /proc//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. Assisted-by: OpenCode:gpt-6-sol 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//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. Assisted-by: OpenCode:gpt-6-sol unshare: use procfs PID when reporting namespace IDs. Like setns, the unshare decoder read /proc//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. Assisted-by: OpenCode:gpt-6-sol 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//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. Assisted-by: OpenCode:gpt-6-sol 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. Assisted-by: OpenCode:gpt-6-sol 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. Assisted-by: OpenCode:gpt-6-sol tests: parameterize setns namespace ID test. Make the network namespace test reusable for other namespace types while preserving its existing explicit-nstype coverage. Assisted-by: OpenCode:gpt-6-sol 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. Assisted-by: OpenCode:gpt-6-sol 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. Assisted-by: Antigravity:Gemini-3.5-Flash Assisted-by: OpenCode:gpt-6-sol tests: consistently use CLONE_* constants instead of numeric values. tests/attach-p-eperm-already-traced.test: synchronize using FIFOs. 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. Assisted-by: Codex:GPT-6 Assisted-by: OpenCode:openai/gpt-6-sol Update ioctl entries from linux v7.3. doc: document bundled header update script. Assisted-by: OpenCode:openai/gpt-6-sol doc: correct developer documentation against current tree. Assisted-by: OpenCode:openai/gpt-6-sol 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. Fixes: Assisted-by: Codex:GPT-6 Bring various lists back to the sorted order. 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. Assisted-by: OpenCode:gpt-6-sol rtnl_link: decode IFLA_INFO_DATA for macvlan devices. Assisted-by: OpenCode:gpt-6-sol 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. tests: use struct strival_long instead of open-coding it. Assisted-by: OpenCode:openai/gpt-6-sol tests/tests.h: define struct strival_long. Assisted-by: OpenCode:openai/gpt-6-sol tests: use struct strval32 instead of open-coding it. Assisted-by: OpenCode:openai/gpt-6-sol tests: use struct strval_klong instead of open-coding it. Assisted-by: OpenCode:openai/gpt-6-sol tests/sol_tipc-importance: use struct strival32 instead of open-coding it Assisted-by: OpenCode:openai/gpt-6-sol tests/nlattr_fib_rule_hdr: use struct strval8 instead of open-coding it. Assisted-by: OpenCode:openai/gpt-6-sol CI: add GCC 16 and Clang 20-22 jobs. 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. CI: move GCC 11-15 and Clang 17-19 jobs to Ubuntu 26.04. CI: move GCC 9-11 jobs to Ubuntu 24.04. i386: define __FRAME_OFFSETS before #include Starting with Linux kernel commit v7.3-rc6~2^2, defining __FRAME_OFFSETS is required to obtain definitions of register offset macros. 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. Reported-by: AISLE in partnership with Red Hat Assisted-by: Claude:claude-opus-4-6 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. Reported-by: AISLE in partnership with Red Hat Assisted-by: OpenCode:gpt-5.6-sol 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/fb8b3582c8e4def496 9c97caa2f19720cb33a72f...303a32d7a59b442fa8d48b6a1cc6825c09c847a5) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-version: 7.1.1 dependency-type: direct:production update-type: version-update:semver-minor ... 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...f51c7c0d32777d00de777131d2 5918617a246415) --- 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 ... 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. Fixes: v6.16~23 "src: annotate syscall parsers using tprints_arg_name and tprints_arg_next_name" Assisted-by: Claude:claude-fable-5-1 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. Fixes: v6.13~42 "tests/epoll_pwait2: move opening of /dev/full to gen_tests" doc: document architecture-dependent ioctl numbers and size-only MPERS. Assisted-by: Claude:claude-opus-4-6 tun: implement decoding of TUN/TAP ioctls. Assisted-by: Claude:claude-opus-4-6 bundled: add linux/include/uapi/linux/if_tun.h. Assisted-by: Claude:claude-opus-4-6 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. bundled: add linux/include/uapi/{asm-generic,linux}/posix_types.h. Resolves: Fixes: v7.2-2-g81c81227f "bundled: add linux/include/uapi/linux/time_types.h" io_uring: implement decoding of ZCRX_CTRL_ADD_AREA ctrl operation. Assisted-by: Claude:claude-opus-4-6 io_uring: use PRINT_FIELD_OBJ_TCB_PTR macro. Assisted-by: Claude:claude-opus-4-6 landlock: implement decoding of landlock_restrict_self flags. Assisted-by: Claude:claude-opus-4-6 xlat: update NL80211_CMD_* constants. Assisted-by: Claude:claude-opus-4-6 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. Assisted-by: Claude:claude-opus-4-6 bpf_attr: fix generators to produce correct nested member checks. Both generators treated all fields as flat members of the top-level struct, ignoring nesting. For structs with named union members (like bpf_link_info_struct and BPF_LINK_CREATE_struct), this produced wrong member paths (e.g. "tp_name" instead of "raw_tracepoint.tp_name"), causing AC_CHECK_MEMBERS probes and static_assert checks to silently fail. Fields with the same name in different union branches (e.g. "cookie" in raw_tracepoint, tracing, kprobe) collapsed to a single entry after sort -u. Since is bundled, all struct and union members defined in it are always available, so there is no need to check for their existence. Remove the st_BPF_ATTR macro from configure along with the m4/gen_bpf_attr_m4.sh generator that produced it. Make the static_assert size and offset checks in gen_bpf_attr_check.sh unconditional. Assisted-by: Claude:claude-opus-4-6 bpf_attr: add missing /* skip check */ for expected_revision. The expected_revision fields inside the netkit and cgroup members of BPF_LINK_CREATE_struct are missing the /* skip check */ annotation that the same field in the tcx member has, causing the generators to emit incorrect checks for these broken UAPI members. Fixes: v6.18~14 "bpf: decode struct netkit of BPF_LINK_CREATE command" Fixes: v6.18~13 "bpf: decode struct cgroup of BPF_LINK_CREATE command" Assisted-by: Claude:claude-opus-4-6 build: include unconditionally. Since is bundled, there is no need to check for its existence. bundled: add linux/include/uapi/linux/bpf{,_common}.h. userfaultfd: implement decoding of UFFDIO_SET_MODE ioctl. Assisted-by: Claude:claude-opus-4-6 userfaultfd: implement decoding of UFFDIO_RWPROTECT ioctl. Assisted-by: Claude:claude-opus-4-6 xlat: update userfaultfd constants for RWP support. Assisted-by: Claude:claude-opus-4-6 userfaultfd: implement decoding of UFFDIO_MOVE ioctl. Assisted-by: Claude:claude-opus-4-6 xlat: add missing UFFDIO_CONTINUE_MODE_WP constant. Assisted-by: Claude:claude-opus-4-6 Implement decoding of fchroot syscall. This new syscall was introduced by Linux kernel commit v7.3-rc1~236^2^2~4, and hooked up for all architectures by commit v7.3-rc1~236^2^2~2. Its fd argument accepts the FD_FAILFS_ROOT sentinel, added by commit v7.3-rc1~236^2^2~3. Assisted-by: Claude:claude-sonnet-4-5 xlat: update V4L2_META_FMT_* constants. Assisted-by: Claude:claude-sonnet-4-5 rtnl_route: implement decoding of RTA_DEL_REASON attribute. Assisted-by: Claude:claude-sonnet-4-5 rtnl_nh: implement decoding of NHA_DST_PORT attribute. Assisted-by: Claude:claude-sonnet-4-5 rtnl_nh: implement decoding of NHA_HW_STATS_* attributes. Assisted-by: Claude:claude-sonnet-4-5 rtnl_nh: implement decoding of NHA_GROUP_STATS attribute. Assisted-by: Claude:claude-sonnet-4-5 rtnl_nh: implement decoding of NHA_OP_FLAGS attribute. Assisted-by: Claude:claude-sonnet-4-5 src/xlat/rtnl_nexthop_attrs.in: remove fallback definitions. rtnl_addr: implement IFA_MC_USERS attribute decoding. Assisted-by: Claude:claude-sonnet-4-5 rtnl_addr: add a comment about AF_PHONET and AF_MCTP address attributes. AF_PHONET and AF_MCTP implement support for these attributes, but current decoding format is seemingly good enough as it is; add a comment that this, in fact, has been taken into account already. src/rtnl_addr.c (decode_ifa_address): Add a comment about IFA_* address-like attributes in AF_PHONET and AF_MCTP. rtml_addr: print second values for cstamp/tstamp fields of struct ifa_cacheinfo cstamp and tstamp fields' scale is 1/100th of a second, and it is not obvious from their names, so it seems prudent to provide the information about the value of these fields in seconds as a comment. rtnl_addr: print the INFINITY_LIFE_TIME hint. The value 0xffffffff of ifa_prefered and ifa_valid fields of struct ifa_cacheinfo is treated as infinite lifetime by the kernel, and internally it even has the appropriate constant defined, INFINITY_LIFE_TIME (in include/net/addrconf.h); unfortunately, this constant is not exposed to UAPI and cannot be freely used; however, it can be printed as a comment to provide a hint to the user that the relevant fields values are treated in a special way (especially considering the fact that they are normally printed in decimal and it is not obvious that the value 4294967295 might be treated differently by the look of it). rtnl_addr: implement IFA_PROTO attribute decoding. Introduced by Linux commit v5.18-rc1~136^2~308. rtnl_addr: use decode_nla_flags for implementing decoding_ifa_flags. ...instead of open-coding it. tests: extend nlattr_ifaddrmsg test. Extend the nlattr_ifaddrmsg test to provide comprehensive coverage of the netlink interface address message decoder across all xlat verbosity modes, address families, and attribute types. This enables the test to catch future regressions in the decoder implementation. tests: add check_s32_nlattr to test_nlattr.h. To provide an ability to easily check s32 attributes. tests: add TEST_NLATTR_OBJPTR_EX_ to test_nlattr.h. To have ability to pass pointers to objects instead of objects themselves. tests: move ARR_ITEM to tests.h. It is used in two tests already, and is going to be used in a third one. xlat: update *_MAGIC filesystem constants. Assisted-by: Claude:claude-sonnet-4-5 xlat: update KVM_CAP_* constants. Assisted-by: Claude:claude-sonnet-4-5 xlat: update ATA_CMD_* constants. Assisted-by: Claude:claude-sonnet-4-5 net: implement decoding of SO_RIGHTS_NOTRUNC socket option. Assisted-by: Claude:claude-sonnet-4-5 bundled: update linux UAPI headers to v7.3-rc1. Headers updated automatically using update-bundled-headers.sh script. Assume linux/time_types.h provides all necessary types. Since linux/time_types.h is bundled, there is no need to check whether it provides the types we use. bundled: add linux/include/uapi/linux/time_types.h. Resolves: Fixes: v7.0~44 "bundled: update linux UAPI headers to v7.0-rc3" Post-release administrivia.