netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH nf v2] netfilter: conntrack: Avoid nf_ct_helper_hash uses after free
@ 2023-07-03 14:52 Florent Revest
  2023-07-03 15:22 ` Florian Westphal
  0 siblings, 1 reply; 2+ messages in thread
From: Florent Revest @ 2023-07-03 14:52 UTC (permalink / raw)
  To: netfilter-devel, coreteam, netdev, linux-kernel, bpf
  Cc: pablo, kadlec, fw, davem, edumazet, kuba, pabeni, kpsingh,
	stable, Florent Revest

If nf_conntrack_init_start() fails (for example due to a
register_nf_conntrack_bpf() failure), the nf_conntrack_helper_fini()
clean-up path frees the nf_ct_helper_hash map.

When built with NF_CONNTRACK=y, further netfilter modules (e.g:
netfilter_conntrack_ftp) can still be loaded and call
nf_conntrack_helpers_register(), independently of whether nf_conntrack
initialized correctly. This accesses the nf_ct_helper_hash dangling
pointer and causes a uaf, possibly leading to random memory corruption.

This patch guards nf_conntrack_helper_register() from accessing a freed
or uninitialized nf_ct_helper_hash pointer and fixes possible
uses-after-free when loading a conntrack module.

Cc: stable@vger.kernel.org
Fixes: 12f7a505331e ("netfilter: add user-space connection tracking helper infrastructure")
Signed-off-by: Florent Revest <revest@chromium.org>
---
 net/netfilter/nf_conntrack_helper.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/net/netfilter/nf_conntrack_helper.c b/net/netfilter/nf_conntrack_helper.c
index 0c4db2f2ac43..f22691f83853 100644
--- a/net/netfilter/nf_conntrack_helper.c
+++ b/net/netfilter/nf_conntrack_helper.c
@@ -360,6 +360,9 @@ int nf_conntrack_helper_register(struct nf_conntrack_helper *me)
 	BUG_ON(me->expect_class_max >= NF_CT_MAX_EXPECT_CLASSES);
 	BUG_ON(strlen(me->name) > NF_CT_HELPER_NAME_LEN - 1);
 
+	if (!nf_ct_helper_hash)
+		return -ENOENT;
+
 	if (me->expect_policy->max_expected > NF_CT_EXPECT_MAX_CNT)
 		return -EINVAL;
 
@@ -515,4 +518,5 @@ int nf_conntrack_helper_init(void)
 void nf_conntrack_helper_fini(void)
 {
 	kvfree(nf_ct_helper_hash);
+	nf_ct_helper_hash = NULL;
 }
-- 
2.41.0.255.g8b1d071c50-goog


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH nf v2] netfilter: conntrack: Avoid nf_ct_helper_hash uses after free
  2023-07-03 14:52 [PATCH nf v2] netfilter: conntrack: Avoid nf_ct_helper_hash uses after free Florent Revest
@ 2023-07-03 15:22 ` Florian Westphal
  0 siblings, 0 replies; 2+ messages in thread
From: Florian Westphal @ 2023-07-03 15:22 UTC (permalink / raw)
  To: Florent Revest
  Cc: netfilter-devel, coreteam, netdev, linux-kernel, bpf, pablo,
	kadlec, fw, davem, edumazet, kuba, pabeni, kpsingh, stable

Florent Revest <revest@chromium.org> wrote:
> If nf_conntrack_init_start() fails (for example due to a
> register_nf_conntrack_bpf() failure), the nf_conntrack_helper_fini()
> clean-up path frees the nf_ct_helper_hash map.
> 
> When built with NF_CONNTRACK=y, further netfilter modules (e.g:
> netfilter_conntrack_ftp) can still be loaded and call
> nf_conntrack_helpers_register(), independently of whether nf_conntrack
> initialized correctly. This accesses the nf_ct_helper_hash dangling
> pointer and causes a uaf, possibly leading to random memory corruption.
> 
> This patch guards nf_conntrack_helper_register() from accessing a freed
> or uninitialized nf_ct_helper_hash pointer and fixes possible
> uses-after-free when loading a conntrack module.

Reviewed-by: Florian Westphal <fw@strlen.de>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-07-03 15:23 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-03 14:52 [PATCH nf v2] netfilter: conntrack: Avoid nf_ct_helper_hash uses after free Florent Revest
2023-07-03 15:22 ` Florian Westphal

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).