net/sched: act_pedit: free pedit keys on bail from offset check
[linux-block.git] / net / dccp / ipv6.c
index b9d7c3dd1cb39852be3a03556e976c09757d391d..93c98990d72632e18ae50c046b9fdc9e096f66de 100644 (file)
@@ -174,17 +174,18 @@ static int dccp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
                         */
                        sk_error_report(sk);
                        dccp_done(sk);
-               } else
-                       sk->sk_err_soft = err;
+               } else {
+                       WRITE_ONCE(sk->sk_err_soft, err);
+               }
                goto out;
        }
 
        if (!sock_owned_by_user(sk) && np->recverr) {
                sk->sk_err = err;
                sk_error_report(sk);
-       } else
-               sk->sk_err_soft = err;
-
+       } else {
+               WRITE_ONCE(sk->sk_err_soft, err);
+       }
 out:
        bh_unlock_sock(sk);
        sock_put(sk);
@@ -783,6 +784,7 @@ lookup:
 
        if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb))
                goto discard_and_relse;
+       nf_reset_ct(skb);
 
        return __sk_receive_skb(sk, skb, 1, dh->dccph_doff * 4,
                                refcounted) ? -1 : 0;