|
@@ -826,22 +826,19 @@ __nf_conntrack_alloc(struct net *net, u16 zone,
|
|
|
atomic_dec(&net->ct.count);
|
|
|
return ERR_PTR(-ENOMEM);
|
|
|
}
|
|
|
- /*
|
|
|
- * Let ct->tuplehash[IP_CT_DIR_ORIGINAL].hnnode.next
|
|
|
- * and ct->tuplehash[IP_CT_DIR_REPLY].hnnode.next unchanged.
|
|
|
- */
|
|
|
- memset(&ct->tuplehash[IP_CT_DIR_MAX], 0,
|
|
|
- offsetof(struct nf_conn, proto) -
|
|
|
- offsetof(struct nf_conn, tuplehash[IP_CT_DIR_MAX]));
|
|
|
spin_lock_init(&ct->lock);
|
|
|
ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple = *orig;
|
|
|
ct->tuplehash[IP_CT_DIR_ORIGINAL].hnnode.pprev = NULL;
|
|
|
ct->tuplehash[IP_CT_DIR_REPLY].tuple = *repl;
|
|
|
/* save hash for reusing when confirming */
|
|
|
*(unsigned long *)(&ct->tuplehash[IP_CT_DIR_REPLY].hnnode.pprev) = hash;
|
|
|
+ ct->status = 0;
|
|
|
/* Don't set timer yet: wait for confirmation */
|
|
|
setup_timer(&ct->timeout, death_by_timeout, (unsigned long)ct);
|
|
|
write_pnet(&ct->ct_net, net);
|
|
|
+ memset(&ct->__nfct_init_offset[0], 0,
|
|
|
+ offsetof(struct nf_conn, proto) -
|
|
|
+ offsetof(struct nf_conn, __nfct_init_offset[0]));
|
|
|
#ifdef CONFIG_NF_CONNTRACK_ZONES
|
|
|
if (zone) {
|
|
|
struct nf_conntrack_zone *nf_ct_zone;
|