netfilter: bridge: release template ct on non-IP path
authorZhiling Zou <zhilinz@nebusec.ai>
Fri, 31 Jul 2026 06:36:53 +0000 (14:36 +0800)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 10 Aug 2026 18:14:01 +0000 (20:14 +0200)
A bridge nftables ct zone set rule can attach a conntrack template to
an skb before nf_ct_bridge_pre() sees it. For non-IPv4 and non-IPv6
EtherTypes, nf_ct_bridge_pre() currently overwrites skb->_nfct with
IP_CT_UNTRACKED without releasing the existing template reference.

That makes the per-cpu template, and any temporary templates allocated
for concurrent use, unreachable and leaks memory until the host runs out
of slab.

Reset the skb conntrack state before marking the frame untracked so the
existing template reference is dropped on the non-IP path.

Fixes: 3c171f496ef5 ("netfilter: bridge: add connection tracking system")
Cc: stable@vger.kernel.org
Reported-by: Vega <vega@nebusec.ai>
Signed-off-by: Zhiling Zou <zhilinz@nebusec.ai>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/bridge/netfilter/nf_conntrack_bridge.c

index 58a33d0..7ecb8a2 100644 (file)
@@ -280,6 +280,7 @@ static unsigned int nf_ct_bridge_pre(void *priv, struct sk_buff *skb,
                ret = nf_ct_br_defrag6(skb, &bridge_state);
                break;
        default:
+               nf_reset_ct(skb);
                nf_ct_set(skb, NULL, IP_CT_UNTRACKED);
                return NF_ACCEPT;
        }