From: Pablo Neira Ayuso <pablo@netfilter.org>
To: Daehyeon Ko <4ncienth@gmail.com>
Cc: fw@strlen.de, phil@nwl.cc, netfilter-devel@vger.kernel.org,
coreteam@netfilter.org, netdev@vger.kernel.org,
stable@vger.kernel.org
Subject: Re: [PATCH net] netfilter: conntrack: avoid recursive master destruction
Date: Fri, 2 Oct 2026 11:55:25 +0200 [thread overview]
Message-ID: <ar9_jXzMPf1zh-gi@chamomile> (raw)
In-Reply-To: <20261001180224.1018290-1-4ncienth@gmail.com>
On Fri, Oct 02, 2026 at 03:02:24AM +0900, Daehyeon Ko wrote:
> Conntrack entries created through ctnetlink can reference another
> confirmed entry as their master. There is no limit on the resulting
> chain depth.
Then, just limit ctnetlink because this makes no sense.
> When the last external reference to such a chain is dropped,
> nf_ct_destroy() puts the master reference. If that is the master's last
> reference, nf_ct_put() invokes nf_ct_destroy() recursively. A sufficiently
> long chain therefore exhausts the task stack.
>
> Release the master reference directly. When it was the final reference,
> continue destroying it in the current invocation. This keeps the existing
> refcount and lifetime rules while bounding stack use.
>
> Fixes: 5faa1f4cb5a1 ("[NETFILTER]: nf_conntrack_netlink: add support to related connections")
> Cc: stable@vger.kernel.org
> Assisted-by: LLM
> Signed-off-by: Daehyeon Ko <4ncienth@gmail.com>
> ---
> Tested on net e23a64eb244356ee47c0620f0722d51bd88db522 and exact
> v6.12.105. A source reproducer and userns launcher are available privately
> on request and are intentionally omitted from this public posting.
>
> The trigger needs CONFIG_USER_NS, CONFIG_NET_NS, CONFIG_NF_CONNTRACK and
> CONFIG_NF_CT_NETLINK. Host UID 65534 used only namespace-local
> CAP_NET_ADMIN. The essential vulnerable trace is:
>
> BUG: TASK stack guard page was hit at ffffc90001197ff8
> CPU: 1 UID: 65534 PID: 178 Comm: conntrack-maste
> nf_ct_destroy+0x1ac/0x5f0 (repeated)
>
> Fixed current and LTS 6,000-entry runs ended with nf_conntrack_count=0 and
> no crash marker. The netdev allyesconfig and allmodconfig W=1 full builds
> were not run.
>
> net/netfilter/nf_conntrack_core.c | 15 +++++++++++++--
> 1 file changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
> index d0d9e5ea84a09..0ce6141b3dfd7 100644
> --- a/net/netfilter/nf_conntrack_core.c
> +++ b/net/netfilter/nf_conntrack_core.c
> @@ -592,6 +592,10 @@ static void warn_on_keymap_list_leak(const struct net *net)
> void nf_ct_destroy(struct nf_conntrack *nfct)
> {
> struct nf_conn *ct = (struct nf_conn *)nfct;
> + struct nf_conn *master;
> + bool destroy_master;
> +
> +again:
>
> WARN_ON(refcount_read(&nfct->use) != 0);
>
> @@ -610,10 +614,17 @@ void nf_ct_destroy(struct nf_conntrack *nfct)
> */
> nf_ct_remove_expectations(ct);
>
> - if (ct->master)
> - nf_ct_put(ct->master);
> + master = ct->master;
> + destroy_master = master &&
> + refcount_dec_and_test(&master->ct_general.use);
>
> nf_conntrack_free(ct);
> +
> + if (destroy_master) {
> + ct = master;
> + nfct = &ct->ct_general;
> + goto again;
> + }
> }
> EXPORT_SYMBOL(nf_ct_destroy);
>
> --
> 2.55.0
next prev parent reply other threads:[~2026-10-02 9:55 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-01 18:02 [PATCH net] netfilter: conntrack: avoid recursive master destruction Daehyeon Ko
2026-10-01 19:19 ` Florian Westphal
2026-10-02 5:39 ` Daehyeon Ko
2026-10-02 9:56 ` Pablo Neira Ayuso
2026-10-02 9:55 ` Pablo Neira Ayuso
2026-10-02 9:55 ` Pablo Neira Ayuso [this message]
2026-10-02 16:56 ` [PATCH v2 net] netfilter: conntrack: reject nested ctnetlink master chains Daehyeon Ko
2026-10-02 16:58 ` netdev-bot+sinfo
2026-10-02 17:35 ` Florian Westphal
2026-10-06 7:57 ` netdev-bot+sashiko
2026-10-07 1:33 ` Daehyeon Ko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ar9_jXzMPf1zh-gi@chamomile \
--to=pablo@netfilter.org \
--cc=4ncienth@gmail.com \
--cc=coreteam@netfilter.org \
--cc=fw@strlen.de \
--cc=netdev@vger.kernel.org \
--cc=netfilter-devel@vger.kernel.org \
--cc=phil@nwl.cc \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.