netfilter: defrag: only register defrag functionality if needed
nf_defrag modules for ipv4 and ipv6 export an empty stub function. Any module that needs the defragmentation hooks registered simply 'calls' this empty function to create a phony module dependency -- modprobe will then load the defrag module too. This extends netfilter ipv4/ipv6 defragmentation modules to delay the hook registration until the functionality is requested within a network namespace instead of module load time for all namespaces. Hooks are only un-registered on module unload or when a namespace that used such defrag functionality exits. We have to use struct net for this as the register hooks can be called before netns initialization here from the ipv4/ipv6 conntrack module init path. There is no unregister functionality support, defrag will always be active once it was requested inside a net namespace. The reason is that defrag has impact on nft and iptables rulesets (without defrag we might see framents). Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Цей коміт міститься в:

зафіксовано
Pablo Neira Ayuso

джерело
481fa37347
коміт
834184b1f3
@@ -1,6 +1,7 @@
|
||||
#ifndef _NF_DEFRAG_IPV4_H
|
||||
#define _NF_DEFRAG_IPV4_H
|
||||
|
||||
void nf_defrag_ipv4_enable(void);
|
||||
struct net;
|
||||
int nf_defrag_ipv4_enable(struct net *);
|
||||
|
||||
#endif /* _NF_DEFRAG_IPV4_H */
|
||||
|
@@ -1,7 +1,8 @@
|
||||
#ifndef _NF_DEFRAG_IPV6_H
|
||||
#define _NF_DEFRAG_IPV6_H
|
||||
|
||||
void nf_defrag_ipv6_enable(void);
|
||||
struct net;
|
||||
int nf_defrag_ipv6_enable(struct net *);
|
||||
|
||||
int nf_ct_frag6_init(void);
|
||||
void nf_ct_frag6_cleanup(void);
|
||||
|
@@ -17,5 +17,11 @@ struct netns_nf {
|
||||
struct ctl_table_header *nf_log_dir_header;
|
||||
#endif
|
||||
struct nf_hook_entry __rcu *hooks[NFPROTO_NUMPROTO][NF_MAX_HOOKS];
|
||||
#if IS_ENABLED(CONFIG_NF_DEFRAG_IPV4)
|
||||
bool defrag_ipv4;
|
||||
#endif
|
||||
#if IS_ENABLED(CONFIG_NF_DEFRAG_IPV6)
|
||||
bool defrag_ipv6;
|
||||
#endif
|
||||
};
|
||||
#endif
|
||||
|
Посилання в новій задачі
Заблокувати користувача