|
@@ -809,6 +809,7 @@ nf_conntrack_tuple_taken(const struct nf_conntrack_tuple *tuple,
|
|
|
zone = nf_ct_zone(ignored_conntrack);
|
|
|
|
|
|
rcu_read_lock();
|
|
|
+ begin:
|
|
|
nf_conntrack_get_ht(&ct_hash, &hsize);
|
|
|
hash = __hash_conntrack(net, tuple, hsize);
|
|
|
|
|
@@ -822,6 +823,12 @@ nf_conntrack_tuple_taken(const struct nf_conntrack_tuple *tuple,
|
|
|
}
|
|
|
NF_CT_STAT_INC_ATOMIC(net, searched);
|
|
|
}
|
|
|
+
|
|
|
+ if (get_nulls_value(n) != hash) {
|
|
|
+ NF_CT_STAT_INC_ATOMIC(net, search_restart);
|
|
|
+ goto begin;
|
|
|
+ }
|
|
|
+
|
|
|
rcu_read_unlock();
|
|
|
|
|
|
return 0;
|