* [PATCH net] net: bridge: Reject descending VLAN tunnel ranges
@ 2026-08-14 13:40 Ruoyu Wang
2026-08-16 7:33 ` Nikolay Aleksandrov
0 siblings, 1 reply; 2+ messages in thread
From: Ruoyu Wang @ 2026-08-14 13:40 UTC (permalink / raw)
To: Nikolay Aleksandrov, Ido Schimmel, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman
Cc: bridge, netdev, linux-kernel, Ruoyu Wang
A pair of descending VLAN and tunnel IDs can pass the tunnel range span
check. The VLAN subtraction produces a negative int, which is converted
to unsigned when compared with the u32 tunnel ID subtraction. It can
therefore equal the wrapped tunnel ID delta.
The range loop then performs no iterations. Since the batched
notification handling added a post-loop error check, this leaves err
uninitialized and makes the request's return value unpredictable.
Reject descending VLAN ranges before comparing the spans. Valid
ascending and single-entry ranges remain unchanged, while malformed
descending ranges consistently return -EINVAL.
This issue was found by a static analysis checker and confirmed by
manual source review.
Fixes: 94339443686b ("net: bridge: notify on vlan tunnel changes done via the old api")
Signed-off-by: Ruoyu Wang <ruoyuw560@gmail.com>
---
net/bridge/br_netlink_tunnel.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/net/bridge/br_netlink_tunnel.c b/net/bridge/br_netlink_tunnel.c
index 71a12da30004c..05f560eeb789c 100644
--- a/net/bridge/br_netlink_tunnel.c
+++ b/net/bridge/br_netlink_tunnel.c
@@ -301,7 +301,8 @@ int br_process_vlan_tunnel_info(const struct net_bridge *br,
if (!(tinfo_last->flags & BRIDGE_VLAN_INFO_RANGE_BEGIN))
return -EINVAL;
- if ((tinfo_curr->vid - tinfo_last->vid) !=
+ if (tinfo_curr->vid < tinfo_last->vid ||
+ (tinfo_curr->vid - tinfo_last->vid) !=
(tinfo_curr->tunid - tinfo_last->tunid))
return -EINVAL;
t = tinfo_last->tunid;
--
2.51.0
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH net] net: bridge: Reject descending VLAN tunnel ranges
2026-08-14 13:40 [PATCH net] net: bridge: Reject descending VLAN tunnel ranges Ruoyu Wang
@ 2026-08-16 7:33 ` Nikolay Aleksandrov
0 siblings, 0 replies; 2+ messages in thread
From: Nikolay Aleksandrov @ 2026-08-16 7:33 UTC (permalink / raw)
To: Ruoyu Wang, Ido Schimmel, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman
Cc: bridge, netdev, linux-kernel
On 14/08/2026 16:40, Ruoyu Wang wrote:
> A pair of descending VLAN and tunnel IDs can pass the tunnel range span
> check. The VLAN subtraction produces a negative int, which is converted
> to unsigned when compared with the u32 tunnel ID subtraction. It can
> therefore equal the wrapped tunnel ID delta.
>
> The range loop then performs no iterations. Since the batched
> notification handling added a post-loop error check, this leaves err
> uninitialized and makes the request's return value unpredictable.
>
> Reject descending VLAN ranges before comparing the spans. Valid
> ascending and single-entry ranges remain unchanged, while malformed
> descending ranges consistently return -EINVAL.
>
> This issue was found by a static analysis checker and confirmed by
> manual source review.
>
> Fixes: 94339443686b ("net: bridge: notify on vlan tunnel changes done via the old api")
> Signed-off-by: Ruoyu Wang <ruoyuw560@gmail.com>
> ---
> net/bridge/br_netlink_tunnel.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/net/bridge/br_netlink_tunnel.c b/net/bridge/br_netlink_tunnel.c
> index 71a12da30004c..05f560eeb789c 100644
> --- a/net/bridge/br_netlink_tunnel.c
> +++ b/net/bridge/br_netlink_tunnel.c
> @@ -301,7 +301,8 @@ int br_process_vlan_tunnel_info(const struct net_bridge *br,
>
> if (!(tinfo_last->flags & BRIDGE_VLAN_INFO_RANGE_BEGIN))
> return -EINVAL;
> - if ((tinfo_curr->vid - tinfo_last->vid) !=
> + if (tinfo_curr->vid < tinfo_last->vid ||
> + (tinfo_curr->vid - tinfo_last->vid) !=
> (tinfo_curr->tunid - tinfo_last->tunid))
> return -EINVAL;
> t = tinfo_last->tunid;
Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-08-16 7:33 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-14 13:40 [PATCH net] net: bridge: Reject descending VLAN tunnel ranges Ruoyu Wang
2026-08-16 7:33 ` Nikolay Aleksandrov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox