mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 03:27:30 -04:00
netfilter: nf_conntrack_expect: zero at allocation time
There are occasional LLM hints wrt. leaking uninitialized data to userspace via ctnetlink. Just zero at allocation time, expectations are not frequently used these days. Intentionally keeps _init as-is because we could theoretically support re-init, so add the missing exp->dir there. Signed-off-by: Florian Westphal <fw@strlen.de>
This commit is contained in:
@@ -306,7 +306,7 @@ struct nf_conntrack_expect *nf_ct_expect_alloc(struct nf_conn *me)
|
||||
{
|
||||
struct nf_conntrack_expect *new;
|
||||
|
||||
new = kmem_cache_alloc(nf_ct_expect_cachep, GFP_ATOMIC);
|
||||
new = kmem_cache_zalloc(nf_ct_expect_cachep, GFP_ATOMIC);
|
||||
if (!new)
|
||||
return NULL;
|
||||
|
||||
@@ -391,6 +391,7 @@ void nf_ct_expect_init(struct nf_conntrack_expect *exp, unsigned int class,
|
||||
#if IS_ENABLED(CONFIG_NF_NAT)
|
||||
memset(&exp->saved_addr, 0, sizeof(exp->saved_addr));
|
||||
memset(&exp->saved_proto, 0, sizeof(exp->saved_proto));
|
||||
exp->dir = 0;
|
||||
#endif
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nf_ct_expect_init);
|
||||
|
||||
@@ -3549,8 +3549,6 @@ ctnetlink_alloc_expect(const struct nlattr * const cda[], struct nf_conn *ct,
|
||||
if (cda[CTA_EXPECT_FLAGS]) {
|
||||
exp->flags = ntohl(nla_get_be32(cda[CTA_EXPECT_FLAGS]));
|
||||
exp->flags &= ~NF_CT_EXPECT_USERSPACE;
|
||||
} else {
|
||||
exp->flags = 0;
|
||||
}
|
||||
if (cda[CTA_EXPECT_FN]) {
|
||||
const char *name = nla_data(cda[CTA_EXPECT_FN]);
|
||||
@@ -3562,8 +3560,7 @@ ctnetlink_alloc_expect(const struct nlattr * const cda[], struct nf_conn *ct,
|
||||
goto err_out;
|
||||
}
|
||||
exp->expectfn = expfn->expectfn;
|
||||
} else
|
||||
exp->expectfn = NULL;
|
||||
}
|
||||
|
||||
exp->class = class;
|
||||
exp->master = ct;
|
||||
@@ -3583,12 +3580,6 @@ ctnetlink_alloc_expect(const struct nlattr * const cda[], struct nf_conn *ct,
|
||||
exp, nf_ct_l3num(ct));
|
||||
if (err < 0)
|
||||
goto err_out;
|
||||
#if IS_ENABLED(CONFIG_NF_NAT)
|
||||
} else {
|
||||
memset(&exp->saved_addr, 0, sizeof(exp->saved_addr));
|
||||
memset(&exp->saved_proto, 0, sizeof(exp->saved_proto));
|
||||
exp->dir = 0;
|
||||
#endif
|
||||
}
|
||||
return exp;
|
||||
err_out:
|
||||
|
||||
Reference in New Issue
Block a user