|
@@ -335,7 +335,8 @@ begin:
|
|
|
h = __nf_conntrack_find(net, tuple);
|
|
|
if (h) {
|
|
|
ct = nf_ct_tuplehash_to_ctrack(h);
|
|
|
- if (unlikely(!atomic_inc_not_zero(&ct->ct_general.use)))
|
|
|
+ if (unlikely(nf_ct_is_dying(ct) ||
|
|
|
+ !atomic_inc_not_zero(&ct->ct_general.use)))
|
|
|
h = NULL;
|
|
|
else {
|
|
|
if (unlikely(!nf_ct_tuple_equal(tuple, &h->tuple))) {
|
|
@@ -510,7 +511,8 @@ static noinline int early_drop(struct net *net, unsigned int hash)
|
|
|
cnt++;
|
|
|
}
|
|
|
|
|
|
- if (ct && unlikely(!atomic_inc_not_zero(&ct->ct_general.use)))
|
|
|
+ if (ct && unlikely(nf_ct_is_dying(ct) ||
|
|
|
+ !atomic_inc_not_zero(&ct->ct_general.use)))
|
|
|
ct = NULL;
|
|
|
if (ct || cnt >= NF_CT_EVICTION_RANGE)
|
|
|
break;
|