Re: [PATCH v12 nf-next 0/7] netfilter: Add bridge-fastpath
Nikolay Aleksandrov <[email protected]> Thu, 9 Jul 2026 12:34:37 +0300
| Newsgroups | dev.linux.lists.bridge,org.kernel.vger.netdev,org.kernel.vger.netfilter-devel |
|---|---|
| Message-ID | <[email protected]> |
On 08/07/2026 12:47, Pablo Neira Ayuso wrote: > Hi Eric, > > On Tue, Jul 07, 2026 at 11:10:38AM +0200, Eric Woudstra wrote: >> This patchset makes it possible to set up a software fastpath between >> bridged interfaces. One patch adds the flow rule for the hardware >> fastpath. This creates the possibility to have a hardware offloaded >> fastpath between bridged interfaces. More patches are added to solve >> issues found with the existing code. > > Thanks for your series. > > I posted an alternative series, including one of your patches for the > bridge vlan filtering support (which is still untested on my side): > > https://lore.kernel.org/netfilter-devel/[email protected]/T/#m270aedab59bf39f1bc4452d1d8d739a2b1b0bc45 Hi Pablo, I think I haven't been CCed on that posting, can't find it in my inbox. Anyway, I know I've acked the patch but taking a second look I think there might be a problem, specifically at patch 01: + if (netif_is_bridge_port(ctx->dev)) { + struct net_device *br_dev; + + br_dev = netdev_master_upper_dev_get_rcu((struct net_device *)ctx->dev); + if (!br_dev) + return -1; - br = netdev_priv(ctx->dev); + src = br_port_get_rcu(ctx->dev); + br = netdev_priv(br_dev); + } else { + src = NULL; + br = netdev_priv(ctx->dev); + } If ndo_fill_forward_path can be called while a port is being removed from the bridge, then we might reach this call and netif_is_bridge_port() can be false since the flag is removed before the synchronize_net() done by rx handler unregistering. Specifically if CONFIG_BRIDGE_VLAN_FILTERING is not defined then the previous synchronize_net/rcu are not done and I think we can observe a port which is being dismantled in ndo_fill_forward_path without the flag and erroneously categorized as a bridge device. I think a safer and correct approach would be to check if the device is a bridge master: } else if (netif_is_bridge_master(ctx->dev)) { ... Cheers, Nik