Loading...
1/*
2 * TCP over IPv6
3 * Linux INET6 implementation
4 *
5 * Authors:
6 * Pedro Roque <roque@di.fc.ul.pt>
7 *
8 * Based on:
9 * linux/net/ipv4/tcp.c
10 * linux/net/ipv4/tcp_input.c
11 * linux/net/ipv4/tcp_output.c
12 *
13 * Fixes:
14 * Hideaki YOSHIFUJI : sin6_scope_id support
15 * YOSHIFUJI Hideaki @USAGI and: Support IPV6_V6ONLY socket option, which
16 * Alexey Kuznetsov allow both IPv4 and IPv6 sockets to bind
17 * a single port at the same time.
18 * YOSHIFUJI Hideaki @USAGI: convert /proc/net/tcp6 to seq_file.
19 *
20 * This program is free software; you can redistribute it and/or
21 * modify it under the terms of the GNU General Public License
22 * as published by the Free Software Foundation; either version
23 * 2 of the License, or (at your option) any later version.
24 */
25
26#include <linux/bottom_half.h>
27#include <linux/module.h>
28#include <linux/errno.h>
29#include <linux/types.h>
30#include <linux/socket.h>
31#include <linux/sockios.h>
32#include <linux/net.h>
33#include <linux/jiffies.h>
34#include <linux/in.h>
35#include <linux/in6.h>
36#include <linux/netdevice.h>
37#include <linux/init.h>
38#include <linux/jhash.h>
39#include <linux/ipsec.h>
40#include <linux/times.h>
41#include <linux/slab.h>
42
43#include <linux/ipv6.h>
44#include <linux/icmpv6.h>
45#include <linux/random.h>
46
47#include <net/tcp.h>
48#include <net/ndisc.h>
49#include <net/inet6_hashtables.h>
50#include <net/inet6_connection_sock.h>
51#include <net/ipv6.h>
52#include <net/transp_v6.h>
53#include <net/addrconf.h>
54#include <net/ip6_route.h>
55#include <net/ip6_checksum.h>
56#include <net/inet_ecn.h>
57#include <net/protocol.h>
58#include <net/xfrm.h>
59#include <net/snmp.h>
60#include <net/dsfield.h>
61#include <net/timewait_sock.h>
62#include <net/netdma.h>
63#include <net/inet_common.h>
64#include <net/secure_seq.h>
65
66#include <asm/uaccess.h>
67
68#include <linux/proc_fs.h>
69#include <linux/seq_file.h>
70
71#include <linux/crypto.h>
72#include <linux/scatterlist.h>
73
74static void tcp_v6_send_reset(struct sock *sk, struct sk_buff *skb);
75static void tcp_v6_reqsk_send_ack(struct sock *sk, struct sk_buff *skb,
76 struct request_sock *req);
77
78static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb);
79static void __tcp_v6_send_check(struct sk_buff *skb,
80 const struct in6_addr *saddr,
81 const struct in6_addr *daddr);
82
83static const struct inet_connection_sock_af_ops ipv6_mapped;
84static const struct inet_connection_sock_af_ops ipv6_specific;
85#ifdef CONFIG_TCP_MD5SIG
86static const struct tcp_sock_af_ops tcp_sock_ipv6_specific;
87static const struct tcp_sock_af_ops tcp_sock_ipv6_mapped_specific;
88#else
89static struct tcp_md5sig_key *tcp_v6_md5_do_lookup(struct sock *sk,
90 const struct in6_addr *addr)
91{
92 return NULL;
93}
94#endif
95
96static void tcp_v6_hash(struct sock *sk)
97{
98 if (sk->sk_state != TCP_CLOSE) {
99 if (inet_csk(sk)->icsk_af_ops == &ipv6_mapped) {
100 tcp_prot.hash(sk);
101 return;
102 }
103 local_bh_disable();
104 __inet6_hash(sk, NULL);
105 local_bh_enable();
106 }
107}
108
109static __inline__ __sum16 tcp_v6_check(int len,
110 const struct in6_addr *saddr,
111 const struct in6_addr *daddr,
112 __wsum base)
113{
114 return csum_ipv6_magic(saddr, daddr, len, IPPROTO_TCP, base);
115}
116
117static __u32 tcp_v6_init_sequence(struct sk_buff *skb)
118{
119 return secure_tcpv6_sequence_number(ipv6_hdr(skb)->daddr.s6_addr32,
120 ipv6_hdr(skb)->saddr.s6_addr32,
121 tcp_hdr(skb)->dest,
122 tcp_hdr(skb)->source);
123}
124
125static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
126 int addr_len)
127{
128 struct sockaddr_in6 *usin = (struct sockaddr_in6 *) uaddr;
129 struct inet_sock *inet = inet_sk(sk);
130 struct inet_connection_sock *icsk = inet_csk(sk);
131 struct ipv6_pinfo *np = inet6_sk(sk);
132 struct tcp_sock *tp = tcp_sk(sk);
133 struct in6_addr *saddr = NULL, *final_p, final;
134 struct rt6_info *rt;
135 struct flowi6 fl6;
136 struct dst_entry *dst;
137 int addr_type;
138 int err;
139
140 if (addr_len < SIN6_LEN_RFC2133)
141 return -EINVAL;
142
143 if (usin->sin6_family != AF_INET6)
144 return -EAFNOSUPPORT;
145
146 memset(&fl6, 0, sizeof(fl6));
147
148 if (np->sndflow) {
149 fl6.flowlabel = usin->sin6_flowinfo&IPV6_FLOWINFO_MASK;
150 IP6_ECN_flow_init(fl6.flowlabel);
151 if (fl6.flowlabel&IPV6_FLOWLABEL_MASK) {
152 struct ip6_flowlabel *flowlabel;
153 flowlabel = fl6_sock_lookup(sk, fl6.flowlabel);
154 if (flowlabel == NULL)
155 return -EINVAL;
156 ipv6_addr_copy(&usin->sin6_addr, &flowlabel->dst);
157 fl6_sock_release(flowlabel);
158 }
159 }
160
161 /*
162 * connect() to INADDR_ANY means loopback (BSD'ism).
163 */
164
165 if(ipv6_addr_any(&usin->sin6_addr))
166 usin->sin6_addr.s6_addr[15] = 0x1;
167
168 addr_type = ipv6_addr_type(&usin->sin6_addr);
169
170 if(addr_type & IPV6_ADDR_MULTICAST)
171 return -ENETUNREACH;
172
173 if (addr_type&IPV6_ADDR_LINKLOCAL) {
174 if (addr_len >= sizeof(struct sockaddr_in6) &&
175 usin->sin6_scope_id) {
176 /* If interface is set while binding, indices
177 * must coincide.
178 */
179 if (sk->sk_bound_dev_if &&
180 sk->sk_bound_dev_if != usin->sin6_scope_id)
181 return -EINVAL;
182
183 sk->sk_bound_dev_if = usin->sin6_scope_id;
184 }
185
186 /* Connect to link-local address requires an interface */
187 if (!sk->sk_bound_dev_if)
188 return -EINVAL;
189 }
190
191 if (tp->rx_opt.ts_recent_stamp &&
192 !ipv6_addr_equal(&np->daddr, &usin->sin6_addr)) {
193 tp->rx_opt.ts_recent = 0;
194 tp->rx_opt.ts_recent_stamp = 0;
195 tp->write_seq = 0;
196 }
197
198 ipv6_addr_copy(&np->daddr, &usin->sin6_addr);
199 np->flow_label = fl6.flowlabel;
200
201 /*
202 * TCP over IPv4
203 */
204
205 if (addr_type == IPV6_ADDR_MAPPED) {
206 u32 exthdrlen = icsk->icsk_ext_hdr_len;
207 struct sockaddr_in sin;
208
209 SOCK_DEBUG(sk, "connect: ipv4 mapped\n");
210
211 if (__ipv6_only_sock(sk))
212 return -ENETUNREACH;
213
214 sin.sin_family = AF_INET;
215 sin.sin_port = usin->sin6_port;
216 sin.sin_addr.s_addr = usin->sin6_addr.s6_addr32[3];
217
218 icsk->icsk_af_ops = &ipv6_mapped;
219 sk->sk_backlog_rcv = tcp_v4_do_rcv;
220#ifdef CONFIG_TCP_MD5SIG
221 tp->af_specific = &tcp_sock_ipv6_mapped_specific;
222#endif
223
224 err = tcp_v4_connect(sk, (struct sockaddr *)&sin, sizeof(sin));
225
226 if (err) {
227 icsk->icsk_ext_hdr_len = exthdrlen;
228 icsk->icsk_af_ops = &ipv6_specific;
229 sk->sk_backlog_rcv = tcp_v6_do_rcv;
230#ifdef CONFIG_TCP_MD5SIG
231 tp->af_specific = &tcp_sock_ipv6_specific;
232#endif
233 goto failure;
234 } else {
235 ipv6_addr_set_v4mapped(inet->inet_saddr, &np->saddr);
236 ipv6_addr_set_v4mapped(inet->inet_rcv_saddr,
237 &np->rcv_saddr);
238 }
239
240 return err;
241 }
242
243 if (!ipv6_addr_any(&np->rcv_saddr))
244 saddr = &np->rcv_saddr;
245
246 fl6.flowi6_proto = IPPROTO_TCP;
247 ipv6_addr_copy(&fl6.daddr, &np->daddr);
248 ipv6_addr_copy(&fl6.saddr,
249 (saddr ? saddr : &np->saddr));
250 fl6.flowi6_oif = sk->sk_bound_dev_if;
251 fl6.flowi6_mark = sk->sk_mark;
252 fl6.fl6_dport = usin->sin6_port;
253 fl6.fl6_sport = inet->inet_sport;
254
255 final_p = fl6_update_dst(&fl6, np->opt, &final);
256
257 security_sk_classify_flow(sk, flowi6_to_flowi(&fl6));
258
259 dst = ip6_dst_lookup_flow(sk, &fl6, final_p, true);
260 if (IS_ERR(dst)) {
261 err = PTR_ERR(dst);
262 goto failure;
263 }
264
265 if (saddr == NULL) {
266 saddr = &fl6.saddr;
267 ipv6_addr_copy(&np->rcv_saddr, saddr);
268 }
269
270 /* set the source address */
271 ipv6_addr_copy(&np->saddr, saddr);
272 inet->inet_rcv_saddr = LOOPBACK4_IPV6;
273
274 sk->sk_gso_type = SKB_GSO_TCPV6;
275 __ip6_dst_store(sk, dst, NULL, NULL);
276
277 rt = (struct rt6_info *) dst;
278 if (tcp_death_row.sysctl_tw_recycle &&
279 !tp->rx_opt.ts_recent_stamp &&
280 ipv6_addr_equal(&rt->rt6i_dst.addr, &np->daddr)) {
281 struct inet_peer *peer = rt6_get_peer(rt);
282 /*
283 * VJ's idea. We save last timestamp seen from
284 * the destination in peer table, when entering state
285 * TIME-WAIT * and initialize rx_opt.ts_recent from it,
286 * when trying new connection.
287 */
288 if (peer) {
289 inet_peer_refcheck(peer);
290 if ((u32)get_seconds() - peer->tcp_ts_stamp <= TCP_PAWS_MSL) {
291 tp->rx_opt.ts_recent_stamp = peer->tcp_ts_stamp;
292 tp->rx_opt.ts_recent = peer->tcp_ts;
293 }
294 }
295 }
296
297 icsk->icsk_ext_hdr_len = 0;
298 if (np->opt)
299 icsk->icsk_ext_hdr_len = (np->opt->opt_flen +
300 np->opt->opt_nflen);
301
302 tp->rx_opt.mss_clamp = IPV6_MIN_MTU - sizeof(struct tcphdr) - sizeof(struct ipv6hdr);
303
304 inet->inet_dport = usin->sin6_port;
305
306 tcp_set_state(sk, TCP_SYN_SENT);
307 err = inet6_hash_connect(&tcp_death_row, sk);
308 if (err)
309 goto late_failure;
310
311 if (!tp->write_seq)
312 tp->write_seq = secure_tcpv6_sequence_number(np->saddr.s6_addr32,
313 np->daddr.s6_addr32,
314 inet->inet_sport,
315 inet->inet_dport);
316
317 err = tcp_connect(sk);
318 if (err)
319 goto late_failure;
320
321 return 0;
322
323late_failure:
324 tcp_set_state(sk, TCP_CLOSE);
325 __sk_dst_reset(sk);
326failure:
327 inet->inet_dport = 0;
328 sk->sk_route_caps = 0;
329 return err;
330}
331
332static void tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
333 u8 type, u8 code, int offset, __be32 info)
334{
335 const struct ipv6hdr *hdr = (const struct ipv6hdr*)skb->data;
336 const struct tcphdr *th = (struct tcphdr *)(skb->data+offset);
337 struct ipv6_pinfo *np;
338 struct sock *sk;
339 int err;
340 struct tcp_sock *tp;
341 __u32 seq;
342 struct net *net = dev_net(skb->dev);
343
344 sk = inet6_lookup(net, &tcp_hashinfo, &hdr->daddr,
345 th->dest, &hdr->saddr, th->source, skb->dev->ifindex);
346
347 if (sk == NULL) {
348 ICMP6_INC_STATS_BH(net, __in6_dev_get(skb->dev),
349 ICMP6_MIB_INERRORS);
350 return;
351 }
352
353 if (sk->sk_state == TCP_TIME_WAIT) {
354 inet_twsk_put(inet_twsk(sk));
355 return;
356 }
357
358 bh_lock_sock(sk);
359 if (sock_owned_by_user(sk))
360 NET_INC_STATS_BH(net, LINUX_MIB_LOCKDROPPEDICMPS);
361
362 if (sk->sk_state == TCP_CLOSE)
363 goto out;
364
365 if (ipv6_hdr(skb)->hop_limit < inet6_sk(sk)->min_hopcount) {
366 NET_INC_STATS_BH(net, LINUX_MIB_TCPMINTTLDROP);
367 goto out;
368 }
369
370 tp = tcp_sk(sk);
371 seq = ntohl(th->seq);
372 if (sk->sk_state != TCP_LISTEN &&
373 !between(seq, tp->snd_una, tp->snd_nxt)) {
374 NET_INC_STATS_BH(net, LINUX_MIB_OUTOFWINDOWICMPS);
375 goto out;
376 }
377
378 np = inet6_sk(sk);
379
380 if (type == ICMPV6_PKT_TOOBIG) {
381 struct dst_entry *dst;
382
383 if (sock_owned_by_user(sk))
384 goto out;
385 if ((1 << sk->sk_state) & (TCPF_LISTEN | TCPF_CLOSE))
386 goto out;
387
388 /* icmp should have updated the destination cache entry */
389 dst = __sk_dst_check(sk, np->dst_cookie);
390
391 if (dst == NULL) {
392 struct inet_sock *inet = inet_sk(sk);
393 struct flowi6 fl6;
394
395 /* BUGGG_FUTURE: Again, it is not clear how
396 to handle rthdr case. Ignore this complexity
397 for now.
398 */
399 memset(&fl6, 0, sizeof(fl6));
400 fl6.flowi6_proto = IPPROTO_TCP;
401 ipv6_addr_copy(&fl6.daddr, &np->daddr);
402 ipv6_addr_copy(&fl6.saddr, &np->saddr);
403 fl6.flowi6_oif = sk->sk_bound_dev_if;
404 fl6.flowi6_mark = sk->sk_mark;
405 fl6.fl6_dport = inet->inet_dport;
406 fl6.fl6_sport = inet->inet_sport;
407 security_skb_classify_flow(skb, flowi6_to_flowi(&fl6));
408
409 dst = ip6_dst_lookup_flow(sk, &fl6, NULL, false);
410 if (IS_ERR(dst)) {
411 sk->sk_err_soft = -PTR_ERR(dst);
412 goto out;
413 }
414
415 } else
416 dst_hold(dst);
417
418 if (inet_csk(sk)->icsk_pmtu_cookie > dst_mtu(dst)) {
419 tcp_sync_mss(sk, dst_mtu(dst));
420 tcp_simple_retransmit(sk);
421 } /* else let the usual retransmit timer handle it */
422 dst_release(dst);
423 goto out;
424 }
425
426 icmpv6_err_convert(type, code, &err);
427
428 /* Might be for an request_sock */
429 switch (sk->sk_state) {
430 struct request_sock *req, **prev;
431 case TCP_LISTEN:
432 if (sock_owned_by_user(sk))
433 goto out;
434
435 req = inet6_csk_search_req(sk, &prev, th->dest, &hdr->daddr,
436 &hdr->saddr, inet6_iif(skb));
437 if (!req)
438 goto out;
439
440 /* ICMPs are not backlogged, hence we cannot get
441 * an established socket here.
442 */
443 WARN_ON(req->sk != NULL);
444
445 if (seq != tcp_rsk(req)->snt_isn) {
446 NET_INC_STATS_BH(net, LINUX_MIB_OUTOFWINDOWICMPS);
447 goto out;
448 }
449
450 inet_csk_reqsk_queue_drop(sk, req, prev);
451 goto out;
452
453 case TCP_SYN_SENT:
454 case TCP_SYN_RECV: /* Cannot happen.
455 It can, it SYNs are crossed. --ANK */
456 if (!sock_owned_by_user(sk)) {
457 sk->sk_err = err;
458 sk->sk_error_report(sk); /* Wake people up to see the error (see connect in sock.c) */
459
460 tcp_done(sk);
461 } else
462 sk->sk_err_soft = err;
463 goto out;
464 }
465
466 if (!sock_owned_by_user(sk) && np->recverr) {
467 sk->sk_err = err;
468 sk->sk_error_report(sk);
469 } else
470 sk->sk_err_soft = err;
471
472out:
473 bh_unlock_sock(sk);
474 sock_put(sk);
475}
476
477
478static int tcp_v6_send_synack(struct sock *sk, struct request_sock *req,
479 struct request_values *rvp)
480{
481 struct inet6_request_sock *treq = inet6_rsk(req);
482 struct ipv6_pinfo *np = inet6_sk(sk);
483 struct sk_buff * skb;
484 struct ipv6_txoptions *opt = NULL;
485 struct in6_addr * final_p, final;
486 struct flowi6 fl6;
487 struct dst_entry *dst;
488 int err;
489
490 memset(&fl6, 0, sizeof(fl6));
491 fl6.flowi6_proto = IPPROTO_TCP;
492 ipv6_addr_copy(&fl6.daddr, &treq->rmt_addr);
493 ipv6_addr_copy(&fl6.saddr, &treq->loc_addr);
494 fl6.flowlabel = 0;
495 fl6.flowi6_oif = treq->iif;
496 fl6.flowi6_mark = sk->sk_mark;
497 fl6.fl6_dport = inet_rsk(req)->rmt_port;
498 fl6.fl6_sport = inet_rsk(req)->loc_port;
499 security_req_classify_flow(req, flowi6_to_flowi(&fl6));
500
501 opt = np->opt;
502 final_p = fl6_update_dst(&fl6, opt, &final);
503
504 dst = ip6_dst_lookup_flow(sk, &fl6, final_p, false);
505 if (IS_ERR(dst)) {
506 err = PTR_ERR(dst);
507 dst = NULL;
508 goto done;
509 }
510 skb = tcp_make_synack(sk, dst, req, rvp);
511 err = -ENOMEM;
512 if (skb) {
513 __tcp_v6_send_check(skb, &treq->loc_addr, &treq->rmt_addr);
514
515 ipv6_addr_copy(&fl6.daddr, &treq->rmt_addr);
516 err = ip6_xmit(sk, skb, &fl6, opt);
517 err = net_xmit_eval(err);
518 }
519
520done:
521 if (opt && opt != np->opt)
522 sock_kfree_s(sk, opt, opt->tot_len);
523 dst_release(dst);
524 return err;
525}
526
527static int tcp_v6_rtx_synack(struct sock *sk, struct request_sock *req,
528 struct request_values *rvp)
529{
530 TCP_INC_STATS_BH(sock_net(sk), TCP_MIB_RETRANSSEGS);
531 return tcp_v6_send_synack(sk, req, rvp);
532}
533
534static void tcp_v6_reqsk_destructor(struct request_sock *req)
535{
536 kfree_skb(inet6_rsk(req)->pktopts);
537}
538
539#ifdef CONFIG_TCP_MD5SIG
540static struct tcp_md5sig_key *tcp_v6_md5_do_lookup(struct sock *sk,
541 const struct in6_addr *addr)
542{
543 struct tcp_sock *tp = tcp_sk(sk);
544 int i;
545
546 BUG_ON(tp == NULL);
547
548 if (!tp->md5sig_info || !tp->md5sig_info->entries6)
549 return NULL;
550
551 for (i = 0; i < tp->md5sig_info->entries6; i++) {
552 if (ipv6_addr_equal(&tp->md5sig_info->keys6[i].addr, addr))
553 return &tp->md5sig_info->keys6[i].base;
554 }
555 return NULL;
556}
557
558static struct tcp_md5sig_key *tcp_v6_md5_lookup(struct sock *sk,
559 struct sock *addr_sk)
560{
561 return tcp_v6_md5_do_lookup(sk, &inet6_sk(addr_sk)->daddr);
562}
563
564static struct tcp_md5sig_key *tcp_v6_reqsk_md5_lookup(struct sock *sk,
565 struct request_sock *req)
566{
567 return tcp_v6_md5_do_lookup(sk, &inet6_rsk(req)->rmt_addr);
568}
569
570static int tcp_v6_md5_do_add(struct sock *sk, const struct in6_addr *peer,
571 char *newkey, u8 newkeylen)
572{
573 /* Add key to the list */
574 struct tcp_md5sig_key *key;
575 struct tcp_sock *tp = tcp_sk(sk);
576 struct tcp6_md5sig_key *keys;
577
578 key = tcp_v6_md5_do_lookup(sk, peer);
579 if (key) {
580 /* modify existing entry - just update that one */
581 kfree(key->key);
582 key->key = newkey;
583 key->keylen = newkeylen;
584 } else {
585 /* reallocate new list if current one is full. */
586 if (!tp->md5sig_info) {
587 tp->md5sig_info = kzalloc(sizeof(*tp->md5sig_info), GFP_ATOMIC);
588 if (!tp->md5sig_info) {
589 kfree(newkey);
590 return -ENOMEM;
591 }
592 sk_nocaps_add(sk, NETIF_F_GSO_MASK);
593 }
594 if (tp->md5sig_info->entries6 == 0 &&
595 tcp_alloc_md5sig_pool(sk) == NULL) {
596 kfree(newkey);
597 return -ENOMEM;
598 }
599 if (tp->md5sig_info->alloced6 == tp->md5sig_info->entries6) {
600 keys = kmalloc((sizeof (tp->md5sig_info->keys6[0]) *
601 (tp->md5sig_info->entries6 + 1)), GFP_ATOMIC);
602
603 if (!keys) {
604 kfree(newkey);
605 if (tp->md5sig_info->entries6 == 0)
606 tcp_free_md5sig_pool();
607 return -ENOMEM;
608 }
609
610 if (tp->md5sig_info->entries6)
611 memmove(keys, tp->md5sig_info->keys6,
612 (sizeof (tp->md5sig_info->keys6[0]) *
613 tp->md5sig_info->entries6));
614
615 kfree(tp->md5sig_info->keys6);
616 tp->md5sig_info->keys6 = keys;
617 tp->md5sig_info->alloced6++;
618 }
619
620 ipv6_addr_copy(&tp->md5sig_info->keys6[tp->md5sig_info->entries6].addr,
621 peer);
622 tp->md5sig_info->keys6[tp->md5sig_info->entries6].base.key = newkey;
623 tp->md5sig_info->keys6[tp->md5sig_info->entries6].base.keylen = newkeylen;
624
625 tp->md5sig_info->entries6++;
626 }
627 return 0;
628}
629
630static int tcp_v6_md5_add_func(struct sock *sk, struct sock *addr_sk,
631 u8 *newkey, __u8 newkeylen)
632{
633 return tcp_v6_md5_do_add(sk, &inet6_sk(addr_sk)->daddr,
634 newkey, newkeylen);
635}
636
637static int tcp_v6_md5_do_del(struct sock *sk, const struct in6_addr *peer)
638{
639 struct tcp_sock *tp = tcp_sk(sk);
640 int i;
641
642 for (i = 0; i < tp->md5sig_info->entries6; i++) {
643 if (ipv6_addr_equal(&tp->md5sig_info->keys6[i].addr, peer)) {
644 /* Free the key */
645 kfree(tp->md5sig_info->keys6[i].base.key);
646 tp->md5sig_info->entries6--;
647
648 if (tp->md5sig_info->entries6 == 0) {
649 kfree(tp->md5sig_info->keys6);
650 tp->md5sig_info->keys6 = NULL;
651 tp->md5sig_info->alloced6 = 0;
652 tcp_free_md5sig_pool();
653 } else {
654 /* shrink the database */
655 if (tp->md5sig_info->entries6 != i)
656 memmove(&tp->md5sig_info->keys6[i],
657 &tp->md5sig_info->keys6[i+1],
658 (tp->md5sig_info->entries6 - i)
659 * sizeof (tp->md5sig_info->keys6[0]));
660 }
661 return 0;
662 }
663 }
664 return -ENOENT;
665}
666
667static void tcp_v6_clear_md5_list (struct sock *sk)
668{
669 struct tcp_sock *tp = tcp_sk(sk);
670 int i;
671
672 if (tp->md5sig_info->entries6) {
673 for (i = 0; i < tp->md5sig_info->entries6; i++)
674 kfree(tp->md5sig_info->keys6[i].base.key);
675 tp->md5sig_info->entries6 = 0;
676 tcp_free_md5sig_pool();
677 }
678
679 kfree(tp->md5sig_info->keys6);
680 tp->md5sig_info->keys6 = NULL;
681 tp->md5sig_info->alloced6 = 0;
682
683 if (tp->md5sig_info->entries4) {
684 for (i = 0; i < tp->md5sig_info->entries4; i++)
685 kfree(tp->md5sig_info->keys4[i].base.key);
686 tp->md5sig_info->entries4 = 0;
687 tcp_free_md5sig_pool();
688 }
689
690 kfree(tp->md5sig_info->keys4);
691 tp->md5sig_info->keys4 = NULL;
692 tp->md5sig_info->alloced4 = 0;
693}
694
695static int tcp_v6_parse_md5_keys (struct sock *sk, char __user *optval,
696 int optlen)
697{
698 struct tcp_md5sig cmd;
699 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&cmd.tcpm_addr;
700 u8 *newkey;
701
702 if (optlen < sizeof(cmd))
703 return -EINVAL;
704
705 if (copy_from_user(&cmd, optval, sizeof(cmd)))
706 return -EFAULT;
707
708 if (sin6->sin6_family != AF_INET6)
709 return -EINVAL;
710
711 if (!cmd.tcpm_keylen) {
712 if (!tcp_sk(sk)->md5sig_info)
713 return -ENOENT;
714 if (ipv6_addr_v4mapped(&sin6->sin6_addr))
715 return tcp_v4_md5_do_del(sk, sin6->sin6_addr.s6_addr32[3]);
716 return tcp_v6_md5_do_del(sk, &sin6->sin6_addr);
717 }
718
719 if (cmd.tcpm_keylen > TCP_MD5SIG_MAXKEYLEN)
720 return -EINVAL;
721
722 if (!tcp_sk(sk)->md5sig_info) {
723 struct tcp_sock *tp = tcp_sk(sk);
724 struct tcp_md5sig_info *p;
725
726 p = kzalloc(sizeof(struct tcp_md5sig_info), GFP_KERNEL);
727 if (!p)
728 return -ENOMEM;
729
730 tp->md5sig_info = p;
731 sk_nocaps_add(sk, NETIF_F_GSO_MASK);
732 }
733
734 newkey = kmemdup(cmd.tcpm_key, cmd.tcpm_keylen, GFP_KERNEL);
735 if (!newkey)
736 return -ENOMEM;
737 if (ipv6_addr_v4mapped(&sin6->sin6_addr)) {
738 return tcp_v4_md5_do_add(sk, sin6->sin6_addr.s6_addr32[3],
739 newkey, cmd.tcpm_keylen);
740 }
741 return tcp_v6_md5_do_add(sk, &sin6->sin6_addr, newkey, cmd.tcpm_keylen);
742}
743
744static int tcp_v6_md5_hash_pseudoheader(struct tcp_md5sig_pool *hp,
745 const struct in6_addr *daddr,
746 const struct in6_addr *saddr, int nbytes)
747{
748 struct tcp6_pseudohdr *bp;
749 struct scatterlist sg;
750
751 bp = &hp->md5_blk.ip6;
752 /* 1. TCP pseudo-header (RFC2460) */
753 ipv6_addr_copy(&bp->saddr, saddr);
754 ipv6_addr_copy(&bp->daddr, daddr);
755 bp->protocol = cpu_to_be32(IPPROTO_TCP);
756 bp->len = cpu_to_be32(nbytes);
757
758 sg_init_one(&sg, bp, sizeof(*bp));
759 return crypto_hash_update(&hp->md5_desc, &sg, sizeof(*bp));
760}
761
762static int tcp_v6_md5_hash_hdr(char *md5_hash, struct tcp_md5sig_key *key,
763 const struct in6_addr *daddr, struct in6_addr *saddr,
764 struct tcphdr *th)
765{
766 struct tcp_md5sig_pool *hp;
767 struct hash_desc *desc;
768
769 hp = tcp_get_md5sig_pool();
770 if (!hp)
771 goto clear_hash_noput;
772 desc = &hp->md5_desc;
773
774 if (crypto_hash_init(desc))
775 goto clear_hash;
776 if (tcp_v6_md5_hash_pseudoheader(hp, daddr, saddr, th->doff << 2))
777 goto clear_hash;
778 if (tcp_md5_hash_header(hp, th))
779 goto clear_hash;
780 if (tcp_md5_hash_key(hp, key))
781 goto clear_hash;
782 if (crypto_hash_final(desc, md5_hash))
783 goto clear_hash;
784
785 tcp_put_md5sig_pool();
786 return 0;
787
788clear_hash:
789 tcp_put_md5sig_pool();
790clear_hash_noput:
791 memset(md5_hash, 0, 16);
792 return 1;
793}
794
795static int tcp_v6_md5_hash_skb(char *md5_hash, struct tcp_md5sig_key *key,
796 struct sock *sk, struct request_sock *req,
797 struct sk_buff *skb)
798{
799 const struct in6_addr *saddr, *daddr;
800 struct tcp_md5sig_pool *hp;
801 struct hash_desc *desc;
802 struct tcphdr *th = tcp_hdr(skb);
803
804 if (sk) {
805 saddr = &inet6_sk(sk)->saddr;
806 daddr = &inet6_sk(sk)->daddr;
807 } else if (req) {
808 saddr = &inet6_rsk(req)->loc_addr;
809 daddr = &inet6_rsk(req)->rmt_addr;
810 } else {
811 const struct ipv6hdr *ip6h = ipv6_hdr(skb);
812 saddr = &ip6h->saddr;
813 daddr = &ip6h->daddr;
814 }
815
816 hp = tcp_get_md5sig_pool();
817 if (!hp)
818 goto clear_hash_noput;
819 desc = &hp->md5_desc;
820
821 if (crypto_hash_init(desc))
822 goto clear_hash;
823
824 if (tcp_v6_md5_hash_pseudoheader(hp, daddr, saddr, skb->len))
825 goto clear_hash;
826 if (tcp_md5_hash_header(hp, th))
827 goto clear_hash;
828 if (tcp_md5_hash_skb_data(hp, skb, th->doff << 2))
829 goto clear_hash;
830 if (tcp_md5_hash_key(hp, key))
831 goto clear_hash;
832 if (crypto_hash_final(desc, md5_hash))
833 goto clear_hash;
834
835 tcp_put_md5sig_pool();
836 return 0;
837
838clear_hash:
839 tcp_put_md5sig_pool();
840clear_hash_noput:
841 memset(md5_hash, 0, 16);
842 return 1;
843}
844
845static int tcp_v6_inbound_md5_hash (struct sock *sk, struct sk_buff *skb)
846{
847 __u8 *hash_location = NULL;
848 struct tcp_md5sig_key *hash_expected;
849 const struct ipv6hdr *ip6h = ipv6_hdr(skb);
850 struct tcphdr *th = tcp_hdr(skb);
851 int genhash;
852 u8 newhash[16];
853
854 hash_expected = tcp_v6_md5_do_lookup(sk, &ip6h->saddr);
855 hash_location = tcp_parse_md5sig_option(th);
856
857 /* We've parsed the options - do we have a hash? */
858 if (!hash_expected && !hash_location)
859 return 0;
860
861 if (hash_expected && !hash_location) {
862 NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPMD5NOTFOUND);
863 return 1;
864 }
865
866 if (!hash_expected && hash_location) {
867 NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPMD5UNEXPECTED);
868 return 1;
869 }
870
871 /* check the signature */
872 genhash = tcp_v6_md5_hash_skb(newhash,
873 hash_expected,
874 NULL, NULL, skb);
875
876 if (genhash || memcmp(hash_location, newhash, 16) != 0) {
877 if (net_ratelimit()) {
878 printk(KERN_INFO "MD5 Hash %s for [%pI6c]:%u->[%pI6c]:%u\n",
879 genhash ? "failed" : "mismatch",
880 &ip6h->saddr, ntohs(th->source),
881 &ip6h->daddr, ntohs(th->dest));
882 }
883 return 1;
884 }
885 return 0;
886}
887#endif
888
889struct request_sock_ops tcp6_request_sock_ops __read_mostly = {
890 .family = AF_INET6,
891 .obj_size = sizeof(struct tcp6_request_sock),
892 .rtx_syn_ack = tcp_v6_rtx_synack,
893 .send_ack = tcp_v6_reqsk_send_ack,
894 .destructor = tcp_v6_reqsk_destructor,
895 .send_reset = tcp_v6_send_reset,
896 .syn_ack_timeout = tcp_syn_ack_timeout,
897};
898
899#ifdef CONFIG_TCP_MD5SIG
900static const struct tcp_request_sock_ops tcp_request_sock_ipv6_ops = {
901 .md5_lookup = tcp_v6_reqsk_md5_lookup,
902 .calc_md5_hash = tcp_v6_md5_hash_skb,
903};
904#endif
905
906static void __tcp_v6_send_check(struct sk_buff *skb,
907 const struct in6_addr *saddr, const struct in6_addr *daddr)
908{
909 struct tcphdr *th = tcp_hdr(skb);
910
911 if (skb->ip_summed == CHECKSUM_PARTIAL) {
912 th->check = ~tcp_v6_check(skb->len, saddr, daddr, 0);
913 skb->csum_start = skb_transport_header(skb) - skb->head;
914 skb->csum_offset = offsetof(struct tcphdr, check);
915 } else {
916 th->check = tcp_v6_check(skb->len, saddr, daddr,
917 csum_partial(th, th->doff << 2,
918 skb->csum));
919 }
920}
921
922static void tcp_v6_send_check(struct sock *sk, struct sk_buff *skb)
923{
924 struct ipv6_pinfo *np = inet6_sk(sk);
925
926 __tcp_v6_send_check(skb, &np->saddr, &np->daddr);
927}
928
929static int tcp_v6_gso_send_check(struct sk_buff *skb)
930{
931 const struct ipv6hdr *ipv6h;
932 struct tcphdr *th;
933
934 if (!pskb_may_pull(skb, sizeof(*th)))
935 return -EINVAL;
936
937 ipv6h = ipv6_hdr(skb);
938 th = tcp_hdr(skb);
939
940 th->check = 0;
941 skb->ip_summed = CHECKSUM_PARTIAL;
942 __tcp_v6_send_check(skb, &ipv6h->saddr, &ipv6h->daddr);
943 return 0;
944}
945
946static struct sk_buff **tcp6_gro_receive(struct sk_buff **head,
947 struct sk_buff *skb)
948{
949 const struct ipv6hdr *iph = skb_gro_network_header(skb);
950
951 switch (skb->ip_summed) {
952 case CHECKSUM_COMPLETE:
953 if (!tcp_v6_check(skb_gro_len(skb), &iph->saddr, &iph->daddr,
954 skb->csum)) {
955 skb->ip_summed = CHECKSUM_UNNECESSARY;
956 break;
957 }
958
959 /* fall through */
960 case CHECKSUM_NONE:
961 NAPI_GRO_CB(skb)->flush = 1;
962 return NULL;
963 }
964
965 return tcp_gro_receive(head, skb);
966}
967
968static int tcp6_gro_complete(struct sk_buff *skb)
969{
970 const struct ipv6hdr *iph = ipv6_hdr(skb);
971 struct tcphdr *th = tcp_hdr(skb);
972
973 th->check = ~tcp_v6_check(skb->len - skb_transport_offset(skb),
974 &iph->saddr, &iph->daddr, 0);
975 skb_shinfo(skb)->gso_type = SKB_GSO_TCPV6;
976
977 return tcp_gro_complete(skb);
978}
979
980static void tcp_v6_send_response(struct sk_buff *skb, u32 seq, u32 ack, u32 win,
981 u32 ts, struct tcp_md5sig_key *key, int rst)
982{
983 struct tcphdr *th = tcp_hdr(skb), *t1;
984 struct sk_buff *buff;
985 struct flowi6 fl6;
986 struct net *net = dev_net(skb_dst(skb)->dev);
987 struct sock *ctl_sk = net->ipv6.tcp_sk;
988 unsigned int tot_len = sizeof(struct tcphdr);
989 struct dst_entry *dst;
990 __be32 *topt;
991
992 if (ts)
993 tot_len += TCPOLEN_TSTAMP_ALIGNED;
994#ifdef CONFIG_TCP_MD5SIG
995 if (key)
996 tot_len += TCPOLEN_MD5SIG_ALIGNED;
997#endif
998
999 buff = alloc_skb(MAX_HEADER + sizeof(struct ipv6hdr) + tot_len,
1000 GFP_ATOMIC);
1001 if (buff == NULL)
1002 return;
1003
1004 skb_reserve(buff, MAX_HEADER + sizeof(struct ipv6hdr) + tot_len);
1005
1006 t1 = (struct tcphdr *) skb_push(buff, tot_len);
1007 skb_reset_transport_header(buff);
1008
1009 /* Swap the send and the receive. */
1010 memset(t1, 0, sizeof(*t1));
1011 t1->dest = th->source;
1012 t1->source = th->dest;
1013 t1->doff = tot_len / 4;
1014 t1->seq = htonl(seq);
1015 t1->ack_seq = htonl(ack);
1016 t1->ack = !rst || !th->ack;
1017 t1->rst = rst;
1018 t1->window = htons(win);
1019
1020 topt = (__be32 *)(t1 + 1);
1021
1022 if (ts) {
1023 *topt++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) |
1024 (TCPOPT_TIMESTAMP << 8) | TCPOLEN_TIMESTAMP);
1025 *topt++ = htonl(tcp_time_stamp);
1026 *topt++ = htonl(ts);
1027 }
1028
1029#ifdef CONFIG_TCP_MD5SIG
1030 if (key) {
1031 *topt++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) |
1032 (TCPOPT_MD5SIG << 8) | TCPOLEN_MD5SIG);
1033 tcp_v6_md5_hash_hdr((__u8 *)topt, key,
1034 &ipv6_hdr(skb)->saddr,
1035 &ipv6_hdr(skb)->daddr, t1);
1036 }
1037#endif
1038
1039 memset(&fl6, 0, sizeof(fl6));
1040 ipv6_addr_copy(&fl6.daddr, &ipv6_hdr(skb)->saddr);
1041 ipv6_addr_copy(&fl6.saddr, &ipv6_hdr(skb)->daddr);
1042
1043 buff->ip_summed = CHECKSUM_PARTIAL;
1044 buff->csum = 0;
1045
1046 __tcp_v6_send_check(buff, &fl6.saddr, &fl6.daddr);
1047
1048 fl6.flowi6_proto = IPPROTO_TCP;
1049 fl6.flowi6_oif = inet6_iif(skb);
1050 fl6.fl6_dport = t1->dest;
1051 fl6.fl6_sport = t1->source;
1052 security_skb_classify_flow(skb, flowi6_to_flowi(&fl6));
1053
1054 /* Pass a socket to ip6_dst_lookup either it is for RST
1055 * Underlying function will use this to retrieve the network
1056 * namespace
1057 */
1058 dst = ip6_dst_lookup_flow(ctl_sk, &fl6, NULL, false);
1059 if (!IS_ERR(dst)) {
1060 skb_dst_set(buff, dst);
1061 ip6_xmit(ctl_sk, buff, &fl6, NULL);
1062 TCP_INC_STATS_BH(net, TCP_MIB_OUTSEGS);
1063 if (rst)
1064 TCP_INC_STATS_BH(net, TCP_MIB_OUTRSTS);
1065 return;
1066 }
1067
1068 kfree_skb(buff);
1069}
1070
1071static void tcp_v6_send_reset(struct sock *sk, struct sk_buff *skb)
1072{
1073 struct tcphdr *th = tcp_hdr(skb);
1074 u32 seq = 0, ack_seq = 0;
1075 struct tcp_md5sig_key *key = NULL;
1076
1077 if (th->rst)
1078 return;
1079
1080 if (!ipv6_unicast_destination(skb))
1081 return;
1082
1083#ifdef CONFIG_TCP_MD5SIG
1084 if (sk)
1085 key = tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->daddr);
1086#endif
1087
1088 if (th->ack)
1089 seq = ntohl(th->ack_seq);
1090 else
1091 ack_seq = ntohl(th->seq) + th->syn + th->fin + skb->len -
1092 (th->doff << 2);
1093
1094 tcp_v6_send_response(skb, seq, ack_seq, 0, 0, key, 1);
1095}
1096
1097static void tcp_v6_send_ack(struct sk_buff *skb, u32 seq, u32 ack, u32 win, u32 ts,
1098 struct tcp_md5sig_key *key)
1099{
1100 tcp_v6_send_response(skb, seq, ack, win, ts, key, 0);
1101}
1102
1103static void tcp_v6_timewait_ack(struct sock *sk, struct sk_buff *skb)
1104{
1105 struct inet_timewait_sock *tw = inet_twsk(sk);
1106 struct tcp_timewait_sock *tcptw = tcp_twsk(sk);
1107
1108 tcp_v6_send_ack(skb, tcptw->tw_snd_nxt, tcptw->tw_rcv_nxt,
1109 tcptw->tw_rcv_wnd >> tw->tw_rcv_wscale,
1110 tcptw->tw_ts_recent, tcp_twsk_md5_key(tcptw));
1111
1112 inet_twsk_put(tw);
1113}
1114
1115static void tcp_v6_reqsk_send_ack(struct sock *sk, struct sk_buff *skb,
1116 struct request_sock *req)
1117{
1118 tcp_v6_send_ack(skb, tcp_rsk(req)->snt_isn + 1, tcp_rsk(req)->rcv_isn + 1, req->rcv_wnd, req->ts_recent,
1119 tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->daddr));
1120}
1121
1122
1123static struct sock *tcp_v6_hnd_req(struct sock *sk,struct sk_buff *skb)
1124{
1125 struct request_sock *req, **prev;
1126 const struct tcphdr *th = tcp_hdr(skb);
1127 struct sock *nsk;
1128
1129 /* Find possible connection requests. */
1130 req = inet6_csk_search_req(sk, &prev, th->source,
1131 &ipv6_hdr(skb)->saddr,
1132 &ipv6_hdr(skb)->daddr, inet6_iif(skb));
1133 if (req)
1134 return tcp_check_req(sk, skb, req, prev);
1135
1136 nsk = __inet6_lookup_established(sock_net(sk), &tcp_hashinfo,
1137 &ipv6_hdr(skb)->saddr, th->source,
1138 &ipv6_hdr(skb)->daddr, ntohs(th->dest), inet6_iif(skb));
1139
1140 if (nsk) {
1141 if (nsk->sk_state != TCP_TIME_WAIT) {
1142 bh_lock_sock(nsk);
1143 return nsk;
1144 }
1145 inet_twsk_put(inet_twsk(nsk));
1146 return NULL;
1147 }
1148
1149#ifdef CONFIG_SYN_COOKIES
1150 if (!th->syn)
1151 sk = cookie_v6_check(sk, skb);
1152#endif
1153 return sk;
1154}
1155
1156/* FIXME: this is substantially similar to the ipv4 code.
1157 * Can some kind of merge be done? -- erics
1158 */
1159static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
1160{
1161 struct tcp_extend_values tmp_ext;
1162 struct tcp_options_received tmp_opt;
1163 u8 *hash_location;
1164 struct request_sock *req;
1165 struct inet6_request_sock *treq;
1166 struct ipv6_pinfo *np = inet6_sk(sk);
1167 struct tcp_sock *tp = tcp_sk(sk);
1168 __u32 isn = TCP_SKB_CB(skb)->when;
1169 struct dst_entry *dst = NULL;
1170 int want_cookie = 0;
1171
1172 if (skb->protocol == htons(ETH_P_IP))
1173 return tcp_v4_conn_request(sk, skb);
1174
1175 if (!ipv6_unicast_destination(skb))
1176 goto drop;
1177
1178 if (inet_csk_reqsk_queue_is_full(sk) && !isn) {
1179 want_cookie = tcp_syn_flood_action(sk, skb, "TCPv6");
1180 if (!want_cookie)
1181 goto drop;
1182 }
1183
1184 if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1)
1185 goto drop;
1186
1187 req = inet6_reqsk_alloc(&tcp6_request_sock_ops);
1188 if (req == NULL)
1189 goto drop;
1190
1191#ifdef CONFIG_TCP_MD5SIG
1192 tcp_rsk(req)->af_specific = &tcp_request_sock_ipv6_ops;
1193#endif
1194
1195 tcp_clear_options(&tmp_opt);
1196 tmp_opt.mss_clamp = IPV6_MIN_MTU - sizeof(struct tcphdr) - sizeof(struct ipv6hdr);
1197 tmp_opt.user_mss = tp->rx_opt.user_mss;
1198 tcp_parse_options(skb, &tmp_opt, &hash_location, 0);
1199
1200 if (tmp_opt.cookie_plus > 0 &&
1201 tmp_opt.saw_tstamp &&
1202 !tp->rx_opt.cookie_out_never &&
1203 (sysctl_tcp_cookie_size > 0 ||
1204 (tp->cookie_values != NULL &&
1205 tp->cookie_values->cookie_desired > 0))) {
1206 u8 *c;
1207 u32 *d;
1208 u32 *mess = &tmp_ext.cookie_bakery[COOKIE_DIGEST_WORDS];
1209 int l = tmp_opt.cookie_plus - TCPOLEN_COOKIE_BASE;
1210
1211 if (tcp_cookie_generator(&tmp_ext.cookie_bakery[0]) != 0)
1212 goto drop_and_free;
1213
1214 /* Secret recipe starts with IP addresses */
1215 d = (__force u32 *)&ipv6_hdr(skb)->daddr.s6_addr32[0];
1216 *mess++ ^= *d++;
1217 *mess++ ^= *d++;
1218 *mess++ ^= *d++;
1219 *mess++ ^= *d++;
1220 d = (__force u32 *)&ipv6_hdr(skb)->saddr.s6_addr32[0];
1221 *mess++ ^= *d++;
1222 *mess++ ^= *d++;
1223 *mess++ ^= *d++;
1224 *mess++ ^= *d++;
1225
1226 /* plus variable length Initiator Cookie */
1227 c = (u8 *)mess;
1228 while (l-- > 0)
1229 *c++ ^= *hash_location++;
1230
1231 want_cookie = 0; /* not our kind of cookie */
1232 tmp_ext.cookie_out_never = 0; /* false */
1233 tmp_ext.cookie_plus = tmp_opt.cookie_plus;
1234 } else if (!tp->rx_opt.cookie_in_always) {
1235 /* redundant indications, but ensure initialization. */
1236 tmp_ext.cookie_out_never = 1; /* true */
1237 tmp_ext.cookie_plus = 0;
1238 } else {
1239 goto drop_and_free;
1240 }
1241 tmp_ext.cookie_in_always = tp->rx_opt.cookie_in_always;
1242
1243 if (want_cookie && !tmp_opt.saw_tstamp)
1244 tcp_clear_options(&tmp_opt);
1245
1246 tmp_opt.tstamp_ok = tmp_opt.saw_tstamp;
1247 tcp_openreq_init(req, &tmp_opt, skb);
1248
1249 treq = inet6_rsk(req);
1250 ipv6_addr_copy(&treq->rmt_addr, &ipv6_hdr(skb)->saddr);
1251 ipv6_addr_copy(&treq->loc_addr, &ipv6_hdr(skb)->daddr);
1252 if (!want_cookie || tmp_opt.tstamp_ok)
1253 TCP_ECN_create_request(req, tcp_hdr(skb));
1254
1255 if (!isn) {
1256 struct inet_peer *peer = NULL;
1257
1258 if (ipv6_opt_accepted(sk, skb) ||
1259 np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo ||
1260 np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim) {
1261 atomic_inc(&skb->users);
1262 treq->pktopts = skb;
1263 }
1264 treq->iif = sk->sk_bound_dev_if;
1265
1266 /* So that link locals have meaning */
1267 if (!sk->sk_bound_dev_if &&
1268 ipv6_addr_type(&treq->rmt_addr) & IPV6_ADDR_LINKLOCAL)
1269 treq->iif = inet6_iif(skb);
1270
1271 if (want_cookie) {
1272 isn = cookie_v6_init_sequence(sk, skb, &req->mss);
1273 req->cookie_ts = tmp_opt.tstamp_ok;
1274 goto have_isn;
1275 }
1276
1277 /* VJ's idea. We save last timestamp seen
1278 * from the destination in peer table, when entering
1279 * state TIME-WAIT, and check against it before
1280 * accepting new connection request.
1281 *
1282 * If "isn" is not zero, this request hit alive
1283 * timewait bucket, so that all the necessary checks
1284 * are made in the function processing timewait state.
1285 */
1286 if (tmp_opt.saw_tstamp &&
1287 tcp_death_row.sysctl_tw_recycle &&
1288 (dst = inet6_csk_route_req(sk, req)) != NULL &&
1289 (peer = rt6_get_peer((struct rt6_info *)dst)) != NULL &&
1290 ipv6_addr_equal((struct in6_addr *)peer->daddr.addr.a6,
1291 &treq->rmt_addr)) {
1292 inet_peer_refcheck(peer);
1293 if ((u32)get_seconds() - peer->tcp_ts_stamp < TCP_PAWS_MSL &&
1294 (s32)(peer->tcp_ts - req->ts_recent) >
1295 TCP_PAWS_WINDOW) {
1296 NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_PAWSPASSIVEREJECTED);
1297 goto drop_and_release;
1298 }
1299 }
1300 /* Kill the following clause, if you dislike this way. */
1301 else if (!sysctl_tcp_syncookies &&
1302 (sysctl_max_syn_backlog - inet_csk_reqsk_queue_len(sk) <
1303 (sysctl_max_syn_backlog >> 2)) &&
1304 (!peer || !peer->tcp_ts_stamp) &&
1305 (!dst || !dst_metric(dst, RTAX_RTT))) {
1306 /* Without syncookies last quarter of
1307 * backlog is filled with destinations,
1308 * proven to be alive.
1309 * It means that we continue to communicate
1310 * to destinations, already remembered
1311 * to the moment of synflood.
1312 */
1313 LIMIT_NETDEBUG(KERN_DEBUG "TCP: drop open request from %pI6/%u\n",
1314 &treq->rmt_addr, ntohs(tcp_hdr(skb)->source));
1315 goto drop_and_release;
1316 }
1317
1318 isn = tcp_v6_init_sequence(skb);
1319 }
1320have_isn:
1321 tcp_rsk(req)->snt_isn = isn;
1322 tcp_rsk(req)->snt_synack = tcp_time_stamp;
1323
1324 security_inet_conn_request(sk, skb, req);
1325
1326 if (tcp_v6_send_synack(sk, req,
1327 (struct request_values *)&tmp_ext) ||
1328 want_cookie)
1329 goto drop_and_free;
1330
1331 inet6_csk_reqsk_queue_hash_add(sk, req, TCP_TIMEOUT_INIT);
1332 return 0;
1333
1334drop_and_release:
1335 dst_release(dst);
1336drop_and_free:
1337 reqsk_free(req);
1338drop:
1339 return 0; /* don't send reset */
1340}
1341
1342static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
1343 struct request_sock *req,
1344 struct dst_entry *dst)
1345{
1346 struct inet6_request_sock *treq;
1347 struct ipv6_pinfo *newnp, *np = inet6_sk(sk);
1348 struct tcp6_sock *newtcp6sk;
1349 struct inet_sock *newinet;
1350 struct tcp_sock *newtp;
1351 struct sock *newsk;
1352 struct ipv6_txoptions *opt;
1353#ifdef CONFIG_TCP_MD5SIG
1354 struct tcp_md5sig_key *key;
1355#endif
1356
1357 if (skb->protocol == htons(ETH_P_IP)) {
1358 /*
1359 * v6 mapped
1360 */
1361
1362 newsk = tcp_v4_syn_recv_sock(sk, skb, req, dst);
1363
1364 if (newsk == NULL)
1365 return NULL;
1366
1367 newtcp6sk = (struct tcp6_sock *)newsk;
1368 inet_sk(newsk)->pinet6 = &newtcp6sk->inet6;
1369
1370 newinet = inet_sk(newsk);
1371 newnp = inet6_sk(newsk);
1372 newtp = tcp_sk(newsk);
1373
1374 memcpy(newnp, np, sizeof(struct ipv6_pinfo));
1375
1376 ipv6_addr_set_v4mapped(newinet->inet_daddr, &newnp->daddr);
1377
1378 ipv6_addr_set_v4mapped(newinet->inet_saddr, &newnp->saddr);
1379
1380 ipv6_addr_copy(&newnp->rcv_saddr, &newnp->saddr);
1381
1382 inet_csk(newsk)->icsk_af_ops = &ipv6_mapped;
1383 newsk->sk_backlog_rcv = tcp_v4_do_rcv;
1384#ifdef CONFIG_TCP_MD5SIG
1385 newtp->af_specific = &tcp_sock_ipv6_mapped_specific;
1386#endif
1387
1388 newnp->ipv6_ac_list = NULL;
1389 newnp->ipv6_fl_list = NULL;
1390 newnp->pktoptions = NULL;
1391 newnp->opt = NULL;
1392 newnp->mcast_oif = inet6_iif(skb);
1393 newnp->mcast_hops = ipv6_hdr(skb)->hop_limit;
1394
1395 /*
1396 * No need to charge this sock to the relevant IPv6 refcnt debug socks count
1397 * here, tcp_create_openreq_child now does this for us, see the comment in
1398 * that function for the gory details. -acme
1399 */
1400
1401 /* It is tricky place. Until this moment IPv4 tcp
1402 worked with IPv6 icsk.icsk_af_ops.
1403 Sync it now.
1404 */
1405 tcp_sync_mss(newsk, inet_csk(newsk)->icsk_pmtu_cookie);
1406
1407 return newsk;
1408 }
1409
1410 treq = inet6_rsk(req);
1411 opt = np->opt;
1412
1413 if (sk_acceptq_is_full(sk))
1414 goto out_overflow;
1415
1416 if (!dst) {
1417 dst = inet6_csk_route_req(sk, req);
1418 if (!dst)
1419 goto out;
1420 }
1421
1422 newsk = tcp_create_openreq_child(sk, req, skb);
1423 if (newsk == NULL)
1424 goto out_nonewsk;
1425
1426 /*
1427 * No need to charge this sock to the relevant IPv6 refcnt debug socks
1428 * count here, tcp_create_openreq_child now does this for us, see the
1429 * comment in that function for the gory details. -acme
1430 */
1431
1432 newsk->sk_gso_type = SKB_GSO_TCPV6;
1433 __ip6_dst_store(newsk, dst, NULL, NULL);
1434
1435 newtcp6sk = (struct tcp6_sock *)newsk;
1436 inet_sk(newsk)->pinet6 = &newtcp6sk->inet6;
1437
1438 newtp = tcp_sk(newsk);
1439 newinet = inet_sk(newsk);
1440 newnp = inet6_sk(newsk);
1441
1442 memcpy(newnp, np, sizeof(struct ipv6_pinfo));
1443
1444 ipv6_addr_copy(&newnp->daddr, &treq->rmt_addr);
1445 ipv6_addr_copy(&newnp->saddr, &treq->loc_addr);
1446 ipv6_addr_copy(&newnp->rcv_saddr, &treq->loc_addr);
1447 newsk->sk_bound_dev_if = treq->iif;
1448
1449 /* Now IPv6 options...
1450
1451 First: no IPv4 options.
1452 */
1453 newinet->inet_opt = NULL;
1454 newnp->ipv6_ac_list = NULL;
1455 newnp->ipv6_fl_list = NULL;
1456
1457 /* Clone RX bits */
1458 newnp->rxopt.all = np->rxopt.all;
1459
1460 /* Clone pktoptions received with SYN */
1461 newnp->pktoptions = NULL;
1462 if (treq->pktopts != NULL) {
1463 newnp->pktoptions = skb_clone(treq->pktopts, GFP_ATOMIC);
1464 kfree_skb(treq->pktopts);
1465 treq->pktopts = NULL;
1466 if (newnp->pktoptions)
1467 skb_set_owner_r(newnp->pktoptions, newsk);
1468 }
1469 newnp->opt = NULL;
1470 newnp->mcast_oif = inet6_iif(skb);
1471 newnp->mcast_hops = ipv6_hdr(skb)->hop_limit;
1472
1473 /* Clone native IPv6 options from listening socket (if any)
1474
1475 Yes, keeping reference count would be much more clever,
1476 but we make one more one thing there: reattach optmem
1477 to newsk.
1478 */
1479 if (opt) {
1480 newnp->opt = ipv6_dup_options(newsk, opt);
1481 if (opt != np->opt)
1482 sock_kfree_s(sk, opt, opt->tot_len);
1483 }
1484
1485 inet_csk(newsk)->icsk_ext_hdr_len = 0;
1486 if (newnp->opt)
1487 inet_csk(newsk)->icsk_ext_hdr_len = (newnp->opt->opt_nflen +
1488 newnp->opt->opt_flen);
1489
1490 tcp_mtup_init(newsk);
1491 tcp_sync_mss(newsk, dst_mtu(dst));
1492 newtp->advmss = dst_metric_advmss(dst);
1493 tcp_initialize_rcv_mss(newsk);
1494 if (tcp_rsk(req)->snt_synack)
1495 tcp_valid_rtt_meas(newsk,
1496 tcp_time_stamp - tcp_rsk(req)->snt_synack);
1497 newtp->total_retrans = req->retrans;
1498
1499 newinet->inet_daddr = newinet->inet_saddr = LOOPBACK4_IPV6;
1500 newinet->inet_rcv_saddr = LOOPBACK4_IPV6;
1501
1502#ifdef CONFIG_TCP_MD5SIG
1503 /* Copy over the MD5 key from the original socket */
1504 if ((key = tcp_v6_md5_do_lookup(sk, &newnp->daddr)) != NULL) {
1505 /* We're using one, so create a matching key
1506 * on the newsk structure. If we fail to get
1507 * memory, then we end up not copying the key
1508 * across. Shucks.
1509 */
1510 char *newkey = kmemdup(key->key, key->keylen, GFP_ATOMIC);
1511 if (newkey != NULL)
1512 tcp_v6_md5_do_add(newsk, &newnp->daddr,
1513 newkey, key->keylen);
1514 }
1515#endif
1516
1517 if (__inet_inherit_port(sk, newsk) < 0) {
1518 sock_put(newsk);
1519 goto out;
1520 }
1521 __inet6_hash(newsk, NULL);
1522
1523 return newsk;
1524
1525out_overflow:
1526 NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS);
1527out_nonewsk:
1528 if (opt && opt != np->opt)
1529 sock_kfree_s(sk, opt, opt->tot_len);
1530 dst_release(dst);
1531out:
1532 NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS);
1533 return NULL;
1534}
1535
1536static __sum16 tcp_v6_checksum_init(struct sk_buff *skb)
1537{
1538 if (skb->ip_summed == CHECKSUM_COMPLETE) {
1539 if (!tcp_v6_check(skb->len, &ipv6_hdr(skb)->saddr,
1540 &ipv6_hdr(skb)->daddr, skb->csum)) {
1541 skb->ip_summed = CHECKSUM_UNNECESSARY;
1542 return 0;
1543 }
1544 }
1545
1546 skb->csum = ~csum_unfold(tcp_v6_check(skb->len,
1547 &ipv6_hdr(skb)->saddr,
1548 &ipv6_hdr(skb)->daddr, 0));
1549
1550 if (skb->len <= 76) {
1551 return __skb_checksum_complete(skb);
1552 }
1553 return 0;
1554}
1555
1556/* The socket must have it's spinlock held when we get
1557 * here.
1558 *
1559 * We have a potential double-lock case here, so even when
1560 * doing backlog processing we use the BH locking scheme.
1561 * This is because we cannot sleep with the original spinlock
1562 * held.
1563 */
1564static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
1565{
1566 struct ipv6_pinfo *np = inet6_sk(sk);
1567 struct tcp_sock *tp;
1568 struct sk_buff *opt_skb = NULL;
1569
1570 /* Imagine: socket is IPv6. IPv4 packet arrives,
1571 goes to IPv4 receive handler and backlogged.
1572 From backlog it always goes here. Kerboom...
1573 Fortunately, tcp_rcv_established and rcv_established
1574 handle them correctly, but it is not case with
1575 tcp_v6_hnd_req and tcp_v6_send_reset(). --ANK
1576 */
1577
1578 if (skb->protocol == htons(ETH_P_IP))
1579 return tcp_v4_do_rcv(sk, skb);
1580
1581#ifdef CONFIG_TCP_MD5SIG
1582 if (tcp_v6_inbound_md5_hash (sk, skb))
1583 goto discard;
1584#endif
1585
1586 if (sk_filter(sk, skb))
1587 goto discard;
1588
1589 /*
1590 * socket locking is here for SMP purposes as backlog rcv
1591 * is currently called with bh processing disabled.
1592 */
1593
1594 /* Do Stevens' IPV6_PKTOPTIONS.
1595
1596 Yes, guys, it is the only place in our code, where we
1597 may make it not affecting IPv4.
1598 The rest of code is protocol independent,
1599 and I do not like idea to uglify IPv4.
1600
1601 Actually, all the idea behind IPV6_PKTOPTIONS
1602 looks not very well thought. For now we latch
1603 options, received in the last packet, enqueued
1604 by tcp. Feel free to propose better solution.
1605 --ANK (980728)
1606 */
1607 if (np->rxopt.all)
1608 opt_skb = skb_clone(skb, GFP_ATOMIC);
1609
1610 if (sk->sk_state == TCP_ESTABLISHED) { /* Fast path */
1611 sock_rps_save_rxhash(sk, skb->rxhash);
1612 if (tcp_rcv_established(sk, skb, tcp_hdr(skb), skb->len))
1613 goto reset;
1614 if (opt_skb)
1615 goto ipv6_pktoptions;
1616 return 0;
1617 }
1618
1619 if (skb->len < tcp_hdrlen(skb) || tcp_checksum_complete(skb))
1620 goto csum_err;
1621
1622 if (sk->sk_state == TCP_LISTEN) {
1623 struct sock *nsk = tcp_v6_hnd_req(sk, skb);
1624 if (!nsk)
1625 goto discard;
1626
1627 /*
1628 * Queue it on the new socket if the new socket is active,
1629 * otherwise we just shortcircuit this and continue with
1630 * the new socket..
1631 */
1632 if(nsk != sk) {
1633 sock_rps_save_rxhash(nsk, skb->rxhash);
1634 if (tcp_child_process(sk, nsk, skb))
1635 goto reset;
1636 if (opt_skb)
1637 __kfree_skb(opt_skb);
1638 return 0;
1639 }
1640 } else
1641 sock_rps_save_rxhash(sk, skb->rxhash);
1642
1643 if (tcp_rcv_state_process(sk, skb, tcp_hdr(skb), skb->len))
1644 goto reset;
1645 if (opt_skb)
1646 goto ipv6_pktoptions;
1647 return 0;
1648
1649reset:
1650 tcp_v6_send_reset(sk, skb);
1651discard:
1652 if (opt_skb)
1653 __kfree_skb(opt_skb);
1654 kfree_skb(skb);
1655 return 0;
1656csum_err:
1657 TCP_INC_STATS_BH(sock_net(sk), TCP_MIB_INERRS);
1658 goto discard;
1659
1660
1661ipv6_pktoptions:
1662 /* Do you ask, what is it?
1663
1664 1. skb was enqueued by tcp.
1665 2. skb is added to tail of read queue, rather than out of order.
1666 3. socket is not in passive state.
1667 4. Finally, it really contains options, which user wants to receive.
1668 */
1669 tp = tcp_sk(sk);
1670 if (TCP_SKB_CB(opt_skb)->end_seq == tp->rcv_nxt &&
1671 !((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_LISTEN))) {
1672 if (np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo)
1673 np->mcast_oif = inet6_iif(opt_skb);
1674 if (np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim)
1675 np->mcast_hops = ipv6_hdr(opt_skb)->hop_limit;
1676 if (ipv6_opt_accepted(sk, opt_skb)) {
1677 skb_set_owner_r(opt_skb, sk);
1678 opt_skb = xchg(&np->pktoptions, opt_skb);
1679 } else {
1680 __kfree_skb(opt_skb);
1681 opt_skb = xchg(&np->pktoptions, NULL);
1682 }
1683 }
1684
1685 kfree_skb(opt_skb);
1686 return 0;
1687}
1688
1689static int tcp_v6_rcv(struct sk_buff *skb)
1690{
1691 struct tcphdr *th;
1692 const struct ipv6hdr *hdr;
1693 struct sock *sk;
1694 int ret;
1695 struct net *net = dev_net(skb->dev);
1696
1697 if (skb->pkt_type != PACKET_HOST)
1698 goto discard_it;
1699
1700 /*
1701 * Count it even if it's bad.
1702 */
1703 TCP_INC_STATS_BH(net, TCP_MIB_INSEGS);
1704
1705 if (!pskb_may_pull(skb, sizeof(struct tcphdr)))
1706 goto discard_it;
1707
1708 th = tcp_hdr(skb);
1709
1710 if (th->doff < sizeof(struct tcphdr)/4)
1711 goto bad_packet;
1712 if (!pskb_may_pull(skb, th->doff*4))
1713 goto discard_it;
1714
1715 if (!skb_csum_unnecessary(skb) && tcp_v6_checksum_init(skb))
1716 goto bad_packet;
1717
1718 th = tcp_hdr(skb);
1719 hdr = ipv6_hdr(skb);
1720 TCP_SKB_CB(skb)->seq = ntohl(th->seq);
1721 TCP_SKB_CB(skb)->end_seq = (TCP_SKB_CB(skb)->seq + th->syn + th->fin +
1722 skb->len - th->doff*4);
1723 TCP_SKB_CB(skb)->ack_seq = ntohl(th->ack_seq);
1724 TCP_SKB_CB(skb)->when = 0;
1725 TCP_SKB_CB(skb)->flags = ipv6_get_dsfield(hdr);
1726 TCP_SKB_CB(skb)->sacked = 0;
1727
1728 sk = __inet6_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest);
1729 if (!sk)
1730 goto no_tcp_socket;
1731
1732process:
1733 if (sk->sk_state == TCP_TIME_WAIT)
1734 goto do_time_wait;
1735
1736 if (hdr->hop_limit < inet6_sk(sk)->min_hopcount) {
1737 NET_INC_STATS_BH(net, LINUX_MIB_TCPMINTTLDROP);
1738 goto discard_and_relse;
1739 }
1740
1741 if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb))
1742 goto discard_and_relse;
1743
1744 if (sk_filter(sk, skb))
1745 goto discard_and_relse;
1746
1747 skb->dev = NULL;
1748
1749 bh_lock_sock_nested(sk);
1750 ret = 0;
1751 if (!sock_owned_by_user(sk)) {
1752#ifdef CONFIG_NET_DMA
1753 struct tcp_sock *tp = tcp_sk(sk);
1754 if (!tp->ucopy.dma_chan && tp->ucopy.pinned_list)
1755 tp->ucopy.dma_chan = dma_find_channel(DMA_MEMCPY);
1756 if (tp->ucopy.dma_chan)
1757 ret = tcp_v6_do_rcv(sk, skb);
1758 else
1759#endif
1760 {
1761 if (!tcp_prequeue(sk, skb))
1762 ret = tcp_v6_do_rcv(sk, skb);
1763 }
1764 } else if (unlikely(sk_add_backlog(sk, skb))) {
1765 bh_unlock_sock(sk);
1766 NET_INC_STATS_BH(net, LINUX_MIB_TCPBACKLOGDROP);
1767 goto discard_and_relse;
1768 }
1769 bh_unlock_sock(sk);
1770
1771 sock_put(sk);
1772 return ret ? -1 : 0;
1773
1774no_tcp_socket:
1775 if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb))
1776 goto discard_it;
1777
1778 if (skb->len < (th->doff<<2) || tcp_checksum_complete(skb)) {
1779bad_packet:
1780 TCP_INC_STATS_BH(net, TCP_MIB_INERRS);
1781 } else {
1782 tcp_v6_send_reset(NULL, skb);
1783 }
1784
1785discard_it:
1786
1787 /*
1788 * Discard frame
1789 */
1790
1791 kfree_skb(skb);
1792 return 0;
1793
1794discard_and_relse:
1795 sock_put(sk);
1796 goto discard_it;
1797
1798do_time_wait:
1799 if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) {
1800 inet_twsk_put(inet_twsk(sk));
1801 goto discard_it;
1802 }
1803
1804 if (skb->len < (th->doff<<2) || tcp_checksum_complete(skb)) {
1805 TCP_INC_STATS_BH(net, TCP_MIB_INERRS);
1806 inet_twsk_put(inet_twsk(sk));
1807 goto discard_it;
1808 }
1809
1810 switch (tcp_timewait_state_process(inet_twsk(sk), skb, th)) {
1811 case TCP_TW_SYN:
1812 {
1813 struct sock *sk2;
1814
1815 sk2 = inet6_lookup_listener(dev_net(skb->dev), &tcp_hashinfo,
1816 &ipv6_hdr(skb)->daddr,
1817 ntohs(th->dest), inet6_iif(skb));
1818 if (sk2 != NULL) {
1819 struct inet_timewait_sock *tw = inet_twsk(sk);
1820 inet_twsk_deschedule(tw, &tcp_death_row);
1821 inet_twsk_put(tw);
1822 sk = sk2;
1823 goto process;
1824 }
1825 /* Fall through to ACK */
1826 }
1827 case TCP_TW_ACK:
1828 tcp_v6_timewait_ack(sk, skb);
1829 break;
1830 case TCP_TW_RST:
1831 goto no_tcp_socket;
1832 case TCP_TW_SUCCESS:;
1833 }
1834 goto discard_it;
1835}
1836
1837static struct inet_peer *tcp_v6_get_peer(struct sock *sk, bool *release_it)
1838{
1839 struct rt6_info *rt = (struct rt6_info *) __sk_dst_get(sk);
1840 struct ipv6_pinfo *np = inet6_sk(sk);
1841 struct inet_peer *peer;
1842
1843 if (!rt ||
1844 !ipv6_addr_equal(&np->daddr, &rt->rt6i_dst.addr)) {
1845 peer = inet_getpeer_v6(&np->daddr, 1);
1846 *release_it = true;
1847 } else {
1848 if (!rt->rt6i_peer)
1849 rt6_bind_peer(rt, 1);
1850 peer = rt->rt6i_peer;
1851 *release_it = false;
1852 }
1853
1854 return peer;
1855}
1856
1857static void *tcp_v6_tw_get_peer(struct sock *sk)
1858{
1859 struct inet6_timewait_sock *tw6 = inet6_twsk(sk);
1860 struct inet_timewait_sock *tw = inet_twsk(sk);
1861
1862 if (tw->tw_family == AF_INET)
1863 return tcp_v4_tw_get_peer(sk);
1864
1865 return inet_getpeer_v6(&tw6->tw_v6_daddr, 1);
1866}
1867
1868static struct timewait_sock_ops tcp6_timewait_sock_ops = {
1869 .twsk_obj_size = sizeof(struct tcp6_timewait_sock),
1870 .twsk_unique = tcp_twsk_unique,
1871 .twsk_destructor= tcp_twsk_destructor,
1872 .twsk_getpeer = tcp_v6_tw_get_peer,
1873};
1874
1875static const struct inet_connection_sock_af_ops ipv6_specific = {
1876 .queue_xmit = inet6_csk_xmit,
1877 .send_check = tcp_v6_send_check,
1878 .rebuild_header = inet6_sk_rebuild_header,
1879 .conn_request = tcp_v6_conn_request,
1880 .syn_recv_sock = tcp_v6_syn_recv_sock,
1881 .get_peer = tcp_v6_get_peer,
1882 .net_header_len = sizeof(struct ipv6hdr),
1883 .setsockopt = ipv6_setsockopt,
1884 .getsockopt = ipv6_getsockopt,
1885 .addr2sockaddr = inet6_csk_addr2sockaddr,
1886 .sockaddr_len = sizeof(struct sockaddr_in6),
1887 .bind_conflict = inet6_csk_bind_conflict,
1888#ifdef CONFIG_COMPAT
1889 .compat_setsockopt = compat_ipv6_setsockopt,
1890 .compat_getsockopt = compat_ipv6_getsockopt,
1891#endif
1892};
1893
1894#ifdef CONFIG_TCP_MD5SIG
1895static const struct tcp_sock_af_ops tcp_sock_ipv6_specific = {
1896 .md5_lookup = tcp_v6_md5_lookup,
1897 .calc_md5_hash = tcp_v6_md5_hash_skb,
1898 .md5_add = tcp_v6_md5_add_func,
1899 .md5_parse = tcp_v6_parse_md5_keys,
1900};
1901#endif
1902
1903/*
1904 * TCP over IPv4 via INET6 API
1905 */
1906
1907static const struct inet_connection_sock_af_ops ipv6_mapped = {
1908 .queue_xmit = ip_queue_xmit,
1909 .send_check = tcp_v4_send_check,
1910 .rebuild_header = inet_sk_rebuild_header,
1911 .conn_request = tcp_v6_conn_request,
1912 .syn_recv_sock = tcp_v6_syn_recv_sock,
1913 .get_peer = tcp_v4_get_peer,
1914 .net_header_len = sizeof(struct iphdr),
1915 .setsockopt = ipv6_setsockopt,
1916 .getsockopt = ipv6_getsockopt,
1917 .addr2sockaddr = inet6_csk_addr2sockaddr,
1918 .sockaddr_len = sizeof(struct sockaddr_in6),
1919 .bind_conflict = inet6_csk_bind_conflict,
1920#ifdef CONFIG_COMPAT
1921 .compat_setsockopt = compat_ipv6_setsockopt,
1922 .compat_getsockopt = compat_ipv6_getsockopt,
1923#endif
1924};
1925
1926#ifdef CONFIG_TCP_MD5SIG
1927static const struct tcp_sock_af_ops tcp_sock_ipv6_mapped_specific = {
1928 .md5_lookup = tcp_v4_md5_lookup,
1929 .calc_md5_hash = tcp_v4_md5_hash_skb,
1930 .md5_add = tcp_v6_md5_add_func,
1931 .md5_parse = tcp_v6_parse_md5_keys,
1932};
1933#endif
1934
1935/* NOTE: A lot of things set to zero explicitly by call to
1936 * sk_alloc() so need not be done here.
1937 */
1938static int tcp_v6_init_sock(struct sock *sk)
1939{
1940 struct inet_connection_sock *icsk = inet_csk(sk);
1941 struct tcp_sock *tp = tcp_sk(sk);
1942
1943 skb_queue_head_init(&tp->out_of_order_queue);
1944 tcp_init_xmit_timers(sk);
1945 tcp_prequeue_init(tp);
1946
1947 icsk->icsk_rto = TCP_TIMEOUT_INIT;
1948 tp->mdev = TCP_TIMEOUT_INIT;
1949
1950 /* So many TCP implementations out there (incorrectly) count the
1951 * initial SYN frame in their delayed-ACK and congestion control
1952 * algorithms that we must have the following bandaid to talk
1953 * efficiently to them. -DaveM
1954 */
1955 tp->snd_cwnd = 2;
1956
1957 /* See draft-stevens-tcpca-spec-01 for discussion of the
1958 * initialization of these values.
1959 */
1960 tp->snd_ssthresh = TCP_INFINITE_SSTHRESH;
1961 tp->snd_cwnd_clamp = ~0;
1962 tp->mss_cache = TCP_MSS_DEFAULT;
1963
1964 tp->reordering = sysctl_tcp_reordering;
1965
1966 sk->sk_state = TCP_CLOSE;
1967
1968 icsk->icsk_af_ops = &ipv6_specific;
1969 icsk->icsk_ca_ops = &tcp_init_congestion_ops;
1970 icsk->icsk_sync_mss = tcp_sync_mss;
1971 sk->sk_write_space = sk_stream_write_space;
1972 sock_set_flag(sk, SOCK_USE_WRITE_QUEUE);
1973
1974#ifdef CONFIG_TCP_MD5SIG
1975 tp->af_specific = &tcp_sock_ipv6_specific;
1976#endif
1977
1978 /* TCP Cookie Transactions */
1979 if (sysctl_tcp_cookie_size > 0) {
1980 /* Default, cookies without s_data_payload. */
1981 tp->cookie_values =
1982 kzalloc(sizeof(*tp->cookie_values),
1983 sk->sk_allocation);
1984 if (tp->cookie_values != NULL)
1985 kref_init(&tp->cookie_values->kref);
1986 }
1987 /* Presumed zeroed, in order of appearance:
1988 * cookie_in_always, cookie_out_never,
1989 * s_data_constant, s_data_in, s_data_out
1990 */
1991 sk->sk_sndbuf = sysctl_tcp_wmem[1];
1992 sk->sk_rcvbuf = sysctl_tcp_rmem[1];
1993
1994 local_bh_disable();
1995 percpu_counter_inc(&tcp_sockets_allocated);
1996 local_bh_enable();
1997
1998 return 0;
1999}
2000
2001static void tcp_v6_destroy_sock(struct sock *sk)
2002{
2003#ifdef CONFIG_TCP_MD5SIG
2004 /* Clean up the MD5 key list */
2005 if (tcp_sk(sk)->md5sig_info)
2006 tcp_v6_clear_md5_list(sk);
2007#endif
2008 tcp_v4_destroy_sock(sk);
2009 inet6_destroy_sock(sk);
2010}
2011
2012#ifdef CONFIG_PROC_FS
2013/* Proc filesystem TCPv6 sock list dumping. */
2014static void get_openreq6(struct seq_file *seq,
2015 struct sock *sk, struct request_sock *req, int i, int uid)
2016{
2017 int ttd = req->expires - jiffies;
2018 const struct in6_addr *src = &inet6_rsk(req)->loc_addr;
2019 const struct in6_addr *dest = &inet6_rsk(req)->rmt_addr;
2020
2021 if (ttd < 0)
2022 ttd = 0;
2023
2024 seq_printf(seq,
2025 "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
2026 "%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %pK\n",
2027 i,
2028 src->s6_addr32[0], src->s6_addr32[1],
2029 src->s6_addr32[2], src->s6_addr32[3],
2030 ntohs(inet_rsk(req)->loc_port),
2031 dest->s6_addr32[0], dest->s6_addr32[1],
2032 dest->s6_addr32[2], dest->s6_addr32[3],
2033 ntohs(inet_rsk(req)->rmt_port),
2034 TCP_SYN_RECV,
2035 0,0, /* could print option size, but that is af dependent. */
2036 1, /* timers active (only the expire timer) */
2037 jiffies_to_clock_t(ttd),
2038 req->retrans,
2039 uid,
2040 0, /* non standard timer */
2041 0, /* open_requests have no inode */
2042 0, req);
2043}
2044
2045static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i)
2046{
2047 const struct in6_addr *dest, *src;
2048 __u16 destp, srcp;
2049 int timer_active;
2050 unsigned long timer_expires;
2051 struct inet_sock *inet = inet_sk(sp);
2052 struct tcp_sock *tp = tcp_sk(sp);
2053 const struct inet_connection_sock *icsk = inet_csk(sp);
2054 struct ipv6_pinfo *np = inet6_sk(sp);
2055
2056 dest = &np->daddr;
2057 src = &np->rcv_saddr;
2058 destp = ntohs(inet->inet_dport);
2059 srcp = ntohs(inet->inet_sport);
2060
2061 if (icsk->icsk_pending == ICSK_TIME_RETRANS) {
2062 timer_active = 1;
2063 timer_expires = icsk->icsk_timeout;
2064 } else if (icsk->icsk_pending == ICSK_TIME_PROBE0) {
2065 timer_active = 4;
2066 timer_expires = icsk->icsk_timeout;
2067 } else if (timer_pending(&sp->sk_timer)) {
2068 timer_active = 2;
2069 timer_expires = sp->sk_timer.expires;
2070 } else {
2071 timer_active = 0;
2072 timer_expires = jiffies;
2073 }
2074
2075 seq_printf(seq,
2076 "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
2077 "%02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %pK %lu %lu %u %u %d\n",
2078 i,
2079 src->s6_addr32[0], src->s6_addr32[1],
2080 src->s6_addr32[2], src->s6_addr32[3], srcp,
2081 dest->s6_addr32[0], dest->s6_addr32[1],
2082 dest->s6_addr32[2], dest->s6_addr32[3], destp,
2083 sp->sk_state,
2084 tp->write_seq-tp->snd_una,
2085 (sp->sk_state == TCP_LISTEN) ? sp->sk_ack_backlog : (tp->rcv_nxt - tp->copied_seq),
2086 timer_active,
2087 jiffies_to_clock_t(timer_expires - jiffies),
2088 icsk->icsk_retransmits,
2089 sock_i_uid(sp),
2090 icsk->icsk_probes_out,
2091 sock_i_ino(sp),
2092 atomic_read(&sp->sk_refcnt), sp,
2093 jiffies_to_clock_t(icsk->icsk_rto),
2094 jiffies_to_clock_t(icsk->icsk_ack.ato),
2095 (icsk->icsk_ack.quick << 1 ) | icsk->icsk_ack.pingpong,
2096 tp->snd_cwnd,
2097 tcp_in_initial_slowstart(tp) ? -1 : tp->snd_ssthresh
2098 );
2099}
2100
2101static void get_timewait6_sock(struct seq_file *seq,
2102 struct inet_timewait_sock *tw, int i)
2103{
2104 const struct in6_addr *dest, *src;
2105 __u16 destp, srcp;
2106 struct inet6_timewait_sock *tw6 = inet6_twsk((struct sock *)tw);
2107 int ttd = tw->tw_ttd - jiffies;
2108
2109 if (ttd < 0)
2110 ttd = 0;
2111
2112 dest = &tw6->tw_v6_daddr;
2113 src = &tw6->tw_v6_rcv_saddr;
2114 destp = ntohs(tw->tw_dport);
2115 srcp = ntohs(tw->tw_sport);
2116
2117 seq_printf(seq,
2118 "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
2119 "%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %pK\n",
2120 i,
2121 src->s6_addr32[0], src->s6_addr32[1],
2122 src->s6_addr32[2], src->s6_addr32[3], srcp,
2123 dest->s6_addr32[0], dest->s6_addr32[1],
2124 dest->s6_addr32[2], dest->s6_addr32[3], destp,
2125 tw->tw_substate, 0, 0,
2126 3, jiffies_to_clock_t(ttd), 0, 0, 0, 0,
2127 atomic_read(&tw->tw_refcnt), tw);
2128}
2129
2130static int tcp6_seq_show(struct seq_file *seq, void *v)
2131{
2132 struct tcp_iter_state *st;
2133
2134 if (v == SEQ_START_TOKEN) {
2135 seq_puts(seq,
2136 " sl "
2137 "local_address "
2138 "remote_address "
2139 "st tx_queue rx_queue tr tm->when retrnsmt"
2140 " uid timeout inode\n");
2141 goto out;
2142 }
2143 st = seq->private;
2144
2145 switch (st->state) {
2146 case TCP_SEQ_STATE_LISTENING:
2147 case TCP_SEQ_STATE_ESTABLISHED:
2148 get_tcp6_sock(seq, v, st->num);
2149 break;
2150 case TCP_SEQ_STATE_OPENREQ:
2151 get_openreq6(seq, st->syn_wait_sk, v, st->num, st->uid);
2152 break;
2153 case TCP_SEQ_STATE_TIME_WAIT:
2154 get_timewait6_sock(seq, v, st->num);
2155 break;
2156 }
2157out:
2158 return 0;
2159}
2160
2161static struct tcp_seq_afinfo tcp6_seq_afinfo = {
2162 .name = "tcp6",
2163 .family = AF_INET6,
2164 .seq_fops = {
2165 .owner = THIS_MODULE,
2166 },
2167 .seq_ops = {
2168 .show = tcp6_seq_show,
2169 },
2170};
2171
2172int __net_init tcp6_proc_init(struct net *net)
2173{
2174 return tcp_proc_register(net, &tcp6_seq_afinfo);
2175}
2176
2177void tcp6_proc_exit(struct net *net)
2178{
2179 tcp_proc_unregister(net, &tcp6_seq_afinfo);
2180}
2181#endif
2182
2183struct proto tcpv6_prot = {
2184 .name = "TCPv6",
2185 .owner = THIS_MODULE,
2186 .close = tcp_close,
2187 .connect = tcp_v6_connect,
2188 .disconnect = tcp_disconnect,
2189 .accept = inet_csk_accept,
2190 .ioctl = tcp_ioctl,
2191 .init = tcp_v6_init_sock,
2192 .destroy = tcp_v6_destroy_sock,
2193 .shutdown = tcp_shutdown,
2194 .setsockopt = tcp_setsockopt,
2195 .getsockopt = tcp_getsockopt,
2196 .recvmsg = tcp_recvmsg,
2197 .sendmsg = tcp_sendmsg,
2198 .sendpage = tcp_sendpage,
2199 .backlog_rcv = tcp_v6_do_rcv,
2200 .hash = tcp_v6_hash,
2201 .unhash = inet_unhash,
2202 .get_port = inet_csk_get_port,
2203 .enter_memory_pressure = tcp_enter_memory_pressure,
2204 .sockets_allocated = &tcp_sockets_allocated,
2205 .memory_allocated = &tcp_memory_allocated,
2206 .memory_pressure = &tcp_memory_pressure,
2207 .orphan_count = &tcp_orphan_count,
2208 .sysctl_mem = sysctl_tcp_mem,
2209 .sysctl_wmem = sysctl_tcp_wmem,
2210 .sysctl_rmem = sysctl_tcp_rmem,
2211 .max_header = MAX_TCP_HEADER,
2212 .obj_size = sizeof(struct tcp6_sock),
2213 .slab_flags = SLAB_DESTROY_BY_RCU,
2214 .twsk_prot = &tcp6_timewait_sock_ops,
2215 .rsk_prot = &tcp6_request_sock_ops,
2216 .h.hashinfo = &tcp_hashinfo,
2217 .no_autobind = true,
2218#ifdef CONFIG_COMPAT
2219 .compat_setsockopt = compat_tcp_setsockopt,
2220 .compat_getsockopt = compat_tcp_getsockopt,
2221#endif
2222};
2223
2224static const struct inet6_protocol tcpv6_protocol = {
2225 .handler = tcp_v6_rcv,
2226 .err_handler = tcp_v6_err,
2227 .gso_send_check = tcp_v6_gso_send_check,
2228 .gso_segment = tcp_tso_segment,
2229 .gro_receive = tcp6_gro_receive,
2230 .gro_complete = tcp6_gro_complete,
2231 .flags = INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
2232};
2233
2234static struct inet_protosw tcpv6_protosw = {
2235 .type = SOCK_STREAM,
2236 .protocol = IPPROTO_TCP,
2237 .prot = &tcpv6_prot,
2238 .ops = &inet6_stream_ops,
2239 .no_check = 0,
2240 .flags = INET_PROTOSW_PERMANENT |
2241 INET_PROTOSW_ICSK,
2242};
2243
2244static int __net_init tcpv6_net_init(struct net *net)
2245{
2246 return inet_ctl_sock_create(&net->ipv6.tcp_sk, PF_INET6,
2247 SOCK_RAW, IPPROTO_TCP, net);
2248}
2249
2250static void __net_exit tcpv6_net_exit(struct net *net)
2251{
2252 inet_ctl_sock_destroy(net->ipv6.tcp_sk);
2253}
2254
2255static void __net_exit tcpv6_net_exit_batch(struct list_head *net_exit_list)
2256{
2257 inet_twsk_purge(&tcp_hashinfo, &tcp_death_row, AF_INET6);
2258}
2259
2260static struct pernet_operations tcpv6_net_ops = {
2261 .init = tcpv6_net_init,
2262 .exit = tcpv6_net_exit,
2263 .exit_batch = tcpv6_net_exit_batch,
2264};
2265
2266int __init tcpv6_init(void)
2267{
2268 int ret;
2269
2270 ret = inet6_add_protocol(&tcpv6_protocol, IPPROTO_TCP);
2271 if (ret)
2272 goto out;
2273
2274 /* register inet6 protocol */
2275 ret = inet6_register_protosw(&tcpv6_protosw);
2276 if (ret)
2277 goto out_tcpv6_protocol;
2278
2279 ret = register_pernet_subsys(&tcpv6_net_ops);
2280 if (ret)
2281 goto out_tcpv6_protosw;
2282out:
2283 return ret;
2284
2285out_tcpv6_protocol:
2286 inet6_del_protocol(&tcpv6_protocol, IPPROTO_TCP);
2287out_tcpv6_protosw:
2288 inet6_unregister_protosw(&tcpv6_protosw);
2289 goto out;
2290}
2291
2292void tcpv6_exit(void)
2293{
2294 unregister_pernet_subsys(&tcpv6_net_ops);
2295 inet6_unregister_protosw(&tcpv6_protosw);
2296 inet6_del_protocol(&tcpv6_protocol, IPPROTO_TCP);
2297}
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * TCP over IPv6
4 * Linux INET6 implementation
5 *
6 * Authors:
7 * Pedro Roque <roque@di.fc.ul.pt>
8 *
9 * Based on:
10 * linux/net/ipv4/tcp.c
11 * linux/net/ipv4/tcp_input.c
12 * linux/net/ipv4/tcp_output.c
13 *
14 * Fixes:
15 * Hideaki YOSHIFUJI : sin6_scope_id support
16 * YOSHIFUJI Hideaki @USAGI and: Support IPV6_V6ONLY socket option, which
17 * Alexey Kuznetsov allow both IPv4 and IPv6 sockets to bind
18 * a single port at the same time.
19 * YOSHIFUJI Hideaki @USAGI: convert /proc/net/tcp6 to seq_file.
20 */
21
22#include <linux/bottom_half.h>
23#include <linux/module.h>
24#include <linux/errno.h>
25#include <linux/types.h>
26#include <linux/socket.h>
27#include <linux/sockios.h>
28#include <linux/net.h>
29#include <linux/jiffies.h>
30#include <linux/in.h>
31#include <linux/in6.h>
32#include <linux/netdevice.h>
33#include <linux/init.h>
34#include <linux/jhash.h>
35#include <linux/ipsec.h>
36#include <linux/times.h>
37#include <linux/slab.h>
38#include <linux/uaccess.h>
39#include <linux/ipv6.h>
40#include <linux/icmpv6.h>
41#include <linux/random.h>
42#include <linux/indirect_call_wrapper.h>
43
44#include <net/tcp.h>
45#include <net/ndisc.h>
46#include <net/inet6_hashtables.h>
47#include <net/inet6_connection_sock.h>
48#include <net/ipv6.h>
49#include <net/transp_v6.h>
50#include <net/addrconf.h>
51#include <net/ip6_route.h>
52#include <net/ip6_checksum.h>
53#include <net/inet_ecn.h>
54#include <net/protocol.h>
55#include <net/xfrm.h>
56#include <net/snmp.h>
57#include <net/dsfield.h>
58#include <net/timewait_sock.h>
59#include <net/inet_common.h>
60#include <net/secure_seq.h>
61#include <net/hotdata.h>
62#include <net/busy_poll.h>
63#include <net/rstreason.h>
64
65#include <linux/proc_fs.h>
66#include <linux/seq_file.h>
67
68#include <crypto/hash.h>
69#include <linux/scatterlist.h>
70
71#include <trace/events/tcp.h>
72
73static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb,
74 enum sk_rst_reason reason);
75static void tcp_v6_reqsk_send_ack(const struct sock *sk, struct sk_buff *skb,
76 struct request_sock *req);
77
78INDIRECT_CALLABLE_SCOPE int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb);
79
80static const struct inet_connection_sock_af_ops ipv6_mapped;
81const struct inet_connection_sock_af_ops ipv6_specific;
82#if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO)
83static const struct tcp_sock_af_ops tcp_sock_ipv6_specific;
84static const struct tcp_sock_af_ops tcp_sock_ipv6_mapped_specific;
85#endif
86
87/* Helper returning the inet6 address from a given tcp socket.
88 * It can be used in TCP stack instead of inet6_sk(sk).
89 * This avoids a dereference and allow compiler optimizations.
90 * It is a specialized version of inet6_sk_generic().
91 */
92#define tcp_inet6_sk(sk) (&container_of_const(tcp_sk(sk), \
93 struct tcp6_sock, tcp)->inet6)
94
95static void inet6_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb)
96{
97 struct dst_entry *dst = skb_dst(skb);
98
99 if (dst && dst_hold_safe(dst)) {
100 rcu_assign_pointer(sk->sk_rx_dst, dst);
101 sk->sk_rx_dst_ifindex = skb->skb_iif;
102 sk->sk_rx_dst_cookie = rt6_get_cookie(dst_rt6_info(dst));
103 }
104}
105
106static u32 tcp_v6_init_seq(const struct sk_buff *skb)
107{
108 return secure_tcpv6_seq(ipv6_hdr(skb)->daddr.s6_addr32,
109 ipv6_hdr(skb)->saddr.s6_addr32,
110 tcp_hdr(skb)->dest,
111 tcp_hdr(skb)->source);
112}
113
114static u32 tcp_v6_init_ts_off(const struct net *net, const struct sk_buff *skb)
115{
116 return secure_tcpv6_ts_off(net, ipv6_hdr(skb)->daddr.s6_addr32,
117 ipv6_hdr(skb)->saddr.s6_addr32);
118}
119
120static int tcp_v6_pre_connect(struct sock *sk, struct sockaddr *uaddr,
121 int addr_len)
122{
123 /* This check is replicated from tcp_v6_connect() and intended to
124 * prevent BPF program called below from accessing bytes that are out
125 * of the bound specified by user in addr_len.
126 */
127 if (addr_len < SIN6_LEN_RFC2133)
128 return -EINVAL;
129
130 sock_owned_by_me(sk);
131
132 return BPF_CGROUP_RUN_PROG_INET6_CONNECT(sk, uaddr, &addr_len);
133}
134
135static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
136 int addr_len)
137{
138 struct sockaddr_in6 *usin = (struct sockaddr_in6 *) uaddr;
139 struct inet_connection_sock *icsk = inet_csk(sk);
140 struct in6_addr *saddr = NULL, *final_p, final;
141 struct inet_timewait_death_row *tcp_death_row;
142 struct ipv6_pinfo *np = tcp_inet6_sk(sk);
143 struct inet_sock *inet = inet_sk(sk);
144 struct tcp_sock *tp = tcp_sk(sk);
145 struct net *net = sock_net(sk);
146 struct ipv6_txoptions *opt;
147 struct dst_entry *dst;
148 struct flowi6 fl6;
149 int addr_type;
150 int err;
151
152 if (addr_len < SIN6_LEN_RFC2133)
153 return -EINVAL;
154
155 if (usin->sin6_family != AF_INET6)
156 return -EAFNOSUPPORT;
157
158 memset(&fl6, 0, sizeof(fl6));
159
160 if (inet6_test_bit(SNDFLOW, sk)) {
161 fl6.flowlabel = usin->sin6_flowinfo&IPV6_FLOWINFO_MASK;
162 IP6_ECN_flow_init(fl6.flowlabel);
163 if (fl6.flowlabel&IPV6_FLOWLABEL_MASK) {
164 struct ip6_flowlabel *flowlabel;
165 flowlabel = fl6_sock_lookup(sk, fl6.flowlabel);
166 if (IS_ERR(flowlabel))
167 return -EINVAL;
168 fl6_sock_release(flowlabel);
169 }
170 }
171
172 /*
173 * connect() to INADDR_ANY means loopback (BSD'ism).
174 */
175
176 if (ipv6_addr_any(&usin->sin6_addr)) {
177 if (ipv6_addr_v4mapped(&sk->sk_v6_rcv_saddr))
178 ipv6_addr_set_v4mapped(htonl(INADDR_LOOPBACK),
179 &usin->sin6_addr);
180 else
181 usin->sin6_addr = in6addr_loopback;
182 }
183
184 addr_type = ipv6_addr_type(&usin->sin6_addr);
185
186 if (addr_type & IPV6_ADDR_MULTICAST)
187 return -ENETUNREACH;
188
189 if (addr_type&IPV6_ADDR_LINKLOCAL) {
190 if (addr_len >= sizeof(struct sockaddr_in6) &&
191 usin->sin6_scope_id) {
192 /* If interface is set while binding, indices
193 * must coincide.
194 */
195 if (!sk_dev_equal_l3scope(sk, usin->sin6_scope_id))
196 return -EINVAL;
197
198 sk->sk_bound_dev_if = usin->sin6_scope_id;
199 }
200
201 /* Connect to link-local address requires an interface */
202 if (!sk->sk_bound_dev_if)
203 return -EINVAL;
204 }
205
206 if (tp->rx_opt.ts_recent_stamp &&
207 !ipv6_addr_equal(&sk->sk_v6_daddr, &usin->sin6_addr)) {
208 tp->rx_opt.ts_recent = 0;
209 tp->rx_opt.ts_recent_stamp = 0;
210 WRITE_ONCE(tp->write_seq, 0);
211 }
212
213 sk->sk_v6_daddr = usin->sin6_addr;
214 np->flow_label = fl6.flowlabel;
215
216 /*
217 * TCP over IPv4
218 */
219
220 if (addr_type & IPV6_ADDR_MAPPED) {
221 u32 exthdrlen = icsk->icsk_ext_hdr_len;
222 struct sockaddr_in sin;
223
224 if (ipv6_only_sock(sk))
225 return -ENETUNREACH;
226
227 sin.sin_family = AF_INET;
228 sin.sin_port = usin->sin6_port;
229 sin.sin_addr.s_addr = usin->sin6_addr.s6_addr32[3];
230
231 /* Paired with READ_ONCE() in tcp_(get|set)sockopt() */
232 WRITE_ONCE(icsk->icsk_af_ops, &ipv6_mapped);
233 if (sk_is_mptcp(sk))
234 mptcpv6_handle_mapped(sk, true);
235 sk->sk_backlog_rcv = tcp_v4_do_rcv;
236#if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO)
237 tp->af_specific = &tcp_sock_ipv6_mapped_specific;
238#endif
239
240 err = tcp_v4_connect(sk, (struct sockaddr *)&sin, sizeof(sin));
241
242 if (err) {
243 icsk->icsk_ext_hdr_len = exthdrlen;
244 /* Paired with READ_ONCE() in tcp_(get|set)sockopt() */
245 WRITE_ONCE(icsk->icsk_af_ops, &ipv6_specific);
246 if (sk_is_mptcp(sk))
247 mptcpv6_handle_mapped(sk, false);
248 sk->sk_backlog_rcv = tcp_v6_do_rcv;
249#if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO)
250 tp->af_specific = &tcp_sock_ipv6_specific;
251#endif
252 goto failure;
253 }
254 np->saddr = sk->sk_v6_rcv_saddr;
255
256 return err;
257 }
258
259 if (!ipv6_addr_any(&sk->sk_v6_rcv_saddr))
260 saddr = &sk->sk_v6_rcv_saddr;
261
262 fl6.flowi6_proto = IPPROTO_TCP;
263 fl6.daddr = sk->sk_v6_daddr;
264 fl6.saddr = saddr ? *saddr : np->saddr;
265 fl6.flowlabel = ip6_make_flowinfo(np->tclass, np->flow_label);
266 fl6.flowi6_oif = sk->sk_bound_dev_if;
267 fl6.flowi6_mark = sk->sk_mark;
268 fl6.fl6_dport = usin->sin6_port;
269 fl6.fl6_sport = inet->inet_sport;
270 fl6.flowi6_uid = sk->sk_uid;
271
272 opt = rcu_dereference_protected(np->opt, lockdep_sock_is_held(sk));
273 final_p = fl6_update_dst(&fl6, opt, &final);
274
275 security_sk_classify_flow(sk, flowi6_to_flowi_common(&fl6));
276
277 dst = ip6_dst_lookup_flow(net, sk, &fl6, final_p);
278 if (IS_ERR(dst)) {
279 err = PTR_ERR(dst);
280 goto failure;
281 }
282
283 tp->tcp_usec_ts = dst_tcp_usec_ts(dst);
284 tcp_death_row = &sock_net(sk)->ipv4.tcp_death_row;
285
286 if (!saddr) {
287 saddr = &fl6.saddr;
288
289 err = inet_bhash2_update_saddr(sk, saddr, AF_INET6);
290 if (err)
291 goto failure;
292 }
293
294 /* set the source address */
295 np->saddr = *saddr;
296 inet->inet_rcv_saddr = LOOPBACK4_IPV6;
297
298 sk->sk_gso_type = SKB_GSO_TCPV6;
299 ip6_dst_store(sk, dst, NULL, NULL);
300
301 icsk->icsk_ext_hdr_len = 0;
302 if (opt)
303 icsk->icsk_ext_hdr_len = opt->opt_flen +
304 opt->opt_nflen;
305
306 tp->rx_opt.mss_clamp = IPV6_MIN_MTU - sizeof(struct tcphdr) - sizeof(struct ipv6hdr);
307
308 inet->inet_dport = usin->sin6_port;
309
310 tcp_set_state(sk, TCP_SYN_SENT);
311 err = inet6_hash_connect(tcp_death_row, sk);
312 if (err)
313 goto late_failure;
314
315 sk_set_txhash(sk);
316
317 if (likely(!tp->repair)) {
318 if (!tp->write_seq)
319 WRITE_ONCE(tp->write_seq,
320 secure_tcpv6_seq(np->saddr.s6_addr32,
321 sk->sk_v6_daddr.s6_addr32,
322 inet->inet_sport,
323 inet->inet_dport));
324 tp->tsoffset = secure_tcpv6_ts_off(net, np->saddr.s6_addr32,
325 sk->sk_v6_daddr.s6_addr32);
326 }
327
328 if (tcp_fastopen_defer_connect(sk, &err))
329 return err;
330 if (err)
331 goto late_failure;
332
333 err = tcp_connect(sk);
334 if (err)
335 goto late_failure;
336
337 return 0;
338
339late_failure:
340 tcp_set_state(sk, TCP_CLOSE);
341 inet_bhash2_reset_saddr(sk);
342failure:
343 inet->inet_dport = 0;
344 sk->sk_route_caps = 0;
345 return err;
346}
347
348static void tcp_v6_mtu_reduced(struct sock *sk)
349{
350 struct dst_entry *dst;
351 u32 mtu;
352
353 if ((1 << sk->sk_state) & (TCPF_LISTEN | TCPF_CLOSE))
354 return;
355
356 mtu = READ_ONCE(tcp_sk(sk)->mtu_info);
357
358 /* Drop requests trying to increase our current mss.
359 * Check done in __ip6_rt_update_pmtu() is too late.
360 */
361 if (tcp_mtu_to_mss(sk, mtu) >= tcp_sk(sk)->mss_cache)
362 return;
363
364 dst = inet6_csk_update_pmtu(sk, mtu);
365 if (!dst)
366 return;
367
368 if (inet_csk(sk)->icsk_pmtu_cookie > dst_mtu(dst)) {
369 tcp_sync_mss(sk, dst_mtu(dst));
370 tcp_simple_retransmit(sk);
371 }
372}
373
374static int tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
375 u8 type, u8 code, int offset, __be32 info)
376{
377 const struct ipv6hdr *hdr = (const struct ipv6hdr *)skb->data;
378 const struct tcphdr *th = (struct tcphdr *)(skb->data+offset);
379 struct net *net = dev_net(skb->dev);
380 struct request_sock *fastopen;
381 struct ipv6_pinfo *np;
382 struct tcp_sock *tp;
383 __u32 seq, snd_una;
384 struct sock *sk;
385 bool fatal;
386 int err;
387
388 sk = __inet6_lookup_established(net, net->ipv4.tcp_death_row.hashinfo,
389 &hdr->daddr, th->dest,
390 &hdr->saddr, ntohs(th->source),
391 skb->dev->ifindex, inet6_sdif(skb));
392
393 if (!sk) {
394 __ICMP6_INC_STATS(net, __in6_dev_get(skb->dev),
395 ICMP6_MIB_INERRORS);
396 return -ENOENT;
397 }
398
399 if (sk->sk_state == TCP_TIME_WAIT) {
400 /* To increase the counter of ignored icmps for TCP-AO */
401 tcp_ao_ignore_icmp(sk, AF_INET6, type, code);
402 inet_twsk_put(inet_twsk(sk));
403 return 0;
404 }
405 seq = ntohl(th->seq);
406 fatal = icmpv6_err_convert(type, code, &err);
407 if (sk->sk_state == TCP_NEW_SYN_RECV) {
408 tcp_req_err(sk, seq, fatal);
409 return 0;
410 }
411
412 if (tcp_ao_ignore_icmp(sk, AF_INET6, type, code)) {
413 sock_put(sk);
414 return 0;
415 }
416
417 bh_lock_sock(sk);
418 if (sock_owned_by_user(sk) && type != ICMPV6_PKT_TOOBIG)
419 __NET_INC_STATS(net, LINUX_MIB_LOCKDROPPEDICMPS);
420
421 if (sk->sk_state == TCP_CLOSE)
422 goto out;
423
424 if (static_branch_unlikely(&ip6_min_hopcount)) {
425 /* min_hopcount can be changed concurrently from do_ipv6_setsockopt() */
426 if (ipv6_hdr(skb)->hop_limit < READ_ONCE(tcp_inet6_sk(sk)->min_hopcount)) {
427 __NET_INC_STATS(net, LINUX_MIB_TCPMINTTLDROP);
428 goto out;
429 }
430 }
431
432 tp = tcp_sk(sk);
433 /* XXX (TFO) - tp->snd_una should be ISN (tcp_create_openreq_child() */
434 fastopen = rcu_dereference(tp->fastopen_rsk);
435 snd_una = fastopen ? tcp_rsk(fastopen)->snt_isn : tp->snd_una;
436 if (sk->sk_state != TCP_LISTEN &&
437 !between(seq, snd_una, tp->snd_nxt)) {
438 __NET_INC_STATS(net, LINUX_MIB_OUTOFWINDOWICMPS);
439 goto out;
440 }
441
442 np = tcp_inet6_sk(sk);
443
444 if (type == NDISC_REDIRECT) {
445 if (!sock_owned_by_user(sk)) {
446 struct dst_entry *dst = __sk_dst_check(sk, np->dst_cookie);
447
448 if (dst)
449 dst->ops->redirect(dst, sk, skb);
450 }
451 goto out;
452 }
453
454 if (type == ICMPV6_PKT_TOOBIG) {
455 u32 mtu = ntohl(info);
456
457 /* We are not interested in TCP_LISTEN and open_requests
458 * (SYN-ACKs send out by Linux are always <576bytes so
459 * they should go through unfragmented).
460 */
461 if (sk->sk_state == TCP_LISTEN)
462 goto out;
463
464 if (!ip6_sk_accept_pmtu(sk))
465 goto out;
466
467 if (mtu < IPV6_MIN_MTU)
468 goto out;
469
470 WRITE_ONCE(tp->mtu_info, mtu);
471
472 if (!sock_owned_by_user(sk))
473 tcp_v6_mtu_reduced(sk);
474 else if (!test_and_set_bit(TCP_MTU_REDUCED_DEFERRED,
475 &sk->sk_tsq_flags))
476 sock_hold(sk);
477 goto out;
478 }
479
480
481 /* Might be for an request_sock */
482 switch (sk->sk_state) {
483 case TCP_SYN_SENT:
484 case TCP_SYN_RECV:
485 /* Only in fast or simultaneous open. If a fast open socket is
486 * already accepted it is treated as a connected one below.
487 */
488 if (fastopen && !fastopen->sk)
489 break;
490
491 ipv6_icmp_error(sk, skb, err, th->dest, ntohl(info), (u8 *)th);
492
493 if (!sock_owned_by_user(sk))
494 tcp_done_with_error(sk, err);
495 else
496 WRITE_ONCE(sk->sk_err_soft, err);
497 goto out;
498 case TCP_LISTEN:
499 break;
500 default:
501 /* check if this ICMP message allows revert of backoff.
502 * (see RFC 6069)
503 */
504 if (!fastopen && type == ICMPV6_DEST_UNREACH &&
505 code == ICMPV6_NOROUTE)
506 tcp_ld_RTO_revert(sk, seq);
507 }
508
509 if (!sock_owned_by_user(sk) && inet6_test_bit(RECVERR6, sk)) {
510 WRITE_ONCE(sk->sk_err, err);
511 sk_error_report(sk);
512 } else {
513 WRITE_ONCE(sk->sk_err_soft, err);
514 }
515out:
516 bh_unlock_sock(sk);
517 sock_put(sk);
518 return 0;
519}
520
521
522static int tcp_v6_send_synack(const struct sock *sk, struct dst_entry *dst,
523 struct flowi *fl,
524 struct request_sock *req,
525 struct tcp_fastopen_cookie *foc,
526 enum tcp_synack_type synack_type,
527 struct sk_buff *syn_skb)
528{
529 struct inet_request_sock *ireq = inet_rsk(req);
530 const struct ipv6_pinfo *np = tcp_inet6_sk(sk);
531 struct ipv6_txoptions *opt;
532 struct flowi6 *fl6 = &fl->u.ip6;
533 struct sk_buff *skb;
534 int err = -ENOMEM;
535 u8 tclass;
536
537 /* First, grab a route. */
538 if (!dst && (dst = inet6_csk_route_req(sk, fl6, req,
539 IPPROTO_TCP)) == NULL)
540 goto done;
541
542 skb = tcp_make_synack(sk, dst, req, foc, synack_type, syn_skb);
543
544 if (skb) {
545 __tcp_v6_send_check(skb, &ireq->ir_v6_loc_addr,
546 &ireq->ir_v6_rmt_addr);
547
548 fl6->daddr = ireq->ir_v6_rmt_addr;
549 if (inet6_test_bit(REPFLOW, sk) && ireq->pktopts)
550 fl6->flowlabel = ip6_flowlabel(ipv6_hdr(ireq->pktopts));
551
552 tclass = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_reflect_tos) ?
553 (tcp_rsk(req)->syn_tos & ~INET_ECN_MASK) |
554 (np->tclass & INET_ECN_MASK) :
555 np->tclass;
556
557 if (!INET_ECN_is_capable(tclass) &&
558 tcp_bpf_ca_needs_ecn((struct sock *)req))
559 tclass |= INET_ECN_ECT_0;
560
561 rcu_read_lock();
562 opt = ireq->ipv6_opt;
563 if (!opt)
564 opt = rcu_dereference(np->opt);
565 err = ip6_xmit(sk, skb, fl6, skb->mark ? : READ_ONCE(sk->sk_mark),
566 opt, tclass, READ_ONCE(sk->sk_priority));
567 rcu_read_unlock();
568 err = net_xmit_eval(err);
569 }
570
571done:
572 return err;
573}
574
575
576static void tcp_v6_reqsk_destructor(struct request_sock *req)
577{
578 kfree(inet_rsk(req)->ipv6_opt);
579 consume_skb(inet_rsk(req)->pktopts);
580}
581
582#ifdef CONFIG_TCP_MD5SIG
583static struct tcp_md5sig_key *tcp_v6_md5_do_lookup(const struct sock *sk,
584 const struct in6_addr *addr,
585 int l3index)
586{
587 return tcp_md5_do_lookup(sk, l3index,
588 (union tcp_md5_addr *)addr, AF_INET6);
589}
590
591static struct tcp_md5sig_key *tcp_v6_md5_lookup(const struct sock *sk,
592 const struct sock *addr_sk)
593{
594 int l3index;
595
596 l3index = l3mdev_master_ifindex_by_index(sock_net(sk),
597 addr_sk->sk_bound_dev_if);
598 return tcp_v6_md5_do_lookup(sk, &addr_sk->sk_v6_daddr,
599 l3index);
600}
601
602static int tcp_v6_parse_md5_keys(struct sock *sk, int optname,
603 sockptr_t optval, int optlen)
604{
605 struct tcp_md5sig cmd;
606 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&cmd.tcpm_addr;
607 union tcp_ao_addr *addr;
608 int l3index = 0;
609 u8 prefixlen;
610 bool l3flag;
611 u8 flags;
612
613 if (optlen < sizeof(cmd))
614 return -EINVAL;
615
616 if (copy_from_sockptr(&cmd, optval, sizeof(cmd)))
617 return -EFAULT;
618
619 if (sin6->sin6_family != AF_INET6)
620 return -EINVAL;
621
622 flags = cmd.tcpm_flags & TCP_MD5SIG_FLAG_IFINDEX;
623 l3flag = cmd.tcpm_flags & TCP_MD5SIG_FLAG_IFINDEX;
624
625 if (optname == TCP_MD5SIG_EXT &&
626 cmd.tcpm_flags & TCP_MD5SIG_FLAG_PREFIX) {
627 prefixlen = cmd.tcpm_prefixlen;
628 if (prefixlen > 128 || (ipv6_addr_v4mapped(&sin6->sin6_addr) &&
629 prefixlen > 32))
630 return -EINVAL;
631 } else {
632 prefixlen = ipv6_addr_v4mapped(&sin6->sin6_addr) ? 32 : 128;
633 }
634
635 if (optname == TCP_MD5SIG_EXT && cmd.tcpm_ifindex &&
636 cmd.tcpm_flags & TCP_MD5SIG_FLAG_IFINDEX) {
637 struct net_device *dev;
638
639 rcu_read_lock();
640 dev = dev_get_by_index_rcu(sock_net(sk), cmd.tcpm_ifindex);
641 if (dev && netif_is_l3_master(dev))
642 l3index = dev->ifindex;
643 rcu_read_unlock();
644
645 /* ok to reference set/not set outside of rcu;
646 * right now device MUST be an L3 master
647 */
648 if (!dev || !l3index)
649 return -EINVAL;
650 }
651
652 if (!cmd.tcpm_keylen) {
653 if (ipv6_addr_v4mapped(&sin6->sin6_addr))
654 return tcp_md5_do_del(sk, (union tcp_md5_addr *)&sin6->sin6_addr.s6_addr32[3],
655 AF_INET, prefixlen,
656 l3index, flags);
657 return tcp_md5_do_del(sk, (union tcp_md5_addr *)&sin6->sin6_addr,
658 AF_INET6, prefixlen, l3index, flags);
659 }
660
661 if (cmd.tcpm_keylen > TCP_MD5SIG_MAXKEYLEN)
662 return -EINVAL;
663
664 if (ipv6_addr_v4mapped(&sin6->sin6_addr)) {
665 addr = (union tcp_md5_addr *)&sin6->sin6_addr.s6_addr32[3];
666
667 /* Don't allow keys for peers that have a matching TCP-AO key.
668 * See the comment in tcp_ao_add_cmd()
669 */
670 if (tcp_ao_required(sk, addr, AF_INET,
671 l3flag ? l3index : -1, false))
672 return -EKEYREJECTED;
673 return tcp_md5_do_add(sk, addr,
674 AF_INET, prefixlen, l3index, flags,
675 cmd.tcpm_key, cmd.tcpm_keylen);
676 }
677
678 addr = (union tcp_md5_addr *)&sin6->sin6_addr;
679
680 /* Don't allow keys for peers that have a matching TCP-AO key.
681 * See the comment in tcp_ao_add_cmd()
682 */
683 if (tcp_ao_required(sk, addr, AF_INET6, l3flag ? l3index : -1, false))
684 return -EKEYREJECTED;
685
686 return tcp_md5_do_add(sk, addr, AF_INET6, prefixlen, l3index, flags,
687 cmd.tcpm_key, cmd.tcpm_keylen);
688}
689
690static int tcp_v6_md5_hash_headers(struct tcp_sigpool *hp,
691 const struct in6_addr *daddr,
692 const struct in6_addr *saddr,
693 const struct tcphdr *th, int nbytes)
694{
695 struct tcp6_pseudohdr *bp;
696 struct scatterlist sg;
697 struct tcphdr *_th;
698
699 bp = hp->scratch;
700 /* 1. TCP pseudo-header (RFC2460) */
701 bp->saddr = *saddr;
702 bp->daddr = *daddr;
703 bp->protocol = cpu_to_be32(IPPROTO_TCP);
704 bp->len = cpu_to_be32(nbytes);
705
706 _th = (struct tcphdr *)(bp + 1);
707 memcpy(_th, th, sizeof(*th));
708 _th->check = 0;
709
710 sg_init_one(&sg, bp, sizeof(*bp) + sizeof(*th));
711 ahash_request_set_crypt(hp->req, &sg, NULL,
712 sizeof(*bp) + sizeof(*th));
713 return crypto_ahash_update(hp->req);
714}
715
716static int tcp_v6_md5_hash_hdr(char *md5_hash, const struct tcp_md5sig_key *key,
717 const struct in6_addr *daddr, struct in6_addr *saddr,
718 const struct tcphdr *th)
719{
720 struct tcp_sigpool hp;
721
722 if (tcp_sigpool_start(tcp_md5_sigpool_id, &hp))
723 goto clear_hash_nostart;
724
725 if (crypto_ahash_init(hp.req))
726 goto clear_hash;
727 if (tcp_v6_md5_hash_headers(&hp, daddr, saddr, th, th->doff << 2))
728 goto clear_hash;
729 if (tcp_md5_hash_key(&hp, key))
730 goto clear_hash;
731 ahash_request_set_crypt(hp.req, NULL, md5_hash, 0);
732 if (crypto_ahash_final(hp.req))
733 goto clear_hash;
734
735 tcp_sigpool_end(&hp);
736 return 0;
737
738clear_hash:
739 tcp_sigpool_end(&hp);
740clear_hash_nostart:
741 memset(md5_hash, 0, 16);
742 return 1;
743}
744
745static int tcp_v6_md5_hash_skb(char *md5_hash,
746 const struct tcp_md5sig_key *key,
747 const struct sock *sk,
748 const struct sk_buff *skb)
749{
750 const struct tcphdr *th = tcp_hdr(skb);
751 const struct in6_addr *saddr, *daddr;
752 struct tcp_sigpool hp;
753
754 if (sk) { /* valid for establish/request sockets */
755 saddr = &sk->sk_v6_rcv_saddr;
756 daddr = &sk->sk_v6_daddr;
757 } else {
758 const struct ipv6hdr *ip6h = ipv6_hdr(skb);
759 saddr = &ip6h->saddr;
760 daddr = &ip6h->daddr;
761 }
762
763 if (tcp_sigpool_start(tcp_md5_sigpool_id, &hp))
764 goto clear_hash_nostart;
765
766 if (crypto_ahash_init(hp.req))
767 goto clear_hash;
768
769 if (tcp_v6_md5_hash_headers(&hp, daddr, saddr, th, skb->len))
770 goto clear_hash;
771 if (tcp_sigpool_hash_skb_data(&hp, skb, th->doff << 2))
772 goto clear_hash;
773 if (tcp_md5_hash_key(&hp, key))
774 goto clear_hash;
775 ahash_request_set_crypt(hp.req, NULL, md5_hash, 0);
776 if (crypto_ahash_final(hp.req))
777 goto clear_hash;
778
779 tcp_sigpool_end(&hp);
780 return 0;
781
782clear_hash:
783 tcp_sigpool_end(&hp);
784clear_hash_nostart:
785 memset(md5_hash, 0, 16);
786 return 1;
787}
788#endif
789
790static void tcp_v6_init_req(struct request_sock *req,
791 const struct sock *sk_listener,
792 struct sk_buff *skb,
793 u32 tw_isn)
794{
795 bool l3_slave = ipv6_l3mdev_skb(TCP_SKB_CB(skb)->header.h6.flags);
796 struct inet_request_sock *ireq = inet_rsk(req);
797 const struct ipv6_pinfo *np = tcp_inet6_sk(sk_listener);
798
799 ireq->ir_v6_rmt_addr = ipv6_hdr(skb)->saddr;
800 ireq->ir_v6_loc_addr = ipv6_hdr(skb)->daddr;
801
802 /* So that link locals have meaning */
803 if ((!sk_listener->sk_bound_dev_if || l3_slave) &&
804 ipv6_addr_type(&ireq->ir_v6_rmt_addr) & IPV6_ADDR_LINKLOCAL)
805 ireq->ir_iif = tcp_v6_iif(skb);
806
807 if (!tw_isn &&
808 (ipv6_opt_accepted(sk_listener, skb, &TCP_SKB_CB(skb)->header.h6) ||
809 np->rxopt.bits.rxinfo ||
810 np->rxopt.bits.rxoinfo || np->rxopt.bits.rxhlim ||
811 np->rxopt.bits.rxohlim || inet6_test_bit(REPFLOW, sk_listener))) {
812 refcount_inc(&skb->users);
813 ireq->pktopts = skb;
814 }
815}
816
817static struct dst_entry *tcp_v6_route_req(const struct sock *sk,
818 struct sk_buff *skb,
819 struct flowi *fl,
820 struct request_sock *req,
821 u32 tw_isn)
822{
823 tcp_v6_init_req(req, sk, skb, tw_isn);
824
825 if (security_inet_conn_request(sk, skb, req))
826 return NULL;
827
828 return inet6_csk_route_req(sk, &fl->u.ip6, req, IPPROTO_TCP);
829}
830
831struct request_sock_ops tcp6_request_sock_ops __read_mostly = {
832 .family = AF_INET6,
833 .obj_size = sizeof(struct tcp6_request_sock),
834 .rtx_syn_ack = tcp_rtx_synack,
835 .send_ack = tcp_v6_reqsk_send_ack,
836 .destructor = tcp_v6_reqsk_destructor,
837 .send_reset = tcp_v6_send_reset,
838 .syn_ack_timeout = tcp_syn_ack_timeout,
839};
840
841const struct tcp_request_sock_ops tcp_request_sock_ipv6_ops = {
842 .mss_clamp = IPV6_MIN_MTU - sizeof(struct tcphdr) -
843 sizeof(struct ipv6hdr),
844#ifdef CONFIG_TCP_MD5SIG
845 .req_md5_lookup = tcp_v6_md5_lookup,
846 .calc_md5_hash = tcp_v6_md5_hash_skb,
847#endif
848#ifdef CONFIG_TCP_AO
849 .ao_lookup = tcp_v6_ao_lookup_rsk,
850 .ao_calc_key = tcp_v6_ao_calc_key_rsk,
851 .ao_synack_hash = tcp_v6_ao_synack_hash,
852#endif
853#ifdef CONFIG_SYN_COOKIES
854 .cookie_init_seq = cookie_v6_init_sequence,
855#endif
856 .route_req = tcp_v6_route_req,
857 .init_seq = tcp_v6_init_seq,
858 .init_ts_off = tcp_v6_init_ts_off,
859 .send_synack = tcp_v6_send_synack,
860};
861
862static void tcp_v6_send_response(const struct sock *sk, struct sk_buff *skb, u32 seq,
863 u32 ack, u32 win, u32 tsval, u32 tsecr,
864 int oif, int rst, u8 tclass, __be32 label,
865 u32 priority, u32 txhash, struct tcp_key *key)
866{
867 const struct tcphdr *th = tcp_hdr(skb);
868 struct tcphdr *t1;
869 struct sk_buff *buff;
870 struct flowi6 fl6;
871 struct net *net = sk ? sock_net(sk) : dev_net(skb_dst(skb)->dev);
872 struct sock *ctl_sk = net->ipv6.tcp_sk;
873 unsigned int tot_len = sizeof(struct tcphdr);
874 __be32 mrst = 0, *topt;
875 struct dst_entry *dst;
876 __u32 mark = 0;
877
878 if (tsecr)
879 tot_len += TCPOLEN_TSTAMP_ALIGNED;
880 if (tcp_key_is_md5(key))
881 tot_len += TCPOLEN_MD5SIG_ALIGNED;
882 if (tcp_key_is_ao(key))
883 tot_len += tcp_ao_len_aligned(key->ao_key);
884
885#ifdef CONFIG_MPTCP
886 if (rst && !tcp_key_is_md5(key)) {
887 mrst = mptcp_reset_option(skb);
888
889 if (mrst)
890 tot_len += sizeof(__be32);
891 }
892#endif
893
894 buff = alloc_skb(MAX_TCP_HEADER, GFP_ATOMIC);
895 if (!buff)
896 return;
897
898 skb_reserve(buff, MAX_TCP_HEADER);
899
900 t1 = skb_push(buff, tot_len);
901 skb_reset_transport_header(buff);
902
903 /* Swap the send and the receive. */
904 memset(t1, 0, sizeof(*t1));
905 t1->dest = th->source;
906 t1->source = th->dest;
907 t1->doff = tot_len / 4;
908 t1->seq = htonl(seq);
909 t1->ack_seq = htonl(ack);
910 t1->ack = !rst || !th->ack;
911 t1->rst = rst;
912 t1->window = htons(win);
913
914 topt = (__be32 *)(t1 + 1);
915
916 if (tsecr) {
917 *topt++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) |
918 (TCPOPT_TIMESTAMP << 8) | TCPOLEN_TIMESTAMP);
919 *topt++ = htonl(tsval);
920 *topt++ = htonl(tsecr);
921 }
922
923 if (mrst)
924 *topt++ = mrst;
925
926#ifdef CONFIG_TCP_MD5SIG
927 if (tcp_key_is_md5(key)) {
928 *topt++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) |
929 (TCPOPT_MD5SIG << 8) | TCPOLEN_MD5SIG);
930 tcp_v6_md5_hash_hdr((__u8 *)topt, key->md5_key,
931 &ipv6_hdr(skb)->saddr,
932 &ipv6_hdr(skb)->daddr, t1);
933 }
934#endif
935#ifdef CONFIG_TCP_AO
936 if (tcp_key_is_ao(key)) {
937 *topt++ = htonl((TCPOPT_AO << 24) |
938 (tcp_ao_len(key->ao_key) << 16) |
939 (key->ao_key->sndid << 8) |
940 (key->rcv_next));
941
942 tcp_ao_hash_hdr(AF_INET6, (char *)topt, key->ao_key,
943 key->traffic_key,
944 (union tcp_ao_addr *)&ipv6_hdr(skb)->saddr,
945 (union tcp_ao_addr *)&ipv6_hdr(skb)->daddr,
946 t1, key->sne);
947 }
948#endif
949
950 memset(&fl6, 0, sizeof(fl6));
951 fl6.daddr = ipv6_hdr(skb)->saddr;
952 fl6.saddr = ipv6_hdr(skb)->daddr;
953 fl6.flowlabel = label;
954
955 buff->ip_summed = CHECKSUM_PARTIAL;
956
957 __tcp_v6_send_check(buff, &fl6.saddr, &fl6.daddr);
958
959 fl6.flowi6_proto = IPPROTO_TCP;
960 if (rt6_need_strict(&fl6.daddr) && !oif)
961 fl6.flowi6_oif = tcp_v6_iif(skb);
962 else {
963 if (!oif && netif_index_is_l3_master(net, skb->skb_iif))
964 oif = skb->skb_iif;
965
966 fl6.flowi6_oif = oif;
967 }
968
969 if (sk) {
970 /* unconstify the socket only to attach it to buff with care. */
971 skb_set_owner_edemux(buff, (struct sock *)sk);
972
973 if (sk->sk_state == TCP_TIME_WAIT)
974 mark = inet_twsk(sk)->tw_mark;
975 else
976 mark = READ_ONCE(sk->sk_mark);
977 skb_set_delivery_time(buff, tcp_transmit_time(sk), SKB_CLOCK_MONOTONIC);
978 }
979 if (txhash) {
980 /* autoflowlabel/skb_get_hash_flowi6 rely on buff->hash */
981 skb_set_hash(buff, txhash, PKT_HASH_TYPE_L4);
982 }
983 fl6.flowi6_mark = IP6_REPLY_MARK(net, skb->mark) ?: mark;
984 fl6.fl6_dport = t1->dest;
985 fl6.fl6_sport = t1->source;
986 fl6.flowi6_uid = sock_net_uid(net, sk && sk_fullsock(sk) ? sk : NULL);
987 security_skb_classify_flow(skb, flowi6_to_flowi_common(&fl6));
988
989 /* Pass a socket to ip6_dst_lookup either it is for RST
990 * Underlying function will use this to retrieve the network
991 * namespace
992 */
993 if (sk && sk->sk_state != TCP_TIME_WAIT)
994 dst = ip6_dst_lookup_flow(net, sk, &fl6, NULL); /*sk's xfrm_policy can be referred*/
995 else
996 dst = ip6_dst_lookup_flow(net, ctl_sk, &fl6, NULL);
997 if (!IS_ERR(dst)) {
998 skb_dst_set(buff, dst);
999 ip6_xmit(ctl_sk, buff, &fl6, fl6.flowi6_mark, NULL,
1000 tclass & ~INET_ECN_MASK, priority);
1001 TCP_INC_STATS(net, TCP_MIB_OUTSEGS);
1002 if (rst)
1003 TCP_INC_STATS(net, TCP_MIB_OUTRSTS);
1004 return;
1005 }
1006
1007 kfree_skb(buff);
1008}
1009
1010static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb,
1011 enum sk_rst_reason reason)
1012{
1013 const struct tcphdr *th = tcp_hdr(skb);
1014 struct ipv6hdr *ipv6h = ipv6_hdr(skb);
1015 const __u8 *md5_hash_location = NULL;
1016#if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO)
1017 bool allocated_traffic_key = false;
1018#endif
1019 const struct tcp_ao_hdr *aoh;
1020 struct tcp_key key = {};
1021 u32 seq = 0, ack_seq = 0;
1022 __be32 label = 0;
1023 u32 priority = 0;
1024 struct net *net;
1025 u32 txhash = 0;
1026 int oif = 0;
1027#ifdef CONFIG_TCP_MD5SIG
1028 unsigned char newhash[16];
1029 int genhash;
1030 struct sock *sk1 = NULL;
1031#endif
1032
1033 if (th->rst)
1034 return;
1035
1036 /* If sk not NULL, it means we did a successful lookup and incoming
1037 * route had to be correct. prequeue might have dropped our dst.
1038 */
1039 if (!sk && !ipv6_unicast_destination(skb))
1040 return;
1041
1042 net = sk ? sock_net(sk) : dev_net(skb_dst(skb)->dev);
1043 /* Invalid TCP option size or twice included auth */
1044 if (tcp_parse_auth_options(th, &md5_hash_location, &aoh))
1045 return;
1046#if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO)
1047 rcu_read_lock();
1048#endif
1049#ifdef CONFIG_TCP_MD5SIG
1050 if (sk && sk_fullsock(sk)) {
1051 int l3index;
1052
1053 /* sdif set, means packet ingressed via a device
1054 * in an L3 domain and inet_iif is set to it.
1055 */
1056 l3index = tcp_v6_sdif(skb) ? tcp_v6_iif_l3_slave(skb) : 0;
1057 key.md5_key = tcp_v6_md5_do_lookup(sk, &ipv6h->saddr, l3index);
1058 if (key.md5_key)
1059 key.type = TCP_KEY_MD5;
1060 } else if (md5_hash_location) {
1061 int dif = tcp_v6_iif_l3_slave(skb);
1062 int sdif = tcp_v6_sdif(skb);
1063 int l3index;
1064
1065 /*
1066 * active side is lost. Try to find listening socket through
1067 * source port, and then find md5 key through listening socket.
1068 * we are not loose security here:
1069 * Incoming packet is checked with md5 hash with finding key,
1070 * no RST generated if md5 hash doesn't match.
1071 */
1072 sk1 = inet6_lookup_listener(net, net->ipv4.tcp_death_row.hashinfo,
1073 NULL, 0, &ipv6h->saddr, th->source,
1074 &ipv6h->daddr, ntohs(th->source),
1075 dif, sdif);
1076 if (!sk1)
1077 goto out;
1078
1079 /* sdif set, means packet ingressed via a device
1080 * in an L3 domain and dif is set to it.
1081 */
1082 l3index = tcp_v6_sdif(skb) ? dif : 0;
1083
1084 key.md5_key = tcp_v6_md5_do_lookup(sk1, &ipv6h->saddr, l3index);
1085 if (!key.md5_key)
1086 goto out;
1087 key.type = TCP_KEY_MD5;
1088
1089 genhash = tcp_v6_md5_hash_skb(newhash, key.md5_key, NULL, skb);
1090 if (genhash || memcmp(md5_hash_location, newhash, 16) != 0)
1091 goto out;
1092 }
1093#endif
1094
1095 if (th->ack)
1096 seq = ntohl(th->ack_seq);
1097 else
1098 ack_seq = ntohl(th->seq) + th->syn + th->fin + skb->len -
1099 (th->doff << 2);
1100
1101#ifdef CONFIG_TCP_AO
1102 if (aoh) {
1103 int l3index;
1104
1105 l3index = tcp_v6_sdif(skb) ? tcp_v6_iif_l3_slave(skb) : 0;
1106 if (tcp_ao_prepare_reset(sk, skb, aoh, l3index, seq,
1107 &key.ao_key, &key.traffic_key,
1108 &allocated_traffic_key,
1109 &key.rcv_next, &key.sne))
1110 goto out;
1111 key.type = TCP_KEY_AO;
1112 }
1113#endif
1114
1115 if (sk) {
1116 oif = sk->sk_bound_dev_if;
1117 if (sk_fullsock(sk)) {
1118 if (inet6_test_bit(REPFLOW, sk))
1119 label = ip6_flowlabel(ipv6h);
1120 priority = READ_ONCE(sk->sk_priority);
1121 txhash = sk->sk_txhash;
1122 }
1123 if (sk->sk_state == TCP_TIME_WAIT) {
1124 label = cpu_to_be32(inet_twsk(sk)->tw_flowlabel);
1125 priority = inet_twsk(sk)->tw_priority;
1126 txhash = inet_twsk(sk)->tw_txhash;
1127 }
1128 } else {
1129 if (net->ipv6.sysctl.flowlabel_reflect & FLOWLABEL_REFLECT_TCP_RESET)
1130 label = ip6_flowlabel(ipv6h);
1131 }
1132
1133 trace_tcp_send_reset(sk, skb, reason);
1134
1135 tcp_v6_send_response(sk, skb, seq, ack_seq, 0, 0, 0, oif, 1,
1136 ipv6_get_dsfield(ipv6h), label, priority, txhash,
1137 &key);
1138
1139#if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO)
1140out:
1141 if (allocated_traffic_key)
1142 kfree(key.traffic_key);
1143 rcu_read_unlock();
1144#endif
1145}
1146
1147static void tcp_v6_send_ack(const struct sock *sk, struct sk_buff *skb, u32 seq,
1148 u32 ack, u32 win, u32 tsval, u32 tsecr, int oif,
1149 struct tcp_key *key, u8 tclass,
1150 __be32 label, u32 priority, u32 txhash)
1151{
1152 tcp_v6_send_response(sk, skb, seq, ack, win, tsval, tsecr, oif, 0,
1153 tclass, label, priority, txhash, key);
1154}
1155
1156static void tcp_v6_timewait_ack(struct sock *sk, struct sk_buff *skb)
1157{
1158 struct inet_timewait_sock *tw = inet_twsk(sk);
1159 struct tcp_timewait_sock *tcptw = tcp_twsk(sk);
1160 struct tcp_key key = {};
1161#ifdef CONFIG_TCP_AO
1162 struct tcp_ao_info *ao_info;
1163
1164 if (static_branch_unlikely(&tcp_ao_needed.key)) {
1165
1166 /* FIXME: the segment to-be-acked is not verified yet */
1167 ao_info = rcu_dereference(tcptw->ao_info);
1168 if (ao_info) {
1169 const struct tcp_ao_hdr *aoh;
1170
1171 /* Invalid TCP option size or twice included auth */
1172 if (tcp_parse_auth_options(tcp_hdr(skb), NULL, &aoh))
1173 goto out;
1174 if (aoh)
1175 key.ao_key = tcp_ao_established_key(sk, ao_info,
1176 aoh->rnext_keyid, -1);
1177 }
1178 }
1179 if (key.ao_key) {
1180 struct tcp_ao_key *rnext_key;
1181
1182 key.traffic_key = snd_other_key(key.ao_key);
1183 /* rcv_next switches to our rcv_next */
1184 rnext_key = READ_ONCE(ao_info->rnext_key);
1185 key.rcv_next = rnext_key->rcvid;
1186 key.sne = READ_ONCE(ao_info->snd_sne);
1187 key.type = TCP_KEY_AO;
1188#else
1189 if (0) {
1190#endif
1191#ifdef CONFIG_TCP_MD5SIG
1192 } else if (static_branch_unlikely(&tcp_md5_needed.key)) {
1193 key.md5_key = tcp_twsk_md5_key(tcptw);
1194 if (key.md5_key)
1195 key.type = TCP_KEY_MD5;
1196#endif
1197 }
1198
1199 tcp_v6_send_ack(sk, skb, tcptw->tw_snd_nxt,
1200 READ_ONCE(tcptw->tw_rcv_nxt),
1201 tcptw->tw_rcv_wnd >> tw->tw_rcv_wscale,
1202 tcp_tw_tsval(tcptw),
1203 READ_ONCE(tcptw->tw_ts_recent), tw->tw_bound_dev_if,
1204 &key, tw->tw_tclass, cpu_to_be32(tw->tw_flowlabel),
1205 tw->tw_priority, tw->tw_txhash);
1206
1207#ifdef CONFIG_TCP_AO
1208out:
1209#endif
1210 inet_twsk_put(tw);
1211}
1212
1213static void tcp_v6_reqsk_send_ack(const struct sock *sk, struct sk_buff *skb,
1214 struct request_sock *req)
1215{
1216 struct tcp_key key = {};
1217
1218#ifdef CONFIG_TCP_AO
1219 if (static_branch_unlikely(&tcp_ao_needed.key) &&
1220 tcp_rsk_used_ao(req)) {
1221 const struct in6_addr *addr = &ipv6_hdr(skb)->saddr;
1222 const struct tcp_ao_hdr *aoh;
1223 int l3index;
1224
1225 l3index = tcp_v6_sdif(skb) ? tcp_v6_iif_l3_slave(skb) : 0;
1226 /* Invalid TCP option size or twice included auth */
1227 if (tcp_parse_auth_options(tcp_hdr(skb), NULL, &aoh))
1228 return;
1229 if (!aoh)
1230 return;
1231 key.ao_key = tcp_ao_do_lookup(sk, l3index,
1232 (union tcp_ao_addr *)addr,
1233 AF_INET6, aoh->rnext_keyid, -1);
1234 if (unlikely(!key.ao_key)) {
1235 /* Send ACK with any matching MKT for the peer */
1236 key.ao_key = tcp_ao_do_lookup(sk, l3index,
1237 (union tcp_ao_addr *)addr,
1238 AF_INET6, -1, -1);
1239 /* Matching key disappeared (user removed the key?)
1240 * let the handshake timeout.
1241 */
1242 if (!key.ao_key) {
1243 net_info_ratelimited("TCP-AO key for (%pI6, %d)->(%pI6, %d) suddenly disappeared, won't ACK new connection\n",
1244 addr,
1245 ntohs(tcp_hdr(skb)->source),
1246 &ipv6_hdr(skb)->daddr,
1247 ntohs(tcp_hdr(skb)->dest));
1248 return;
1249 }
1250 }
1251 key.traffic_key = kmalloc(tcp_ao_digest_size(key.ao_key), GFP_ATOMIC);
1252 if (!key.traffic_key)
1253 return;
1254
1255 key.type = TCP_KEY_AO;
1256 key.rcv_next = aoh->keyid;
1257 tcp_v6_ao_calc_key_rsk(key.ao_key, key.traffic_key, req);
1258#else
1259 if (0) {
1260#endif
1261#ifdef CONFIG_TCP_MD5SIG
1262 } else if (static_branch_unlikely(&tcp_md5_needed.key)) {
1263 int l3index = tcp_v6_sdif(skb) ? tcp_v6_iif_l3_slave(skb) : 0;
1264
1265 key.md5_key = tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->saddr,
1266 l3index);
1267 if (key.md5_key)
1268 key.type = TCP_KEY_MD5;
1269#endif
1270 }
1271
1272 /* sk->sk_state == TCP_LISTEN -> for regular TCP_SYN_RECV
1273 * sk->sk_state == TCP_SYN_RECV -> for Fast Open.
1274 */
1275 tcp_v6_send_ack(sk, skb, (sk->sk_state == TCP_LISTEN) ?
1276 tcp_rsk(req)->snt_isn + 1 : tcp_sk(sk)->snd_nxt,
1277 tcp_rsk(req)->rcv_nxt,
1278 tcp_synack_window(req) >> inet_rsk(req)->rcv_wscale,
1279 tcp_rsk_tsval(tcp_rsk(req)),
1280 READ_ONCE(req->ts_recent), sk->sk_bound_dev_if,
1281 &key, ipv6_get_dsfield(ipv6_hdr(skb)), 0,
1282 READ_ONCE(sk->sk_priority),
1283 READ_ONCE(tcp_rsk(req)->txhash));
1284 if (tcp_key_is_ao(&key))
1285 kfree(key.traffic_key);
1286}
1287
1288
1289static struct sock *tcp_v6_cookie_check(struct sock *sk, struct sk_buff *skb)
1290{
1291#ifdef CONFIG_SYN_COOKIES
1292 const struct tcphdr *th = tcp_hdr(skb);
1293
1294 if (!th->syn)
1295 sk = cookie_v6_check(sk, skb);
1296#endif
1297 return sk;
1298}
1299
1300u16 tcp_v6_get_syncookie(struct sock *sk, struct ipv6hdr *iph,
1301 struct tcphdr *th, u32 *cookie)
1302{
1303 u16 mss = 0;
1304#ifdef CONFIG_SYN_COOKIES
1305 mss = tcp_get_syncookie_mss(&tcp6_request_sock_ops,
1306 &tcp_request_sock_ipv6_ops, sk, th);
1307 if (mss) {
1308 *cookie = __cookie_v6_init_sequence(iph, th, &mss);
1309 tcp_synq_overflow(sk);
1310 }
1311#endif
1312 return mss;
1313}
1314
1315static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
1316{
1317 if (skb->protocol == htons(ETH_P_IP))
1318 return tcp_v4_conn_request(sk, skb);
1319
1320 if (!ipv6_unicast_destination(skb))
1321 goto drop;
1322
1323 if (ipv6_addr_v4mapped(&ipv6_hdr(skb)->saddr)) {
1324 __IP6_INC_STATS(sock_net(sk), NULL, IPSTATS_MIB_INHDRERRORS);
1325 return 0;
1326 }
1327
1328 return tcp_conn_request(&tcp6_request_sock_ops,
1329 &tcp_request_sock_ipv6_ops, sk, skb);
1330
1331drop:
1332 tcp_listendrop(sk);
1333 return 0; /* don't send reset */
1334}
1335
1336static void tcp_v6_restore_cb(struct sk_buff *skb)
1337{
1338 /* We need to move header back to the beginning if xfrm6_policy_check()
1339 * and tcp_v6_fill_cb() are going to be called again.
1340 * ip6_datagram_recv_specific_ctl() also expects IP6CB to be there.
1341 */
1342 memmove(IP6CB(skb), &TCP_SKB_CB(skb)->header.h6,
1343 sizeof(struct inet6_skb_parm));
1344}
1345
1346static struct sock *tcp_v6_syn_recv_sock(const struct sock *sk, struct sk_buff *skb,
1347 struct request_sock *req,
1348 struct dst_entry *dst,
1349 struct request_sock *req_unhash,
1350 bool *own_req)
1351{
1352 struct inet_request_sock *ireq;
1353 struct ipv6_pinfo *newnp;
1354 const struct ipv6_pinfo *np = tcp_inet6_sk(sk);
1355 struct ipv6_txoptions *opt;
1356 struct inet_sock *newinet;
1357 bool found_dup_sk = false;
1358 struct tcp_sock *newtp;
1359 struct sock *newsk;
1360#ifdef CONFIG_TCP_MD5SIG
1361 struct tcp_md5sig_key *key;
1362 int l3index;
1363#endif
1364 struct flowi6 fl6;
1365
1366 if (skb->protocol == htons(ETH_P_IP)) {
1367 /*
1368 * v6 mapped
1369 */
1370
1371 newsk = tcp_v4_syn_recv_sock(sk, skb, req, dst,
1372 req_unhash, own_req);
1373
1374 if (!newsk)
1375 return NULL;
1376
1377 inet_sk(newsk)->pinet6 = tcp_inet6_sk(newsk);
1378
1379 newnp = tcp_inet6_sk(newsk);
1380 newtp = tcp_sk(newsk);
1381
1382 memcpy(newnp, np, sizeof(struct ipv6_pinfo));
1383
1384 newnp->saddr = newsk->sk_v6_rcv_saddr;
1385
1386 inet_csk(newsk)->icsk_af_ops = &ipv6_mapped;
1387 if (sk_is_mptcp(newsk))
1388 mptcpv6_handle_mapped(newsk, true);
1389 newsk->sk_backlog_rcv = tcp_v4_do_rcv;
1390#if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO)
1391 newtp->af_specific = &tcp_sock_ipv6_mapped_specific;
1392#endif
1393
1394 newnp->ipv6_mc_list = NULL;
1395 newnp->ipv6_ac_list = NULL;
1396 newnp->ipv6_fl_list = NULL;
1397 newnp->pktoptions = NULL;
1398 newnp->opt = NULL;
1399 newnp->mcast_oif = inet_iif(skb);
1400 newnp->mcast_hops = ip_hdr(skb)->ttl;
1401 newnp->rcv_flowinfo = 0;
1402 if (inet6_test_bit(REPFLOW, sk))
1403 newnp->flow_label = 0;
1404
1405 /*
1406 * No need to charge this sock to the relevant IPv6 refcnt debug socks count
1407 * here, tcp_create_openreq_child now does this for us, see the comment in
1408 * that function for the gory details. -acme
1409 */
1410
1411 /* It is tricky place. Until this moment IPv4 tcp
1412 worked with IPv6 icsk.icsk_af_ops.
1413 Sync it now.
1414 */
1415 tcp_sync_mss(newsk, inet_csk(newsk)->icsk_pmtu_cookie);
1416
1417 return newsk;
1418 }
1419
1420 ireq = inet_rsk(req);
1421
1422 if (sk_acceptq_is_full(sk))
1423 goto out_overflow;
1424
1425 if (!dst) {
1426 dst = inet6_csk_route_req(sk, &fl6, req, IPPROTO_TCP);
1427 if (!dst)
1428 goto out;
1429 }
1430
1431 newsk = tcp_create_openreq_child(sk, req, skb);
1432 if (!newsk)
1433 goto out_nonewsk;
1434
1435 /*
1436 * No need to charge this sock to the relevant IPv6 refcnt debug socks
1437 * count here, tcp_create_openreq_child now does this for us, see the
1438 * comment in that function for the gory details. -acme
1439 */
1440
1441 newsk->sk_gso_type = SKB_GSO_TCPV6;
1442 inet6_sk_rx_dst_set(newsk, skb);
1443
1444 inet_sk(newsk)->pinet6 = tcp_inet6_sk(newsk);
1445
1446 newtp = tcp_sk(newsk);
1447 newinet = inet_sk(newsk);
1448 newnp = tcp_inet6_sk(newsk);
1449
1450 memcpy(newnp, np, sizeof(struct ipv6_pinfo));
1451
1452 ip6_dst_store(newsk, dst, NULL, NULL);
1453
1454 newsk->sk_v6_daddr = ireq->ir_v6_rmt_addr;
1455 newnp->saddr = ireq->ir_v6_loc_addr;
1456 newsk->sk_v6_rcv_saddr = ireq->ir_v6_loc_addr;
1457 newsk->sk_bound_dev_if = ireq->ir_iif;
1458
1459 /* Now IPv6 options...
1460
1461 First: no IPv4 options.
1462 */
1463 newinet->inet_opt = NULL;
1464 newnp->ipv6_mc_list = NULL;
1465 newnp->ipv6_ac_list = NULL;
1466 newnp->ipv6_fl_list = NULL;
1467
1468 /* Clone RX bits */
1469 newnp->rxopt.all = np->rxopt.all;
1470
1471 newnp->pktoptions = NULL;
1472 newnp->opt = NULL;
1473 newnp->mcast_oif = tcp_v6_iif(skb);
1474 newnp->mcast_hops = ipv6_hdr(skb)->hop_limit;
1475 newnp->rcv_flowinfo = ip6_flowinfo(ipv6_hdr(skb));
1476 if (inet6_test_bit(REPFLOW, sk))
1477 newnp->flow_label = ip6_flowlabel(ipv6_hdr(skb));
1478
1479 /* Set ToS of the new socket based upon the value of incoming SYN.
1480 * ECT bits are set later in tcp_init_transfer().
1481 */
1482 if (READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_reflect_tos))
1483 newnp->tclass = tcp_rsk(req)->syn_tos & ~INET_ECN_MASK;
1484
1485 /* Clone native IPv6 options from listening socket (if any)
1486
1487 Yes, keeping reference count would be much more clever,
1488 but we make one more one thing there: reattach optmem
1489 to newsk.
1490 */
1491 opt = ireq->ipv6_opt;
1492 if (!opt)
1493 opt = rcu_dereference(np->opt);
1494 if (opt) {
1495 opt = ipv6_dup_options(newsk, opt);
1496 RCU_INIT_POINTER(newnp->opt, opt);
1497 }
1498 inet_csk(newsk)->icsk_ext_hdr_len = 0;
1499 if (opt)
1500 inet_csk(newsk)->icsk_ext_hdr_len = opt->opt_nflen +
1501 opt->opt_flen;
1502
1503 tcp_ca_openreq_child(newsk, dst);
1504
1505 tcp_sync_mss(newsk, dst_mtu(dst));
1506 newtp->advmss = tcp_mss_clamp(tcp_sk(sk), dst_metric_advmss(dst));
1507
1508 tcp_initialize_rcv_mss(newsk);
1509
1510 newinet->inet_daddr = newinet->inet_saddr = LOOPBACK4_IPV6;
1511 newinet->inet_rcv_saddr = LOOPBACK4_IPV6;
1512
1513#ifdef CONFIG_TCP_MD5SIG
1514 l3index = l3mdev_master_ifindex_by_index(sock_net(sk), ireq->ir_iif);
1515
1516 if (!tcp_rsk_used_ao(req)) {
1517 /* Copy over the MD5 key from the original socket */
1518 key = tcp_v6_md5_do_lookup(sk, &newsk->sk_v6_daddr, l3index);
1519 if (key) {
1520 const union tcp_md5_addr *addr;
1521
1522 addr = (union tcp_md5_addr *)&newsk->sk_v6_daddr;
1523 if (tcp_md5_key_copy(newsk, addr, AF_INET6, 128, l3index, key)) {
1524 inet_csk_prepare_forced_close(newsk);
1525 tcp_done(newsk);
1526 goto out;
1527 }
1528 }
1529 }
1530#endif
1531#ifdef CONFIG_TCP_AO
1532 /* Copy over tcp_ao_info if any */
1533 if (tcp_ao_copy_all_matching(sk, newsk, req, skb, AF_INET6))
1534 goto out; /* OOM */
1535#endif
1536
1537 if (__inet_inherit_port(sk, newsk) < 0) {
1538 inet_csk_prepare_forced_close(newsk);
1539 tcp_done(newsk);
1540 goto out;
1541 }
1542 *own_req = inet_ehash_nolisten(newsk, req_to_sk(req_unhash),
1543 &found_dup_sk);
1544 if (*own_req) {
1545 tcp_move_syn(newtp, req);
1546
1547 /* Clone pktoptions received with SYN, if we own the req */
1548 if (ireq->pktopts) {
1549 newnp->pktoptions = skb_clone_and_charge_r(ireq->pktopts, newsk);
1550 consume_skb(ireq->pktopts);
1551 ireq->pktopts = NULL;
1552 if (newnp->pktoptions)
1553 tcp_v6_restore_cb(newnp->pktoptions);
1554 }
1555 } else {
1556 if (!req_unhash && found_dup_sk) {
1557 /* This code path should only be executed in the
1558 * syncookie case only
1559 */
1560 bh_unlock_sock(newsk);
1561 sock_put(newsk);
1562 newsk = NULL;
1563 }
1564 }
1565
1566 return newsk;
1567
1568out_overflow:
1569 __NET_INC_STATS(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS);
1570out_nonewsk:
1571 dst_release(dst);
1572out:
1573 tcp_listendrop(sk);
1574 return NULL;
1575}
1576
1577INDIRECT_CALLABLE_DECLARE(struct dst_entry *ipv4_dst_check(struct dst_entry *,
1578 u32));
1579/* The socket must have it's spinlock held when we get
1580 * here, unless it is a TCP_LISTEN socket.
1581 *
1582 * We have a potential double-lock case here, so even when
1583 * doing backlog processing we use the BH locking scheme.
1584 * This is because we cannot sleep with the original spinlock
1585 * held.
1586 */
1587INDIRECT_CALLABLE_SCOPE
1588int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
1589{
1590 struct ipv6_pinfo *np = tcp_inet6_sk(sk);
1591 struct sk_buff *opt_skb = NULL;
1592 enum skb_drop_reason reason;
1593 struct tcp_sock *tp;
1594
1595 /* Imagine: socket is IPv6. IPv4 packet arrives,
1596 goes to IPv4 receive handler and backlogged.
1597 From backlog it always goes here. Kerboom...
1598 Fortunately, tcp_rcv_established and rcv_established
1599 handle them correctly, but it is not case with
1600 tcp_v6_hnd_req and tcp_v6_send_reset(). --ANK
1601 */
1602
1603 if (skb->protocol == htons(ETH_P_IP))
1604 return tcp_v4_do_rcv(sk, skb);
1605
1606 /*
1607 * socket locking is here for SMP purposes as backlog rcv
1608 * is currently called with bh processing disabled.
1609 */
1610
1611 /* Do Stevens' IPV6_PKTOPTIONS.
1612
1613 Yes, guys, it is the only place in our code, where we
1614 may make it not affecting IPv4.
1615 The rest of code is protocol independent,
1616 and I do not like idea to uglify IPv4.
1617
1618 Actually, all the idea behind IPV6_PKTOPTIONS
1619 looks not very well thought. For now we latch
1620 options, received in the last packet, enqueued
1621 by tcp. Feel free to propose better solution.
1622 --ANK (980728)
1623 */
1624 if (np->rxopt.all && sk->sk_state != TCP_LISTEN)
1625 opt_skb = skb_clone_and_charge_r(skb, sk);
1626
1627 if (sk->sk_state == TCP_ESTABLISHED) { /* Fast path */
1628 struct dst_entry *dst;
1629
1630 dst = rcu_dereference_protected(sk->sk_rx_dst,
1631 lockdep_sock_is_held(sk));
1632
1633 sock_rps_save_rxhash(sk, skb);
1634 sk_mark_napi_id(sk, skb);
1635 if (dst) {
1636 if (sk->sk_rx_dst_ifindex != skb->skb_iif ||
1637 INDIRECT_CALL_1(dst->ops->check, ip6_dst_check,
1638 dst, sk->sk_rx_dst_cookie) == NULL) {
1639 RCU_INIT_POINTER(sk->sk_rx_dst, NULL);
1640 dst_release(dst);
1641 }
1642 }
1643
1644 tcp_rcv_established(sk, skb);
1645 if (opt_skb)
1646 goto ipv6_pktoptions;
1647 return 0;
1648 }
1649
1650 if (tcp_checksum_complete(skb))
1651 goto csum_err;
1652
1653 if (sk->sk_state == TCP_LISTEN) {
1654 struct sock *nsk = tcp_v6_cookie_check(sk, skb);
1655
1656 if (nsk != sk) {
1657 if (nsk) {
1658 reason = tcp_child_process(sk, nsk, skb);
1659 if (reason)
1660 goto reset;
1661 }
1662 return 0;
1663 }
1664 } else
1665 sock_rps_save_rxhash(sk, skb);
1666
1667 reason = tcp_rcv_state_process(sk, skb);
1668 if (reason)
1669 goto reset;
1670 if (opt_skb)
1671 goto ipv6_pktoptions;
1672 return 0;
1673
1674reset:
1675 tcp_v6_send_reset(sk, skb, sk_rst_convert_drop_reason(reason));
1676discard:
1677 if (opt_skb)
1678 __kfree_skb(opt_skb);
1679 sk_skb_reason_drop(sk, skb, reason);
1680 return 0;
1681csum_err:
1682 reason = SKB_DROP_REASON_TCP_CSUM;
1683 trace_tcp_bad_csum(skb);
1684 TCP_INC_STATS(sock_net(sk), TCP_MIB_CSUMERRORS);
1685 TCP_INC_STATS(sock_net(sk), TCP_MIB_INERRS);
1686 goto discard;
1687
1688
1689ipv6_pktoptions:
1690 /* Do you ask, what is it?
1691
1692 1. skb was enqueued by tcp.
1693 2. skb is added to tail of read queue, rather than out of order.
1694 3. socket is not in passive state.
1695 4. Finally, it really contains options, which user wants to receive.
1696 */
1697 tp = tcp_sk(sk);
1698 if (TCP_SKB_CB(opt_skb)->end_seq == tp->rcv_nxt &&
1699 !((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_LISTEN))) {
1700 if (np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo)
1701 WRITE_ONCE(np->mcast_oif, tcp_v6_iif(opt_skb));
1702 if (np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim)
1703 WRITE_ONCE(np->mcast_hops,
1704 ipv6_hdr(opt_skb)->hop_limit);
1705 if (np->rxopt.bits.rxflow || np->rxopt.bits.rxtclass)
1706 np->rcv_flowinfo = ip6_flowinfo(ipv6_hdr(opt_skb));
1707 if (inet6_test_bit(REPFLOW, sk))
1708 np->flow_label = ip6_flowlabel(ipv6_hdr(opt_skb));
1709 if (ipv6_opt_accepted(sk, opt_skb, &TCP_SKB_CB(opt_skb)->header.h6)) {
1710 tcp_v6_restore_cb(opt_skb);
1711 opt_skb = xchg(&np->pktoptions, opt_skb);
1712 } else {
1713 __kfree_skb(opt_skb);
1714 opt_skb = xchg(&np->pktoptions, NULL);
1715 }
1716 }
1717
1718 consume_skb(opt_skb);
1719 return 0;
1720}
1721
1722static void tcp_v6_fill_cb(struct sk_buff *skb, const struct ipv6hdr *hdr,
1723 const struct tcphdr *th)
1724{
1725 /* This is tricky: we move IP6CB at its correct location into
1726 * TCP_SKB_CB(). It must be done after xfrm6_policy_check(), because
1727 * _decode_session6() uses IP6CB().
1728 * barrier() makes sure compiler won't play aliasing games.
1729 */
1730 memmove(&TCP_SKB_CB(skb)->header.h6, IP6CB(skb),
1731 sizeof(struct inet6_skb_parm));
1732 barrier();
1733
1734 TCP_SKB_CB(skb)->seq = ntohl(th->seq);
1735 TCP_SKB_CB(skb)->end_seq = (TCP_SKB_CB(skb)->seq + th->syn + th->fin +
1736 skb->len - th->doff*4);
1737 TCP_SKB_CB(skb)->ack_seq = ntohl(th->ack_seq);
1738 TCP_SKB_CB(skb)->tcp_flags = tcp_flag_byte(th);
1739 TCP_SKB_CB(skb)->ip_dsfield = ipv6_get_dsfield(hdr);
1740 TCP_SKB_CB(skb)->sacked = 0;
1741 TCP_SKB_CB(skb)->has_rxtstamp =
1742 skb->tstamp || skb_hwtstamps(skb)->hwtstamp;
1743}
1744
1745INDIRECT_CALLABLE_SCOPE int tcp_v6_rcv(struct sk_buff *skb)
1746{
1747 enum skb_drop_reason drop_reason;
1748 int sdif = inet6_sdif(skb);
1749 int dif = inet6_iif(skb);
1750 const struct tcphdr *th;
1751 const struct ipv6hdr *hdr;
1752 struct sock *sk = NULL;
1753 bool refcounted;
1754 int ret;
1755 u32 isn;
1756 struct net *net = dev_net(skb->dev);
1757
1758 drop_reason = SKB_DROP_REASON_NOT_SPECIFIED;
1759 if (skb->pkt_type != PACKET_HOST)
1760 goto discard_it;
1761
1762 /*
1763 * Count it even if it's bad.
1764 */
1765 __TCP_INC_STATS(net, TCP_MIB_INSEGS);
1766
1767 if (!pskb_may_pull(skb, sizeof(struct tcphdr)))
1768 goto discard_it;
1769
1770 th = (const struct tcphdr *)skb->data;
1771
1772 if (unlikely(th->doff < sizeof(struct tcphdr) / 4)) {
1773 drop_reason = SKB_DROP_REASON_PKT_TOO_SMALL;
1774 goto bad_packet;
1775 }
1776 if (!pskb_may_pull(skb, th->doff*4))
1777 goto discard_it;
1778
1779 if (skb_checksum_init(skb, IPPROTO_TCP, ip6_compute_pseudo))
1780 goto csum_error;
1781
1782 th = (const struct tcphdr *)skb->data;
1783 hdr = ipv6_hdr(skb);
1784
1785lookup:
1786 sk = __inet6_lookup_skb(net->ipv4.tcp_death_row.hashinfo, skb, __tcp_hdrlen(th),
1787 th->source, th->dest, inet6_iif(skb), sdif,
1788 &refcounted);
1789 if (!sk)
1790 goto no_tcp_socket;
1791
1792 if (sk->sk_state == TCP_TIME_WAIT)
1793 goto do_time_wait;
1794
1795 if (sk->sk_state == TCP_NEW_SYN_RECV) {
1796 struct request_sock *req = inet_reqsk(sk);
1797 bool req_stolen = false;
1798 struct sock *nsk;
1799
1800 sk = req->rsk_listener;
1801 if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb))
1802 drop_reason = SKB_DROP_REASON_XFRM_POLICY;
1803 else
1804 drop_reason = tcp_inbound_hash(sk, req, skb,
1805 &hdr->saddr, &hdr->daddr,
1806 AF_INET6, dif, sdif);
1807 if (drop_reason) {
1808 sk_drops_add(sk, skb);
1809 reqsk_put(req);
1810 goto discard_it;
1811 }
1812 if (tcp_checksum_complete(skb)) {
1813 reqsk_put(req);
1814 goto csum_error;
1815 }
1816 if (unlikely(sk->sk_state != TCP_LISTEN)) {
1817 nsk = reuseport_migrate_sock(sk, req_to_sk(req), skb);
1818 if (!nsk) {
1819 inet_csk_reqsk_queue_drop_and_put(sk, req);
1820 goto lookup;
1821 }
1822 sk = nsk;
1823 /* reuseport_migrate_sock() has already held one sk_refcnt
1824 * before returning.
1825 */
1826 } else {
1827 sock_hold(sk);
1828 }
1829 refcounted = true;
1830 nsk = NULL;
1831 if (!tcp_filter(sk, skb)) {
1832 th = (const struct tcphdr *)skb->data;
1833 hdr = ipv6_hdr(skb);
1834 tcp_v6_fill_cb(skb, hdr, th);
1835 nsk = tcp_check_req(sk, skb, req, false, &req_stolen);
1836 } else {
1837 drop_reason = SKB_DROP_REASON_SOCKET_FILTER;
1838 }
1839 if (!nsk) {
1840 reqsk_put(req);
1841 if (req_stolen) {
1842 /* Another cpu got exclusive access to req
1843 * and created a full blown socket.
1844 * Try to feed this packet to this socket
1845 * instead of discarding it.
1846 */
1847 tcp_v6_restore_cb(skb);
1848 sock_put(sk);
1849 goto lookup;
1850 }
1851 goto discard_and_relse;
1852 }
1853 nf_reset_ct(skb);
1854 if (nsk == sk) {
1855 reqsk_put(req);
1856 tcp_v6_restore_cb(skb);
1857 } else {
1858 drop_reason = tcp_child_process(sk, nsk, skb);
1859 if (drop_reason) {
1860 enum sk_rst_reason rst_reason;
1861
1862 rst_reason = sk_rst_convert_drop_reason(drop_reason);
1863 tcp_v6_send_reset(nsk, skb, rst_reason);
1864 goto discard_and_relse;
1865 }
1866 sock_put(sk);
1867 return 0;
1868 }
1869 }
1870
1871process:
1872 if (static_branch_unlikely(&ip6_min_hopcount)) {
1873 /* min_hopcount can be changed concurrently from do_ipv6_setsockopt() */
1874 if (unlikely(hdr->hop_limit < READ_ONCE(tcp_inet6_sk(sk)->min_hopcount))) {
1875 __NET_INC_STATS(net, LINUX_MIB_TCPMINTTLDROP);
1876 drop_reason = SKB_DROP_REASON_TCP_MINTTL;
1877 goto discard_and_relse;
1878 }
1879 }
1880
1881 if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb)) {
1882 drop_reason = SKB_DROP_REASON_XFRM_POLICY;
1883 goto discard_and_relse;
1884 }
1885
1886 drop_reason = tcp_inbound_hash(sk, NULL, skb, &hdr->saddr, &hdr->daddr,
1887 AF_INET6, dif, sdif);
1888 if (drop_reason)
1889 goto discard_and_relse;
1890
1891 nf_reset_ct(skb);
1892
1893 if (tcp_filter(sk, skb)) {
1894 drop_reason = SKB_DROP_REASON_SOCKET_FILTER;
1895 goto discard_and_relse;
1896 }
1897 th = (const struct tcphdr *)skb->data;
1898 hdr = ipv6_hdr(skb);
1899 tcp_v6_fill_cb(skb, hdr, th);
1900
1901 skb->dev = NULL;
1902
1903 if (sk->sk_state == TCP_LISTEN) {
1904 ret = tcp_v6_do_rcv(sk, skb);
1905 goto put_and_return;
1906 }
1907
1908 sk_incoming_cpu_update(sk);
1909
1910 bh_lock_sock_nested(sk);
1911 tcp_segs_in(tcp_sk(sk), skb);
1912 ret = 0;
1913 if (!sock_owned_by_user(sk)) {
1914 ret = tcp_v6_do_rcv(sk, skb);
1915 } else {
1916 if (tcp_add_backlog(sk, skb, &drop_reason))
1917 goto discard_and_relse;
1918 }
1919 bh_unlock_sock(sk);
1920put_and_return:
1921 if (refcounted)
1922 sock_put(sk);
1923 return ret ? -1 : 0;
1924
1925no_tcp_socket:
1926 drop_reason = SKB_DROP_REASON_NO_SOCKET;
1927 if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb))
1928 goto discard_it;
1929
1930 tcp_v6_fill_cb(skb, hdr, th);
1931
1932 if (tcp_checksum_complete(skb)) {
1933csum_error:
1934 drop_reason = SKB_DROP_REASON_TCP_CSUM;
1935 trace_tcp_bad_csum(skb);
1936 __TCP_INC_STATS(net, TCP_MIB_CSUMERRORS);
1937bad_packet:
1938 __TCP_INC_STATS(net, TCP_MIB_INERRS);
1939 } else {
1940 tcp_v6_send_reset(NULL, skb, sk_rst_convert_drop_reason(drop_reason));
1941 }
1942
1943discard_it:
1944 SKB_DR_OR(drop_reason, NOT_SPECIFIED);
1945 sk_skb_reason_drop(sk, skb, drop_reason);
1946 return 0;
1947
1948discard_and_relse:
1949 sk_drops_add(sk, skb);
1950 if (refcounted)
1951 sock_put(sk);
1952 goto discard_it;
1953
1954do_time_wait:
1955 if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) {
1956 drop_reason = SKB_DROP_REASON_XFRM_POLICY;
1957 inet_twsk_put(inet_twsk(sk));
1958 goto discard_it;
1959 }
1960
1961 tcp_v6_fill_cb(skb, hdr, th);
1962
1963 if (tcp_checksum_complete(skb)) {
1964 inet_twsk_put(inet_twsk(sk));
1965 goto csum_error;
1966 }
1967
1968 switch (tcp_timewait_state_process(inet_twsk(sk), skb, th, &isn)) {
1969 case TCP_TW_SYN:
1970 {
1971 struct sock *sk2;
1972
1973 sk2 = inet6_lookup_listener(net, net->ipv4.tcp_death_row.hashinfo,
1974 skb, __tcp_hdrlen(th),
1975 &ipv6_hdr(skb)->saddr, th->source,
1976 &ipv6_hdr(skb)->daddr,
1977 ntohs(th->dest),
1978 tcp_v6_iif_l3_slave(skb),
1979 sdif);
1980 if (sk2) {
1981 struct inet_timewait_sock *tw = inet_twsk(sk);
1982 inet_twsk_deschedule_put(tw);
1983 sk = sk2;
1984 tcp_v6_restore_cb(skb);
1985 refcounted = false;
1986 __this_cpu_write(tcp_tw_isn, isn);
1987 goto process;
1988 }
1989 }
1990 /* to ACK */
1991 fallthrough;
1992 case TCP_TW_ACK:
1993 tcp_v6_timewait_ack(sk, skb);
1994 break;
1995 case TCP_TW_RST:
1996 tcp_v6_send_reset(sk, skb, SK_RST_REASON_TCP_TIMEWAIT_SOCKET);
1997 inet_twsk_deschedule_put(inet_twsk(sk));
1998 goto discard_it;
1999 case TCP_TW_SUCCESS:
2000 ;
2001 }
2002 goto discard_it;
2003}
2004
2005void tcp_v6_early_demux(struct sk_buff *skb)
2006{
2007 struct net *net = dev_net(skb->dev);
2008 const struct ipv6hdr *hdr;
2009 const struct tcphdr *th;
2010 struct sock *sk;
2011
2012 if (skb->pkt_type != PACKET_HOST)
2013 return;
2014
2015 if (!pskb_may_pull(skb, skb_transport_offset(skb) + sizeof(struct tcphdr)))
2016 return;
2017
2018 hdr = ipv6_hdr(skb);
2019 th = tcp_hdr(skb);
2020
2021 if (th->doff < sizeof(struct tcphdr) / 4)
2022 return;
2023
2024 /* Note : We use inet6_iif() here, not tcp_v6_iif() */
2025 sk = __inet6_lookup_established(net, net->ipv4.tcp_death_row.hashinfo,
2026 &hdr->saddr, th->source,
2027 &hdr->daddr, ntohs(th->dest),
2028 inet6_iif(skb), inet6_sdif(skb));
2029 if (sk) {
2030 skb->sk = sk;
2031 skb->destructor = sock_edemux;
2032 if (sk_fullsock(sk)) {
2033 struct dst_entry *dst = rcu_dereference(sk->sk_rx_dst);
2034
2035 if (dst)
2036 dst = dst_check(dst, sk->sk_rx_dst_cookie);
2037 if (dst &&
2038 sk->sk_rx_dst_ifindex == skb->skb_iif)
2039 skb_dst_set_noref(skb, dst);
2040 }
2041 }
2042}
2043
2044static struct timewait_sock_ops tcp6_timewait_sock_ops = {
2045 .twsk_obj_size = sizeof(struct tcp6_timewait_sock),
2046 .twsk_destructor = tcp_twsk_destructor,
2047};
2048
2049INDIRECT_CALLABLE_SCOPE void tcp_v6_send_check(struct sock *sk, struct sk_buff *skb)
2050{
2051 __tcp_v6_send_check(skb, &sk->sk_v6_rcv_saddr, &sk->sk_v6_daddr);
2052}
2053
2054const struct inet_connection_sock_af_ops ipv6_specific = {
2055 .queue_xmit = inet6_csk_xmit,
2056 .send_check = tcp_v6_send_check,
2057 .rebuild_header = inet6_sk_rebuild_header,
2058 .sk_rx_dst_set = inet6_sk_rx_dst_set,
2059 .conn_request = tcp_v6_conn_request,
2060 .syn_recv_sock = tcp_v6_syn_recv_sock,
2061 .net_header_len = sizeof(struct ipv6hdr),
2062 .setsockopt = ipv6_setsockopt,
2063 .getsockopt = ipv6_getsockopt,
2064 .addr2sockaddr = inet6_csk_addr2sockaddr,
2065 .sockaddr_len = sizeof(struct sockaddr_in6),
2066 .mtu_reduced = tcp_v6_mtu_reduced,
2067};
2068
2069#if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO)
2070static const struct tcp_sock_af_ops tcp_sock_ipv6_specific = {
2071#ifdef CONFIG_TCP_MD5SIG
2072 .md5_lookup = tcp_v6_md5_lookup,
2073 .calc_md5_hash = tcp_v6_md5_hash_skb,
2074 .md5_parse = tcp_v6_parse_md5_keys,
2075#endif
2076#ifdef CONFIG_TCP_AO
2077 .ao_lookup = tcp_v6_ao_lookup,
2078 .calc_ao_hash = tcp_v6_ao_hash_skb,
2079 .ao_parse = tcp_v6_parse_ao,
2080 .ao_calc_key_sk = tcp_v6_ao_calc_key_sk,
2081#endif
2082};
2083#endif
2084
2085/*
2086 * TCP over IPv4 via INET6 API
2087 */
2088static const struct inet_connection_sock_af_ops ipv6_mapped = {
2089 .queue_xmit = ip_queue_xmit,
2090 .send_check = tcp_v4_send_check,
2091 .rebuild_header = inet_sk_rebuild_header,
2092 .sk_rx_dst_set = inet_sk_rx_dst_set,
2093 .conn_request = tcp_v6_conn_request,
2094 .syn_recv_sock = tcp_v6_syn_recv_sock,
2095 .net_header_len = sizeof(struct iphdr),
2096 .setsockopt = ipv6_setsockopt,
2097 .getsockopt = ipv6_getsockopt,
2098 .addr2sockaddr = inet6_csk_addr2sockaddr,
2099 .sockaddr_len = sizeof(struct sockaddr_in6),
2100 .mtu_reduced = tcp_v4_mtu_reduced,
2101};
2102
2103#if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO)
2104static const struct tcp_sock_af_ops tcp_sock_ipv6_mapped_specific = {
2105#ifdef CONFIG_TCP_MD5SIG
2106 .md5_lookup = tcp_v4_md5_lookup,
2107 .calc_md5_hash = tcp_v4_md5_hash_skb,
2108 .md5_parse = tcp_v6_parse_md5_keys,
2109#endif
2110#ifdef CONFIG_TCP_AO
2111 .ao_lookup = tcp_v6_ao_lookup,
2112 .calc_ao_hash = tcp_v4_ao_hash_skb,
2113 .ao_parse = tcp_v6_parse_ao,
2114 .ao_calc_key_sk = tcp_v4_ao_calc_key_sk,
2115#endif
2116};
2117#endif
2118
2119/* NOTE: A lot of things set to zero explicitly by call to
2120 * sk_alloc() so need not be done here.
2121 */
2122static int tcp_v6_init_sock(struct sock *sk)
2123{
2124 struct inet_connection_sock *icsk = inet_csk(sk);
2125
2126 tcp_init_sock(sk);
2127
2128 icsk->icsk_af_ops = &ipv6_specific;
2129
2130#if defined(CONFIG_TCP_MD5SIG) || defined(CONFIG_TCP_AO)
2131 tcp_sk(sk)->af_specific = &tcp_sock_ipv6_specific;
2132#endif
2133
2134 return 0;
2135}
2136
2137#ifdef CONFIG_PROC_FS
2138/* Proc filesystem TCPv6 sock list dumping. */
2139static void get_openreq6(struct seq_file *seq,
2140 const struct request_sock *req, int i)
2141{
2142 long ttd = req->rsk_timer.expires - jiffies;
2143 const struct in6_addr *src = &inet_rsk(req)->ir_v6_loc_addr;
2144 const struct in6_addr *dest = &inet_rsk(req)->ir_v6_rmt_addr;
2145
2146 if (ttd < 0)
2147 ttd = 0;
2148
2149 seq_printf(seq,
2150 "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
2151 "%02X %08X:%08X %02X:%08lX %08X %5u %8d %d %d %pK\n",
2152 i,
2153 src->s6_addr32[0], src->s6_addr32[1],
2154 src->s6_addr32[2], src->s6_addr32[3],
2155 inet_rsk(req)->ir_num,
2156 dest->s6_addr32[0], dest->s6_addr32[1],
2157 dest->s6_addr32[2], dest->s6_addr32[3],
2158 ntohs(inet_rsk(req)->ir_rmt_port),
2159 TCP_SYN_RECV,
2160 0, 0, /* could print option size, but that is af dependent. */
2161 1, /* timers active (only the expire timer) */
2162 jiffies_to_clock_t(ttd),
2163 req->num_timeout,
2164 from_kuid_munged(seq_user_ns(seq),
2165 sock_i_uid(req->rsk_listener)),
2166 0, /* non standard timer */
2167 0, /* open_requests have no inode */
2168 0, req);
2169}
2170
2171static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i)
2172{
2173 const struct in6_addr *dest, *src;
2174 __u16 destp, srcp;
2175 int timer_active;
2176 unsigned long timer_expires;
2177 const struct inet_sock *inet = inet_sk(sp);
2178 const struct tcp_sock *tp = tcp_sk(sp);
2179 const struct inet_connection_sock *icsk = inet_csk(sp);
2180 const struct fastopen_queue *fastopenq = &icsk->icsk_accept_queue.fastopenq;
2181 u8 icsk_pending;
2182 int rx_queue;
2183 int state;
2184
2185 dest = &sp->sk_v6_daddr;
2186 src = &sp->sk_v6_rcv_saddr;
2187 destp = ntohs(inet->inet_dport);
2188 srcp = ntohs(inet->inet_sport);
2189
2190 icsk_pending = smp_load_acquire(&icsk->icsk_pending);
2191 if (icsk_pending == ICSK_TIME_RETRANS ||
2192 icsk_pending == ICSK_TIME_REO_TIMEOUT ||
2193 icsk_pending == ICSK_TIME_LOSS_PROBE) {
2194 timer_active = 1;
2195 timer_expires = icsk->icsk_timeout;
2196 } else if (icsk_pending == ICSK_TIME_PROBE0) {
2197 timer_active = 4;
2198 timer_expires = icsk->icsk_timeout;
2199 } else if (timer_pending(&sp->sk_timer)) {
2200 timer_active = 2;
2201 timer_expires = sp->sk_timer.expires;
2202 } else {
2203 timer_active = 0;
2204 timer_expires = jiffies;
2205 }
2206
2207 state = inet_sk_state_load(sp);
2208 if (state == TCP_LISTEN)
2209 rx_queue = READ_ONCE(sp->sk_ack_backlog);
2210 else
2211 /* Because we don't lock the socket,
2212 * we might find a transient negative value.
2213 */
2214 rx_queue = max_t(int, READ_ONCE(tp->rcv_nxt) -
2215 READ_ONCE(tp->copied_seq), 0);
2216
2217 seq_printf(seq,
2218 "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
2219 "%02X %08X:%08X %02X:%08lX %08X %5u %8d %lu %d %pK %lu %lu %u %u %d\n",
2220 i,
2221 src->s6_addr32[0], src->s6_addr32[1],
2222 src->s6_addr32[2], src->s6_addr32[3], srcp,
2223 dest->s6_addr32[0], dest->s6_addr32[1],
2224 dest->s6_addr32[2], dest->s6_addr32[3], destp,
2225 state,
2226 READ_ONCE(tp->write_seq) - tp->snd_una,
2227 rx_queue,
2228 timer_active,
2229 jiffies_delta_to_clock_t(timer_expires - jiffies),
2230 icsk->icsk_retransmits,
2231 from_kuid_munged(seq_user_ns(seq), sock_i_uid(sp)),
2232 icsk->icsk_probes_out,
2233 sock_i_ino(sp),
2234 refcount_read(&sp->sk_refcnt), sp,
2235 jiffies_to_clock_t(icsk->icsk_rto),
2236 jiffies_to_clock_t(icsk->icsk_ack.ato),
2237 (icsk->icsk_ack.quick << 1) | inet_csk_in_pingpong_mode(sp),
2238 tcp_snd_cwnd(tp),
2239 state == TCP_LISTEN ?
2240 fastopenq->max_qlen :
2241 (tcp_in_initial_slowstart(tp) ? -1 : tp->snd_ssthresh)
2242 );
2243}
2244
2245static void get_timewait6_sock(struct seq_file *seq,
2246 struct inet_timewait_sock *tw, int i)
2247{
2248 long delta = tw->tw_timer.expires - jiffies;
2249 const struct in6_addr *dest, *src;
2250 __u16 destp, srcp;
2251
2252 dest = &tw->tw_v6_daddr;
2253 src = &tw->tw_v6_rcv_saddr;
2254 destp = ntohs(tw->tw_dport);
2255 srcp = ntohs(tw->tw_sport);
2256
2257 seq_printf(seq,
2258 "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
2259 "%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %pK\n",
2260 i,
2261 src->s6_addr32[0], src->s6_addr32[1],
2262 src->s6_addr32[2], src->s6_addr32[3], srcp,
2263 dest->s6_addr32[0], dest->s6_addr32[1],
2264 dest->s6_addr32[2], dest->s6_addr32[3], destp,
2265 READ_ONCE(tw->tw_substate), 0, 0,
2266 3, jiffies_delta_to_clock_t(delta), 0, 0, 0, 0,
2267 refcount_read(&tw->tw_refcnt), tw);
2268}
2269
2270static int tcp6_seq_show(struct seq_file *seq, void *v)
2271{
2272 struct tcp_iter_state *st;
2273 struct sock *sk = v;
2274
2275 if (v == SEQ_START_TOKEN) {
2276 seq_puts(seq,
2277 " sl "
2278 "local_address "
2279 "remote_address "
2280 "st tx_queue rx_queue tr tm->when retrnsmt"
2281 " uid timeout inode\n");
2282 goto out;
2283 }
2284 st = seq->private;
2285
2286 if (sk->sk_state == TCP_TIME_WAIT)
2287 get_timewait6_sock(seq, v, st->num);
2288 else if (sk->sk_state == TCP_NEW_SYN_RECV)
2289 get_openreq6(seq, v, st->num);
2290 else
2291 get_tcp6_sock(seq, v, st->num);
2292out:
2293 return 0;
2294}
2295
2296static const struct seq_operations tcp6_seq_ops = {
2297 .show = tcp6_seq_show,
2298 .start = tcp_seq_start,
2299 .next = tcp_seq_next,
2300 .stop = tcp_seq_stop,
2301};
2302
2303static struct tcp_seq_afinfo tcp6_seq_afinfo = {
2304 .family = AF_INET6,
2305};
2306
2307int __net_init tcp6_proc_init(struct net *net)
2308{
2309 if (!proc_create_net_data("tcp6", 0444, net->proc_net, &tcp6_seq_ops,
2310 sizeof(struct tcp_iter_state), &tcp6_seq_afinfo))
2311 return -ENOMEM;
2312 return 0;
2313}
2314
2315void tcp6_proc_exit(struct net *net)
2316{
2317 remove_proc_entry("tcp6", net->proc_net);
2318}
2319#endif
2320
2321struct proto tcpv6_prot = {
2322 .name = "TCPv6",
2323 .owner = THIS_MODULE,
2324 .close = tcp_close,
2325 .pre_connect = tcp_v6_pre_connect,
2326 .connect = tcp_v6_connect,
2327 .disconnect = tcp_disconnect,
2328 .accept = inet_csk_accept,
2329 .ioctl = tcp_ioctl,
2330 .init = tcp_v6_init_sock,
2331 .destroy = tcp_v4_destroy_sock,
2332 .shutdown = tcp_shutdown,
2333 .setsockopt = tcp_setsockopt,
2334 .getsockopt = tcp_getsockopt,
2335 .bpf_bypass_getsockopt = tcp_bpf_bypass_getsockopt,
2336 .keepalive = tcp_set_keepalive,
2337 .recvmsg = tcp_recvmsg,
2338 .sendmsg = tcp_sendmsg,
2339 .splice_eof = tcp_splice_eof,
2340 .backlog_rcv = tcp_v6_do_rcv,
2341 .release_cb = tcp_release_cb,
2342 .hash = inet6_hash,
2343 .unhash = inet_unhash,
2344 .get_port = inet_csk_get_port,
2345 .put_port = inet_put_port,
2346#ifdef CONFIG_BPF_SYSCALL
2347 .psock_update_sk_prot = tcp_bpf_update_proto,
2348#endif
2349 .enter_memory_pressure = tcp_enter_memory_pressure,
2350 .leave_memory_pressure = tcp_leave_memory_pressure,
2351 .stream_memory_free = tcp_stream_memory_free,
2352 .sockets_allocated = &tcp_sockets_allocated,
2353
2354 .memory_allocated = &tcp_memory_allocated,
2355 .per_cpu_fw_alloc = &tcp_memory_per_cpu_fw_alloc,
2356
2357 .memory_pressure = &tcp_memory_pressure,
2358 .orphan_count = &tcp_orphan_count,
2359 .sysctl_mem = sysctl_tcp_mem,
2360 .sysctl_wmem_offset = offsetof(struct net, ipv4.sysctl_tcp_wmem),
2361 .sysctl_rmem_offset = offsetof(struct net, ipv4.sysctl_tcp_rmem),
2362 .max_header = MAX_TCP_HEADER,
2363 .obj_size = sizeof(struct tcp6_sock),
2364 .ipv6_pinfo_offset = offsetof(struct tcp6_sock, inet6),
2365 .slab_flags = SLAB_TYPESAFE_BY_RCU,
2366 .twsk_prot = &tcp6_timewait_sock_ops,
2367 .rsk_prot = &tcp6_request_sock_ops,
2368 .h.hashinfo = NULL,
2369 .no_autobind = true,
2370 .diag_destroy = tcp_abort,
2371};
2372EXPORT_SYMBOL_GPL(tcpv6_prot);
2373
2374
2375static struct inet_protosw tcpv6_protosw = {
2376 .type = SOCK_STREAM,
2377 .protocol = IPPROTO_TCP,
2378 .prot = &tcpv6_prot,
2379 .ops = &inet6_stream_ops,
2380 .flags = INET_PROTOSW_PERMANENT |
2381 INET_PROTOSW_ICSK,
2382};
2383
2384static int __net_init tcpv6_net_init(struct net *net)
2385{
2386 int res;
2387
2388 res = inet_ctl_sock_create(&net->ipv6.tcp_sk, PF_INET6,
2389 SOCK_RAW, IPPROTO_TCP, net);
2390 if (!res)
2391 net->ipv6.tcp_sk->sk_clockid = CLOCK_MONOTONIC;
2392
2393 return res;
2394}
2395
2396static void __net_exit tcpv6_net_exit(struct net *net)
2397{
2398 inet_ctl_sock_destroy(net->ipv6.tcp_sk);
2399}
2400
2401static struct pernet_operations tcpv6_net_ops = {
2402 .init = tcpv6_net_init,
2403 .exit = tcpv6_net_exit,
2404};
2405
2406int __init tcpv6_init(void)
2407{
2408 int ret;
2409
2410 net_hotdata.tcpv6_protocol = (struct inet6_protocol) {
2411 .handler = tcp_v6_rcv,
2412 .err_handler = tcp_v6_err,
2413 .flags = INET6_PROTO_NOPOLICY | INET6_PROTO_FINAL,
2414 };
2415 ret = inet6_add_protocol(&net_hotdata.tcpv6_protocol, IPPROTO_TCP);
2416 if (ret)
2417 goto out;
2418
2419 /* register inet6 protocol */
2420 ret = inet6_register_protosw(&tcpv6_protosw);
2421 if (ret)
2422 goto out_tcpv6_protocol;
2423
2424 ret = register_pernet_subsys(&tcpv6_net_ops);
2425 if (ret)
2426 goto out_tcpv6_protosw;
2427
2428 ret = mptcpv6_init();
2429 if (ret)
2430 goto out_tcpv6_pernet_subsys;
2431
2432out:
2433 return ret;
2434
2435out_tcpv6_pernet_subsys:
2436 unregister_pernet_subsys(&tcpv6_net_ops);
2437out_tcpv6_protosw:
2438 inet6_unregister_protosw(&tcpv6_protosw);
2439out_tcpv6_protocol:
2440 inet6_del_protocol(&net_hotdata.tcpv6_protocol, IPPROTO_TCP);
2441 goto out;
2442}
2443
2444void tcpv6_exit(void)
2445{
2446 unregister_pernet_subsys(&tcpv6_net_ops);
2447 inet6_unregister_protosw(&tcpv6_protosw);
2448 inet6_del_protocol(&net_hotdata.tcpv6_protocol, IPPROTO_TCP);
2449}