static int udp_init_net(struct net *net, u_int16_t proto) { int ret; struct nf_udp_net *un = udp_pernet(net); struct nf_proto_net *pn = &un->pn; if (!pn->users) { int i; for (i = 0; i < UDP_CT_MAX; i++) un->timeouts[i] = udp_timeouts[i]; } if (proto == AF_INET) { ret = udp_kmemdup_compat_sysctl_table(pn, un); if (ret < 0) return ret; ret = udp_kmemdup_sysctl_table(pn, un); if (ret < 0) nf_ct_kfree_compat_sysctl_table(pn); } else ret = udp_kmemdup_sysctl_table(pn, un); return ret; }
static int nf_ct_l4proto_register_sysctl(struct net *net, struct nf_proto_net *pn, struct nf_conntrack_l4proto *l4proto) { int err = 0; #ifdef CONFIG_SYSCTL if (pn->ctl_table != NULL) { err = nf_ct_register_sysctl(net, &pn->ctl_table_header, "net/netfilter", pn->ctl_table); if (err < 0) { if (!pn->users) { kfree(pn->ctl_table); pn->ctl_table = NULL; } } } #ifdef CONFIG_NF_CONNTRACK_PROC_COMPAT if (l4proto->l3proto != AF_INET6 && pn->ctl_compat_table != NULL) { if (err < 0) { nf_ct_kfree_compat_sysctl_table(pn); goto out; } err = nf_ct_register_sysctl(net, &pn->ctl_compat_header, "net/ipv4/netfilter", pn->ctl_compat_table); if (err == 0) goto out; nf_ct_kfree_compat_sysctl_table(pn); nf_ct_unregister_sysctl(&pn->ctl_table_header, &pn->ctl_table, pn->users); } out: #endif /* CONFIG_NF_CONNTRACK_PROC_COMPAT */ #endif /* CONFIG_SYSCTL */ return err; }
static int generic_init_net(struct net *net, u_int16_t proto) { int ret; struct nf_generic_net *gn = generic_pernet(net); struct nf_proto_net *pn = &gn->pn; gn->timeout = nf_ct_generic_timeout; ret = generic_kmemdup_compat_sysctl_table(pn, gn); if (ret < 0) return ret; ret = generic_kmemdup_sysctl_table(pn, gn); if (ret < 0) nf_ct_kfree_compat_sysctl_table(pn); return ret; }
static int icmp_init_net(struct net *net, u_int16_t proto) { int ret; struct nf_icmp_net *in = icmp_pernet(net); struct nf_proto_net *pn = &in->pn; in->timeout = nf_ct_icmp_timeout; ret = icmp_kmemdup_compat_sysctl_table(pn, in); if (ret < 0) return ret; ret = icmp_kmemdup_sysctl_table(pn, in); if (ret < 0) nf_ct_kfree_compat_sysctl_table(pn); return ret; }