X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=net%2Fnetfilter%2Fxt_CT.c;h=e7ac07e53b5925d334d9e33fc8916768c3a3c1d4;hb=f66477a0aeb77f97a7de5f791700dadc42f3f792;hp=faf32d888198a72a50c293312c014bcb63747654;hpb=37902bc190f1396a8c232783b29ddfcaa4026028;p=firefly-linux-kernel-4.4.55.git diff --git a/net/netfilter/xt_CT.c b/net/netfilter/xt_CT.c index faf32d888198..e7ac07e53b59 100644 --- a/net/netfilter/xt_CT.c +++ b/net/netfilter/xt_CT.c @@ -171,6 +171,9 @@ xt_ct_set_timeout(struct nf_conn *ct, const struct xt_tgchk_param *par, if (timeout_ext == NULL) ret = -ENOMEM; + rcu_read_unlock(); + return ret; + err_put_timeout: __xt_ct_tg_timeout_put(timeout); out: @@ -318,8 +321,10 @@ static void xt_ct_destroy_timeout(struct nf_conn *ct) if (timeout_put) { timeout_ext = nf_ct_timeout_find(ct); - if (timeout_ext) + if (timeout_ext) { timeout_put(timeout_ext->timeout); + RCU_INIT_POINTER(timeout_ext->timeout, NULL); + } } rcu_read_unlock(); #endif