@@ -551,11 +551,9 @@ static struct sock *dccp_v6_request_recv_sock(const struct sock *sk,
551551 * own_req = inet_ehash_nolisten (newsk , req_to_sk (req_unhash ), NULL );
552552 /* Clone pktoptions received with SYN, if we own the req */
553553 if (* own_req && ireq -> pktopts ) {
554- newnp -> pktoptions = skb_clone (ireq -> pktopts , GFP_ATOMIC );
554+ newnp -> pktoptions = skb_clone_and_charge_r (ireq -> pktopts , newsk );
555555 consume_skb (ireq -> pktopts );
556556 ireq -> pktopts = NULL ;
557- if (newnp -> pktoptions )
558- skb_set_owner_r (newnp -> pktoptions , newsk );
559557 }
560558
561559 return newsk ;
@@ -615,7 +613,7 @@ static int dccp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
615613 --ANK (980728)
616614 */
617615 if (np -> rxopt .all )
618- opt_skb = skb_clone (skb , GFP_ATOMIC );
616+ opt_skb = skb_clone_and_charge_r (skb , sk );
619617
620618 if (sk -> sk_state == DCCP_OPEN ) { /* Fast path */
621619 if (dccp_rcv_established (sk , skb , dccp_hdr (skb ), skb -> len ))
@@ -679,7 +677,6 @@ static int dccp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
679677 np -> flow_label = ip6_flowlabel (ipv6_hdr (opt_skb ));
680678 if (ipv6_opt_accepted (sk , opt_skb ,
681679 & DCCP_SKB_CB (opt_skb )-> header .h6 )) {
682- skb_set_owner_r (opt_skb , sk );
683680 memmove (IP6CB (opt_skb ),
684681 & DCCP_SKB_CB (opt_skb )-> header .h6 ,
685682 sizeof (struct inet6_skb_parm ));
0 commit comments