hc
2024-05-16 8d2a02b24d66aa359e83eebc1ed3c0f85367a1cb
kernel/net/ipv6/tcp_ipv6.c
....@@ -269,6 +269,7 @@
269269 fl6.flowi6_proto = IPPROTO_TCP;
270270 fl6.daddr = sk->sk_v6_daddr;
271271 fl6.saddr = saddr ? *saddr : np->saddr;
272
+ fl6.flowlabel = ip6_make_flowinfo(np->tclass, np->flow_label);
272273 fl6.flowi6_oif = sk->sk_bound_dev_if;
273274 fl6.flowi6_mark = sk->sk_mark;
274275 fl6.fl6_dport = usin->sin6_port;
....@@ -1147,7 +1148,7 @@
11471148 tcp_rsk(req)->rcv_nxt,
11481149 req->rsk_rcv_wnd >> inet_rsk(req)->rcv_wscale,
11491150 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,
11511152 tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->saddr, l3index),
11521153 ipv6_get_dsfield(ipv6_hdr(skb)), 0, sk->sk_priority);
11531154 }
....@@ -1406,14 +1407,11 @@
14061407
14071408 /* Clone pktoptions received with SYN, if we own the req */
14081409 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);
14111411 consume_skb(ireq->pktopts);
14121412 ireq->pktopts = NULL;
1413
- if (newnp->pktoptions) {
1413
+ if (newnp->pktoptions)
14141414 tcp_v6_restore_cb(newnp->pktoptions);
1415
- skb_set_owner_r(newnp->pktoptions, newsk);
1416
- }
14171415 }
14181416 } else {
14191417 if (!req_unhash && found_dup_sk) {
....@@ -1481,7 +1479,7 @@
14811479 --ANK (980728)
14821480 */
14831481 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);
14851483
14861484 if (sk->sk_state == TCP_ESTABLISHED) { /* Fast path */
14871485 struct dst_entry *dst;
....@@ -1563,7 +1561,6 @@
15631561 if (np->repflow)
15641562 np->flow_label = ip6_flowlabel(ipv6_hdr(opt_skb));
15651563 if (ipv6_opt_accepted(sk, opt_skb, &TCP_SKB_CB(opt_skb)->header.h6)) {
1566
- skb_set_owner_r(opt_skb, sk);
15671564 tcp_v6_restore_cb(opt_skb);
15681565 opt_skb = xchg(&np->pktoptions, opt_skb);
15691566 } else {
....@@ -1939,12 +1936,6 @@
19391936 return 0;
19401937 }
19411938
1942
-static void tcp_v6_destroy_sock(struct sock *sk)
1943
-{
1944
- tcp_v4_destroy_sock(sk);
1945
- inet6_destroy_sock(sk);
1946
-}
1947
-
19481939 #ifdef CONFIG_PROC_FS
19491940 /* Proc filesystem TCPv6 sock list dumping. */
19501941 static void get_openreq6(struct seq_file *seq,
....@@ -2137,7 +2128,7 @@
21372128 .accept = inet_csk_accept,
21382129 .ioctl = tcp_ioctl,
21392130 .init = tcp_v6_init_sock,
2140
- .destroy = tcp_v6_destroy_sock,
2131
+ .destroy = tcp_v4_destroy_sock,
21412132 .shutdown = tcp_shutdown,
21422133 .setsockopt = tcp_setsockopt,
21432134 .getsockopt = tcp_getsockopt,