.. | .. |
---|
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, |
---|