[PATCH net v4 0/3] tipc: fix netlink gate and receive-path bugs

From: Michael Bommarito

Date: Wed Jun 10 2026 - 08:43:01 EST


This is v4 of the public TIPC series. The only change from v3 is in
patch 1: TIPC_NL_MEDIA_SET now uses GENL_UNS_ADMIN_PERM like the other
mutators, instead of GENL_ADMIN_PERM, so the whole series uses the
namespace-aware CAP_NET_ADMIN check that matches the legacy TIPC netlink
path. Patches 2 and 3 are unchanged.

Patch 1 gives the TIPCv2 mutating generic-netlink operations the admin
gate the legacy API already has, so a local unprivileged process can no
longer change TIPC state. Patch 2 drops CONN_ACK messages that
acknowledge more outstanding sends than exist, preventing the
snt_unacked underflow. Patch 3 rejects peer bindings with lower > upper,
which would otherwise leak binding-table memory.

Changes in v4:

- Patch 1: use GENL_UNS_ADMIN_PERM for TIPC_NL_MEDIA_SET as well,
rather than GENL_ADMIN_PERM. This keeps the same namespace-aware
CAP_NET_ADMIN check that netlink_net_capable() performs on the
legacy path, so CAP_NET_ADMIN holders in a non-initial user
namespace (containers) keep working (Tung Quang Nguyen).

Changes in v3:

- Drop the discovery-message length patch; tipc_msg_validate()
already rejects the short messages it guarded against (Tung Quang
Nguyen).
- Patch 2 (snt_unacked): drop the conn_ack local and test
tsk->snt_unacked against msg_conn_ack() inline (Tung Quang Nguyen).
- Patch 3 (inverted ranges): restructure the declaration block, moving
ua below key at the maintainer's request (Tung Quang Nguyen).

Changes in v2:

- Patch 1 uses GENL_ADMIN_PERM for TIPC_NL_MEDIA_SET and
GENL_UNS_ADMIN_PERM for the netns-scoped mutators.
- Patch 2 validates msg_conn_ack() at the start of the CONN_ACK block
and drops invalid messages instead of capping the value.
- Patch 3 reorders the new u32 declarations in reverse-Xmas-tree order.

Michael Bommarito (3):
tipc: require net admin for TIPCv2 netlink mutators
tipc: prevent snt_unacked underflow on CONN_ACK
tipc: reject inverted service ranges from peer bindings

net/tipc/name_distr.c | 13 +++++++++++--
net/tipc/netlink.c | 12 ++++++++++++
net/tipc/socket.c | 3 +++
3 files changed, 26 insertions(+), 2 deletions(-)

--
2.53.0