[PATCH net v4 0/7] net: require CAP_NET_ADMIN in the device netns for tunnel changelink
From: Maoyi Xie <hidden>
Date: 2026-06-09 16:31:18
Also in:
lkml, stable
A tunnel changelink rewrites the tunnel in its creation netns. After an
IFLA_NET_NS_FD migration that creation netns is not the caller's. The
rtnl changelink path only checks CAP_NET_ADMIN against the caller's
netns, so a caller with caps only in its current netns can rewrite a
tunnel that lives in the creation netns, and it picks the endpoint
addresses. Commit 8b484efd5cb4 ("ip6: vti: Use ip6_tnl.net in
vti6_siocdevprivate().") added the same check on the ioctl path. This
series adds it on the RTM_NEWLINK path.
Each changelink is gated at the top of the op, before any attribute is
parsed, because the per-type parsers can update live tunnel fields first.
For example ipgre_netlink_parms() sets t->collect_md before
ip_tunnel_changelink() runs. The check is skipped when the creation netns
equals the device's current netns, where the rtnl path already checked
the cap.
This is the same fix as v3, restructured after Paolo's review:
- Split into one patch per tunnel, each with its own Fixes tag.
- Move the repeated check into a helper, net_admin_capable(), added in
patch 1 and used by the rest of the series.
Tested on net/main. For every tunnel type in the series a migrated
fake-root changelink is rejected with EPERM. For vti6 SIOCGETTUNNEL
confirms the creation netns hash is left unchanged. Legit non-migrated
changelinks still succeed.
v3: https://lore.kernel.org/netdev/20260604125055.3254652-1-maoyixie.tju@gmail.com/ (local)
v2: https://lore.kernel.org/netdev/20260601034148.1272080-1-maoyixie.tju@gmail.com/ (local)
v1: https://lore.kernel.org/netdev/20260527070824.2677331-1-maoyixie.tju@gmail.com/ (local)
Maoyi Xie (7):
net: ip_gre: require CAP_NET_ADMIN in the device netns for changelink
net: ipip: require CAP_NET_ADMIN in the device netns for changelink
net: ip_vti: require CAP_NET_ADMIN in the device netns for changelink
net: ip6_tunnel: require CAP_NET_ADMIN in the device netns for
changelink
net: ip6_gre: require CAP_NET_ADMIN in the device netns for changelink
net: ip6_vti: require CAP_NET_ADMIN in the device netns for changelink
xfrm: xfrm_interface: require CAP_NET_ADMIN in the device netns for
changelink
include/net/net_namespace.h | 18 ++++++++++++++++++
net/ipv4/ip_gre.c | 6 ++++++
net/ipv4/ip_vti.c | 3 +++
net/ipv4/ipip.c | 3 +++
net/ipv6/ip6_gre.c | 6 ++++++
net/ipv6/ip6_tunnel.c | 3 +++
net/ipv6/ip6_vti.c | 3 +++
net/xfrm/xfrm_interface_core.c | 3 +++
8 files changed, 45 insertions(+)
base-commit: 0aa05daef7848a5ac11158949dc73cd741995dc1
--
2.34.1