netfilter: conntrack: avoid use-after free on rmmod
When the conntrack module is removed, we call nf_ct_iterate_destroy via
nf_ct_l4proto_unregister().
Problem is that nf_conntrack_proto_fini() gets called after the
conntrack hash table has already been freed.
Just remove the l4proto unregister call, its unecessary as the
nf_ct_protos[] array gets free'd right after anyway.
v2: add comment wrt. missing unreg call.
Fixes: a0ae2562c6
("netfilter: conntrack: remove l3proto abstraction")
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
7bdfcea875
commit
020f6cc5f7
@ -940,14 +940,13 @@ void nf_conntrack_proto_fini(void)
|
|||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
nf_ct_l4proto_unregister(builtin_l4proto,
|
|
||||||
ARRAY_SIZE(builtin_l4proto));
|
|
||||||
nf_unregister_sockopt(&so_getorigdst);
|
nf_unregister_sockopt(&so_getorigdst);
|
||||||
#if IS_ENABLED(CONFIG_IPV6)
|
#if IS_ENABLED(CONFIG_IPV6)
|
||||||
nf_unregister_sockopt(&so_getorigdst6);
|
nf_unregister_sockopt(&so_getorigdst6);
|
||||||
#endif
|
#endif
|
||||||
|
/* No need to call nf_ct_l4proto_unregister(), the register
|
||||||
/* free l3proto protocol tables */
|
* tables are free'd here anyway.
|
||||||
|
*/
|
||||||
for (i = 0; i < ARRAY_SIZE(nf_ct_protos); i++)
|
for (i = 0; i < ARRAY_SIZE(nf_ct_protos); i++)
|
||||||
kfree(nf_ct_protos[i]);
|
kfree(nf_ct_protos[i]);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user