| .. | .. |
|---|
| 269 | 269 | fl6.flowi6_proto = IPPROTO_TCP; |
|---|
| 270 | 270 | fl6.daddr = sk->sk_v6_daddr; |
|---|
| 271 | 271 | fl6.saddr = saddr ? *saddr : np->saddr; |
|---|
| 272 | + fl6.flowlabel = ip6_make_flowinfo(np->tclass, np->flow_label); |
|---|
| 272 | 273 | fl6.flowi6_oif = sk->sk_bound_dev_if; |
|---|
| 273 | 274 | fl6.flowi6_mark = sk->sk_mark; |
|---|
| 274 | 275 | fl6.fl6_dport = usin->sin6_port; |
|---|
| .. | .. |
|---|
| 1147 | 1148 | tcp_rsk(req)->rcv_nxt, |
|---|
| 1148 | 1149 | req->rsk_rcv_wnd >> inet_rsk(req)->rcv_wscale, |
|---|
| 1149 | 1150 | tcp_time_stamp_raw() + tcp_rsk(req)->ts_off, |
|---|
| 1150 | | - req->ts_recent, sk->sk_bound_dev_if, |
|---|
| 1151 | + READ_ONCE(req->ts_recent), sk->sk_bound_dev_if, |
|---|
| 1151 | 1152 | tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->saddr, l3index), |
|---|
| 1152 | 1153 | ipv6_get_dsfield(ipv6_hdr(skb)), 0, sk->sk_priority); |
|---|
| 1153 | 1154 | } |
|---|
| .. | .. |
|---|
| 1406 | 1407 | |
|---|
| 1407 | 1408 | /* Clone pktoptions received with SYN, if we own the req */ |
|---|
| 1408 | 1409 | if (ireq->pktopts) { |
|---|
| 1409 | | - newnp->pktoptions = skb_clone(ireq->pktopts, |
|---|
| 1410 | | - sk_gfp_mask(sk, GFP_ATOMIC)); |
|---|
| 1410 | + newnp->pktoptions = skb_clone_and_charge_r(ireq->pktopts, newsk); |
|---|
| 1411 | 1411 | consume_skb(ireq->pktopts); |
|---|
| 1412 | 1412 | ireq->pktopts = NULL; |
|---|
| 1413 | | - if (newnp->pktoptions) { |
|---|
| 1413 | + if (newnp->pktoptions) |
|---|
| 1414 | 1414 | tcp_v6_restore_cb(newnp->pktoptions); |
|---|
| 1415 | | - skb_set_owner_r(newnp->pktoptions, newsk); |
|---|
| 1416 | | - } |
|---|
| 1417 | 1415 | } |
|---|
| 1418 | 1416 | } else { |
|---|
| 1419 | 1417 | if (!req_unhash && found_dup_sk) { |
|---|
| .. | .. |
|---|
| 1481 | 1479 | --ANK (980728) |
|---|
| 1482 | 1480 | */ |
|---|
| 1483 | 1481 | if (np->rxopt.all) |
|---|
| 1484 | | - opt_skb = skb_clone(skb, sk_gfp_mask(sk, GFP_ATOMIC)); |
|---|
| 1482 | + opt_skb = skb_clone_and_charge_r(skb, sk); |
|---|
| 1485 | 1483 | |
|---|
| 1486 | 1484 | if (sk->sk_state == TCP_ESTABLISHED) { /* Fast path */ |
|---|
| 1487 | 1485 | struct dst_entry *dst; |
|---|
| .. | .. |
|---|
| 1563 | 1561 | if (np->repflow) |
|---|
| 1564 | 1562 | np->flow_label = ip6_flowlabel(ipv6_hdr(opt_skb)); |
|---|
| 1565 | 1563 | if (ipv6_opt_accepted(sk, opt_skb, &TCP_SKB_CB(opt_skb)->header.h6)) { |
|---|
| 1566 | | - skb_set_owner_r(opt_skb, sk); |
|---|
| 1567 | 1564 | tcp_v6_restore_cb(opt_skb); |
|---|
| 1568 | 1565 | opt_skb = xchg(&np->pktoptions, opt_skb); |
|---|
| 1569 | 1566 | } else { |
|---|
| .. | .. |
|---|
| 1939 | 1936 | return 0; |
|---|
| 1940 | 1937 | } |
|---|
| 1941 | 1938 | |
|---|
| 1942 | | -static void tcp_v6_destroy_sock(struct sock *sk) |
|---|
| 1943 | | -{ |
|---|
| 1944 | | - tcp_v4_destroy_sock(sk); |
|---|
| 1945 | | - inet6_destroy_sock(sk); |
|---|
| 1946 | | -} |
|---|
| 1947 | | - |
|---|
| 1948 | 1939 | #ifdef CONFIG_PROC_FS |
|---|
| 1949 | 1940 | /* Proc filesystem TCPv6 sock list dumping. */ |
|---|
| 1950 | 1941 | static void get_openreq6(struct seq_file *seq, |
|---|
| .. | .. |
|---|
| 2137 | 2128 | .accept = inet_csk_accept, |
|---|
| 2138 | 2129 | .ioctl = tcp_ioctl, |
|---|
| 2139 | 2130 | .init = tcp_v6_init_sock, |
|---|
| 2140 | | - .destroy = tcp_v6_destroy_sock, |
|---|
| 2131 | + .destroy = tcp_v4_destroy_sock, |
|---|
| 2141 | 2132 | .shutdown = tcp_shutdown, |
|---|
| 2142 | 2133 | .setsockopt = tcp_setsockopt, |
|---|
| 2143 | 2134 | .getsockopt = tcp_getsockopt, |
|---|