]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
netfilter: nf_tables: fix memory leak in nf_tables_newrule()
authorZilin Guan <zilin@seu.edu.cn>
Wed, 24 Dec 2025 12:48:26 +0000 (12:48 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 19 Jan 2026 12:10:16 +0000 (13:10 +0100)
[ Upstream commit d077e8119ddbb4fca67540f1a52453631a47f221 ]

In nf_tables_newrule(), if nft_use_inc() fails, the function jumps to
the err_release_rule label without freeing the allocated flow, leading
to a memory leak.

Fix this by adding a new label err_destroy_flow and jumping to it when
nft_use_inc() fails. This ensures that the flow is properly released
in this error case.

Fixes: 1689f25924ada ("netfilter: nf_tables: report use refcount overflow")
Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/netfilter/nf_tables_api.c

index 91b012e476be67fa1685425c862e1575dd3c7ecd..e37d2ef9538e50d66c46d39be0eb7750fc0baad5 100644 (file)
@@ -3741,7 +3741,7 @@ static int nf_tables_newrule(struct sk_buff *skb, const struct nfnl_info *info,
 
        if (!nft_use_inc(&chain->use)) {
                err = -EMFILE;
-               goto err_release_rule;
+               goto err_destroy_flow;
        }
 
        if (info->nlh->nlmsg_flags & NLM_F_REPLACE) {
@@ -3791,6 +3791,7 @@ static int nf_tables_newrule(struct sk_buff *skb, const struct nfnl_info *info,
 
 err_destroy_flow_rule:
        nft_use_dec_restore(&chain->use);
+err_destroy_flow:
        if (flow)
                nft_flow_rule_destroy(flow);
 err_release_rule: