tpm: eventlog: Replace zero-length array with flexible-array member
[linux.git] / net / ipv4 / tcp_ipv4.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * INET         An implementation of the TCP/IP protocol suite for the LINUX
4  *              operating system.  INET is implemented using the  BSD Socket
5  *              interface as the means of communication with the user level.
6  *
7  *              Implementation of the Transmission Control Protocol(TCP).
8  *
9  *              IPv4 specific functions
10  *
11  *              code split from:
12  *              linux/ipv4/tcp.c
13  *              linux/ipv4/tcp_input.c
14  *              linux/ipv4/tcp_output.c
15  *
16  *              See tcp.c for author information
17  */
18
19 /*
20  * Changes:
21  *              David S. Miller :       New socket lookup architecture.
22  *                                      This code is dedicated to John Dyson.
23  *              David S. Miller :       Change semantics of established hash,
24  *                                      half is devoted to TIME_WAIT sockets
25  *                                      and the rest go in the other half.
26  *              Andi Kleen :            Add support for syncookies and fixed
27  *                                      some bugs: ip options weren't passed to
28  *                                      the TCP layer, missed a check for an
29  *                                      ACK bit.
30  *              Andi Kleen :            Implemented fast path mtu discovery.
31  *                                      Fixed many serious bugs in the
32  *                                      request_sock handling and moved
33  *                                      most of it into the af independent code.
34  *                                      Added tail drop and some other bugfixes.
35  *                                      Added new listen semantics.
36  *              Mike McLagan    :       Routing by source
37  *      Juan Jose Ciarlante:            ip_dynaddr bits
38  *              Andi Kleen:             various fixes.
39  *      Vitaly E. Lavrov        :       Transparent proxy revived after year
40  *                                      coma.
41  *      Andi Kleen              :       Fix new listen.
42  *      Andi Kleen              :       Fix accept error reporting.
43  *      YOSHIFUJI Hideaki @USAGI and:   Support IPV6_V6ONLY socket option, which
44  *      Alexey Kuznetsov                allow both IPv4 and IPv6 sockets to bind
45  *                                      a single port at the same time.
46  */
47
48 #define pr_fmt(fmt) "TCP: " fmt
49
50 #include <linux/bottom_half.h>
51 #include <linux/types.h>
52 #include <linux/fcntl.h>
53 #include <linux/module.h>
54 #include <linux/random.h>
55 #include <linux/cache.h>
56 #include <linux/jhash.h>
57 #include <linux/init.h>
58 #include <linux/times.h>
59 #include <linux/slab.h>
60
61 #include <net/net_namespace.h>
62 #include <net/icmp.h>
63 #include <net/inet_hashtables.h>
64 #include <net/tcp.h>
65 #include <net/transp_v6.h>
66 #include <net/ipv6.h>
67 #include <net/inet_common.h>
68 #include <net/timewait_sock.h>
69 #include <net/xfrm.h>
70 #include <net/secure_seq.h>
71 #include <net/busy_poll.h>
72
73 #include <linux/inet.h>
74 #include <linux/ipv6.h>
75 #include <linux/stddef.h>
76 #include <linux/proc_fs.h>
77 #include <linux/seq_file.h>
78 #include <linux/inetdevice.h>
79
80 #include <crypto/hash.h>
81 #include <linux/scatterlist.h>
82
83 #include <trace/events/tcp.h>
84
85 #ifdef CONFIG_TCP_MD5SIG
86 static int tcp_v4_md5_hash_hdr(char *md5_hash, const struct tcp_md5sig_key *key,
87                                __be32 daddr, __be32 saddr, const struct tcphdr *th);
88 #endif
89
90 struct inet_hashinfo tcp_hashinfo;
91 EXPORT_SYMBOL(tcp_hashinfo);
92
93 static u32 tcp_v4_init_seq(const struct sk_buff *skb)
94 {
95         return secure_tcp_seq(ip_hdr(skb)->daddr,
96                               ip_hdr(skb)->saddr,
97                               tcp_hdr(skb)->dest,
98                               tcp_hdr(skb)->source);
99 }
100
101 static u32 tcp_v4_init_ts_off(const struct net *net, const struct sk_buff *skb)
102 {
103         return secure_tcp_ts_off(net, ip_hdr(skb)->daddr, ip_hdr(skb)->saddr);
104 }
105
106 int tcp_twsk_unique(struct sock *sk, struct sock *sktw, void *twp)
107 {
108         const struct inet_timewait_sock *tw = inet_twsk(sktw);
109         const struct tcp_timewait_sock *tcptw = tcp_twsk(sktw);
110         struct tcp_sock *tp = tcp_sk(sk);
111         int reuse = sock_net(sk)->ipv4.sysctl_tcp_tw_reuse;
112
113         if (reuse == 2) {
114                 /* Still does not detect *everything* that goes through
115                  * lo, since we require a loopback src or dst address
116                  * or direct binding to 'lo' interface.
117                  */
118                 bool loopback = false;
119                 if (tw->tw_bound_dev_if == LOOPBACK_IFINDEX)
120                         loopback = true;
121 #if IS_ENABLED(CONFIG_IPV6)
122                 if (tw->tw_family == AF_INET6) {
123                         if (ipv6_addr_loopback(&tw->tw_v6_daddr) ||
124                             ipv6_addr_v4mapped_loopback(&tw->tw_v6_daddr) ||
125                             ipv6_addr_loopback(&tw->tw_v6_rcv_saddr) ||
126                             ipv6_addr_v4mapped_loopback(&tw->tw_v6_rcv_saddr))
127                                 loopback = true;
128                 } else
129 #endif
130                 {
131                         if (ipv4_is_loopback(tw->tw_daddr) ||
132                             ipv4_is_loopback(tw->tw_rcv_saddr))
133                                 loopback = true;
134                 }
135                 if (!loopback)
136                         reuse = 0;
137         }
138
139         /* With PAWS, it is safe from the viewpoint
140            of data integrity. Even without PAWS it is safe provided sequence
141            spaces do not overlap i.e. at data rates <= 80Mbit/sec.
142
143            Actually, the idea is close to VJ's one, only timestamp cache is
144            held not per host, but per port pair and TW bucket is used as state
145            holder.
146
147            If TW bucket has been already destroyed we fall back to VJ's scheme
148            and use initial timestamp retrieved from peer table.
149          */
150         if (tcptw->tw_ts_recent_stamp &&
151             (!twp || (reuse && time_after32(ktime_get_seconds(),
152                                             tcptw->tw_ts_recent_stamp)))) {
153                 /* In case of repair and re-using TIME-WAIT sockets we still
154                  * want to be sure that it is safe as above but honor the
155                  * sequence numbers and time stamps set as part of the repair
156                  * process.
157                  *
158                  * Without this check re-using a TIME-WAIT socket with TCP
159                  * repair would accumulate a -1 on the repair assigned
160                  * sequence number. The first time it is reused the sequence
161                  * is -1, the second time -2, etc. This fixes that issue
162                  * without appearing to create any others.
163                  */
164                 if (likely(!tp->repair)) {
165                         u32 seq = tcptw->tw_snd_nxt + 65535 + 2;
166
167                         if (!seq)
168                                 seq = 1;
169                         WRITE_ONCE(tp->write_seq, seq);
170                         tp->rx_opt.ts_recent       = tcptw->tw_ts_recent;
171                         tp->rx_opt.ts_recent_stamp = tcptw->tw_ts_recent_stamp;
172                 }
173                 sock_hold(sktw);
174                 return 1;
175         }
176
177         return 0;
178 }
179 EXPORT_SYMBOL_GPL(tcp_twsk_unique);
180
181 static int tcp_v4_pre_connect(struct sock *sk, struct sockaddr *uaddr,
182                               int addr_len)
183 {
184         /* This check is replicated from tcp_v4_connect() and intended to
185          * prevent BPF program called below from accessing bytes that are out
186          * of the bound specified by user in addr_len.
187          */
188         if (addr_len < sizeof(struct sockaddr_in))
189                 return -EINVAL;
190
191         sock_owned_by_me(sk);
192
193         return BPF_CGROUP_RUN_PROG_INET4_CONNECT(sk, uaddr);
194 }
195
196 /* This will initiate an outgoing connection. */
197 int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
198 {
199         struct sockaddr_in *usin = (struct sockaddr_in *)uaddr;
200         struct inet_sock *inet = inet_sk(sk);
201         struct tcp_sock *tp = tcp_sk(sk);
202         __be16 orig_sport, orig_dport;
203         __be32 daddr, nexthop;
204         struct flowi4 *fl4;
205         struct rtable *rt;
206         int err;
207         struct ip_options_rcu *inet_opt;
208         struct inet_timewait_death_row *tcp_death_row = &sock_net(sk)->ipv4.tcp_death_row;
209
210         if (addr_len < sizeof(struct sockaddr_in))
211                 return -EINVAL;
212
213         if (usin->sin_family != AF_INET)
214                 return -EAFNOSUPPORT;
215
216         nexthop = daddr = usin->sin_addr.s_addr;
217         inet_opt = rcu_dereference_protected(inet->inet_opt,
218                                              lockdep_sock_is_held(sk));
219         if (inet_opt && inet_opt->opt.srr) {
220                 if (!daddr)
221                         return -EINVAL;
222                 nexthop = inet_opt->opt.faddr;
223         }
224
225         orig_sport = inet->inet_sport;
226         orig_dport = usin->sin_port;
227         fl4 = &inet->cork.fl.u.ip4;
228         rt = ip_route_connect(fl4, nexthop, inet->inet_saddr,
229                               RT_CONN_FLAGS(sk), sk->sk_bound_dev_if,
230                               IPPROTO_TCP,
231                               orig_sport, orig_dport, sk);
232         if (IS_ERR(rt)) {
233                 err = PTR_ERR(rt);
234                 if (err == -ENETUNREACH)
235                         IP_INC_STATS(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
236                 return err;
237         }
238
239         if (rt->rt_flags & (RTCF_MULTICAST | RTCF_BROADCAST)) {
240                 ip_rt_put(rt);
241                 return -ENETUNREACH;
242         }
243
244         if (!inet_opt || !inet_opt->opt.srr)
245                 daddr = fl4->daddr;
246
247         if (!inet->inet_saddr)
248                 inet->inet_saddr = fl4->saddr;
249         sk_rcv_saddr_set(sk, inet->inet_saddr);
250
251         if (tp->rx_opt.ts_recent_stamp && inet->inet_daddr != daddr) {
252                 /* Reset inherited state */
253                 tp->rx_opt.ts_recent       = 0;
254                 tp->rx_opt.ts_recent_stamp = 0;
255                 if (likely(!tp->repair))
256                         WRITE_ONCE(tp->write_seq, 0);
257         }
258
259         inet->inet_dport = usin->sin_port;
260         sk_daddr_set(sk, daddr);
261
262         inet_csk(sk)->icsk_ext_hdr_len = 0;
263         if (inet_opt)
264                 inet_csk(sk)->icsk_ext_hdr_len = inet_opt->opt.optlen;
265
266         tp->rx_opt.mss_clamp = TCP_MSS_DEFAULT;
267
268         /* Socket identity is still unknown (sport may be zero).
269          * However we set state to SYN-SENT and not releasing socket
270          * lock select source port, enter ourselves into the hash tables and
271          * complete initialization after this.
272          */
273         tcp_set_state(sk, TCP_SYN_SENT);
274         err = inet_hash_connect(tcp_death_row, sk);
275         if (err)
276                 goto failure;
277
278         sk_set_txhash(sk);
279
280         rt = ip_route_newports(fl4, rt, orig_sport, orig_dport,
281                                inet->inet_sport, inet->inet_dport, sk);
282         if (IS_ERR(rt)) {
283                 err = PTR_ERR(rt);
284                 rt = NULL;
285                 goto failure;
286         }
287         /* OK, now commit destination to socket.  */
288         sk->sk_gso_type = SKB_GSO_TCPV4;
289         sk_setup_caps(sk, &rt->dst);
290         rt = NULL;
291
292         if (likely(!tp->repair)) {
293                 if (!tp->write_seq)
294                         WRITE_ONCE(tp->write_seq,
295                                    secure_tcp_seq(inet->inet_saddr,
296                                                   inet->inet_daddr,
297                                                   inet->inet_sport,
298                                                   usin->sin_port));
299                 tp->tsoffset = secure_tcp_ts_off(sock_net(sk),
300                                                  inet->inet_saddr,
301                                                  inet->inet_daddr);
302         }
303
304         inet->inet_id = prandom_u32();
305
306         if (tcp_fastopen_defer_connect(sk, &err))
307                 return err;
308         if (err)
309                 goto failure;
310
311         err = tcp_connect(sk);
312
313         if (err)
314                 goto failure;
315
316         return 0;
317
318 failure:
319         /*
320          * This unhashes the socket and releases the local port,
321          * if necessary.
322          */
323         tcp_set_state(sk, TCP_CLOSE);
324         ip_rt_put(rt);
325         sk->sk_route_caps = 0;
326         inet->inet_dport = 0;
327         return err;
328 }
329 EXPORT_SYMBOL(tcp_v4_connect);
330
331 /*
332  * This routine reacts to ICMP_FRAG_NEEDED mtu indications as defined in RFC1191.
333  * It can be called through tcp_release_cb() if socket was owned by user
334  * at the time tcp_v4_err() was called to handle ICMP message.
335  */
336 void tcp_v4_mtu_reduced(struct sock *sk)
337 {
338         struct inet_sock *inet = inet_sk(sk);
339         struct dst_entry *dst;
340         u32 mtu;
341
342         if ((1 << sk->sk_state) & (TCPF_LISTEN | TCPF_CLOSE))
343                 return;
344         mtu = tcp_sk(sk)->mtu_info;
345         dst = inet_csk_update_pmtu(sk, mtu);
346         if (!dst)
347                 return;
348
349         /* Something is about to be wrong... Remember soft error
350          * for the case, if this connection will not able to recover.
351          */
352         if (mtu < dst_mtu(dst) && ip_dont_fragment(sk, dst))
353                 sk->sk_err_soft = EMSGSIZE;
354
355         mtu = dst_mtu(dst);
356
357         if (inet->pmtudisc != IP_PMTUDISC_DONT &&
358             ip_sk_accept_pmtu(sk) &&
359             inet_csk(sk)->icsk_pmtu_cookie > mtu) {
360                 tcp_sync_mss(sk, mtu);
361
362                 /* Resend the TCP packet because it's
363                  * clear that the old packet has been
364                  * dropped. This is the new "fast" path mtu
365                  * discovery.
366                  */
367                 tcp_simple_retransmit(sk);
368         } /* else let the usual retransmit timer handle it */
369 }
370 EXPORT_SYMBOL(tcp_v4_mtu_reduced);
371
372 static void do_redirect(struct sk_buff *skb, struct sock *sk)
373 {
374         struct dst_entry *dst = __sk_dst_check(sk, 0);
375
376         if (dst)
377                 dst->ops->redirect(dst, sk, skb);
378 }
379
380
381 /* handle ICMP messages on TCP_NEW_SYN_RECV request sockets */
382 void tcp_req_err(struct sock *sk, u32 seq, bool abort)
383 {
384         struct request_sock *req = inet_reqsk(sk);
385         struct net *net = sock_net(sk);
386
387         /* ICMPs are not backlogged, hence we cannot get
388          * an established socket here.
389          */
390         if (seq != tcp_rsk(req)->snt_isn) {
391                 __NET_INC_STATS(net, LINUX_MIB_OUTOFWINDOWICMPS);
392         } else if (abort) {
393                 /*
394                  * Still in SYN_RECV, just remove it silently.
395                  * There is no good way to pass the error to the newly
396                  * created socket, and POSIX does not want network
397                  * errors returned from accept().
398                  */
399                 inet_csk_reqsk_queue_drop(req->rsk_listener, req);
400                 tcp_listendrop(req->rsk_listener);
401         }
402         reqsk_put(req);
403 }
404 EXPORT_SYMBOL(tcp_req_err);
405
406 /*
407  * This routine is called by the ICMP module when it gets some
408  * sort of error condition.  If err < 0 then the socket should
409  * be closed and the error returned to the user.  If err > 0
410  * it's just the icmp type << 8 | icmp code.  After adjustment
411  * header points to the first 8 bytes of the tcp header.  We need
412  * to find the appropriate port.
413  *
414  * The locking strategy used here is very "optimistic". When
415  * someone else accesses the socket the ICMP is just dropped
416  * and for some paths there is no check at all.
417  * A more general error queue to queue errors for later handling
418  * is probably better.
419  *
420  */
421
422 int tcp_v4_err(struct sk_buff *icmp_skb, u32 info)
423 {
424         const struct iphdr *iph = (const struct iphdr *)icmp_skb->data;
425         struct tcphdr *th = (struct tcphdr *)(icmp_skb->data + (iph->ihl << 2));
426         struct inet_connection_sock *icsk;
427         struct tcp_sock *tp;
428         struct inet_sock *inet;
429         const int type = icmp_hdr(icmp_skb)->type;
430         const int code = icmp_hdr(icmp_skb)->code;
431         struct sock *sk;
432         struct sk_buff *skb;
433         struct request_sock *fastopen;
434         u32 seq, snd_una;
435         s32 remaining;
436         u32 delta_us;
437         int err;
438         struct net *net = dev_net(icmp_skb->dev);
439
440         sk = __inet_lookup_established(net, &tcp_hashinfo, iph->daddr,
441                                        th->dest, iph->saddr, ntohs(th->source),
442                                        inet_iif(icmp_skb), 0);
443         if (!sk) {
444                 __ICMP_INC_STATS(net, ICMP_MIB_INERRORS);
445                 return -ENOENT;
446         }
447         if (sk->sk_state == TCP_TIME_WAIT) {
448                 inet_twsk_put(inet_twsk(sk));
449                 return 0;
450         }
451         seq = ntohl(th->seq);
452         if (sk->sk_state == TCP_NEW_SYN_RECV) {
453                 tcp_req_err(sk, seq, type == ICMP_PARAMETERPROB ||
454                                      type == ICMP_TIME_EXCEEDED ||
455                                      (type == ICMP_DEST_UNREACH &&
456                                       (code == ICMP_NET_UNREACH ||
457                                        code == ICMP_HOST_UNREACH)));
458                 return 0;
459         }
460
461         bh_lock_sock(sk);
462         /* If too many ICMPs get dropped on busy
463          * servers this needs to be solved differently.
464          * We do take care of PMTU discovery (RFC1191) special case :
465          * we can receive locally generated ICMP messages while socket is held.
466          */
467         if (sock_owned_by_user(sk)) {
468                 if (!(type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED))
469                         __NET_INC_STATS(net, LINUX_MIB_LOCKDROPPEDICMPS);
470         }
471         if (sk->sk_state == TCP_CLOSE)
472                 goto out;
473
474         if (unlikely(iph->ttl < inet_sk(sk)->min_ttl)) {
475                 __NET_INC_STATS(net, LINUX_MIB_TCPMINTTLDROP);
476                 goto out;
477         }
478
479         icsk = inet_csk(sk);
480         tp = tcp_sk(sk);
481         /* XXX (TFO) - tp->snd_una should be ISN (tcp_create_openreq_child() */
482         fastopen = rcu_dereference(tp->fastopen_rsk);
483         snd_una = fastopen ? tcp_rsk(fastopen)->snt_isn : tp->snd_una;
484         if (sk->sk_state != TCP_LISTEN &&
485             !between(seq, snd_una, tp->snd_nxt)) {
486                 __NET_INC_STATS(net, LINUX_MIB_OUTOFWINDOWICMPS);
487                 goto out;
488         }
489
490         switch (type) {
491         case ICMP_REDIRECT:
492                 if (!sock_owned_by_user(sk))
493                         do_redirect(icmp_skb, sk);
494                 goto out;
495         case ICMP_SOURCE_QUENCH:
496                 /* Just silently ignore these. */
497                 goto out;
498         case ICMP_PARAMETERPROB:
499                 err = EPROTO;
500                 break;
501         case ICMP_DEST_UNREACH:
502                 if (code > NR_ICMP_UNREACH)
503                         goto out;
504
505                 if (code == ICMP_FRAG_NEEDED) { /* PMTU discovery (RFC1191) */
506                         /* We are not interested in TCP_LISTEN and open_requests
507                          * (SYN-ACKs send out by Linux are always <576bytes so
508                          * they should go through unfragmented).
509                          */
510                         if (sk->sk_state == TCP_LISTEN)
511                                 goto out;
512
513                         tp->mtu_info = info;
514                         if (!sock_owned_by_user(sk)) {
515                                 tcp_v4_mtu_reduced(sk);
516                         } else {
517                                 if (!test_and_set_bit(TCP_MTU_REDUCED_DEFERRED, &sk->sk_tsq_flags))
518                                         sock_hold(sk);
519                         }
520                         goto out;
521                 }
522
523                 err = icmp_err_convert[code].errno;
524                 /* check if icmp_skb allows revert of backoff
525                  * (see draft-zimmermann-tcp-lcd) */
526                 if (code != ICMP_NET_UNREACH && code != ICMP_HOST_UNREACH)
527                         break;
528                 if (seq != tp->snd_una  || !icsk->icsk_retransmits ||
529                     !icsk->icsk_backoff || fastopen)
530                         break;
531
532                 if (sock_owned_by_user(sk))
533                         break;
534
535                 skb = tcp_rtx_queue_head(sk);
536                 if (WARN_ON_ONCE(!skb))
537                         break;
538
539                 icsk->icsk_backoff--;
540                 icsk->icsk_rto = tp->srtt_us ? __tcp_set_rto(tp) :
541                                                TCP_TIMEOUT_INIT;
542                 icsk->icsk_rto = inet_csk_rto_backoff(icsk, TCP_RTO_MAX);
543
544
545                 tcp_mstamp_refresh(tp);
546                 delta_us = (u32)(tp->tcp_mstamp - tcp_skb_timestamp_us(skb));
547                 remaining = icsk->icsk_rto -
548                             usecs_to_jiffies(delta_us);
549
550                 if (remaining > 0) {
551                         inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,
552                                                   remaining, TCP_RTO_MAX);
553                 } else {
554                         /* RTO revert clocked out retransmission.
555                          * Will retransmit now */
556                         tcp_retransmit_timer(sk);
557                 }
558
559                 break;
560         case ICMP_TIME_EXCEEDED:
561                 err = EHOSTUNREACH;
562                 break;
563         default:
564                 goto out;
565         }
566
567         switch (sk->sk_state) {
568         case TCP_SYN_SENT:
569         case TCP_SYN_RECV:
570                 /* Only in fast or simultaneous open. If a fast open socket is
571                  * is already accepted it is treated as a connected one below.
572                  */
573                 if (fastopen && !fastopen->sk)
574                         break;
575
576                 if (!sock_owned_by_user(sk)) {
577                         sk->sk_err = err;
578
579                         sk->sk_error_report(sk);
580
581                         tcp_done(sk);
582                 } else {
583                         sk->sk_err_soft = err;
584                 }
585                 goto out;
586         }
587
588         /* If we've already connected we will keep trying
589          * until we time out, or the user gives up.
590          *
591          * rfc1122 4.2.3.9 allows to consider as hard errors
592          * only PROTO_UNREACH and PORT_UNREACH (well, FRAG_FAILED too,
593          * but it is obsoleted by pmtu discovery).
594          *
595          * Note, that in modern internet, where routing is unreliable
596          * and in each dark corner broken firewalls sit, sending random
597          * errors ordered by their masters even this two messages finally lose
598          * their original sense (even Linux sends invalid PORT_UNREACHs)
599          *
600          * Now we are in compliance with RFCs.
601          *                                                      --ANK (980905)
602          */
603
604         inet = inet_sk(sk);
605         if (!sock_owned_by_user(sk) && inet->recverr) {
606                 sk->sk_err = err;
607                 sk->sk_error_report(sk);
608         } else  { /* Only an error on timeout */
609                 sk->sk_err_soft = err;
610         }
611
612 out:
613         bh_unlock_sock(sk);
614         sock_put(sk);
615         return 0;
616 }
617
618 void __tcp_v4_send_check(struct sk_buff *skb, __be32 saddr, __be32 daddr)
619 {
620         struct tcphdr *th = tcp_hdr(skb);
621
622         th->check = ~tcp_v4_check(skb->len, saddr, daddr, 0);
623         skb->csum_start = skb_transport_header(skb) - skb->head;
624         skb->csum_offset = offsetof(struct tcphdr, check);
625 }
626
627 /* This routine computes an IPv4 TCP checksum. */
628 void tcp_v4_send_check(struct sock *sk, struct sk_buff *skb)
629 {
630         const struct inet_sock *inet = inet_sk(sk);
631
632         __tcp_v4_send_check(skb, inet->inet_saddr, inet->inet_daddr);
633 }
634 EXPORT_SYMBOL(tcp_v4_send_check);
635
636 /*
637  *      This routine will send an RST to the other tcp.
638  *
639  *      Someone asks: why I NEVER use socket parameters (TOS, TTL etc.)
640  *                    for reset.
641  *      Answer: if a packet caused RST, it is not for a socket
642  *              existing in our system, if it is matched to a socket,
643  *              it is just duplicate segment or bug in other side's TCP.
644  *              So that we build reply only basing on parameters
645  *              arrived with segment.
646  *      Exception: precedence violation. We do not implement it in any case.
647  */
648
649 static void tcp_v4_send_reset(const struct sock *sk, struct sk_buff *skb)
650 {
651         const struct tcphdr *th = tcp_hdr(skb);
652         struct {
653                 struct tcphdr th;
654 #ifdef CONFIG_TCP_MD5SIG
655                 __be32 opt[(TCPOLEN_MD5SIG_ALIGNED >> 2)];
656 #endif
657         } rep;
658         struct ip_reply_arg arg;
659 #ifdef CONFIG_TCP_MD5SIG
660         struct tcp_md5sig_key *key = NULL;
661         const __u8 *hash_location = NULL;
662         unsigned char newhash[16];
663         int genhash;
664         struct sock *sk1 = NULL;
665 #endif
666         u64 transmit_time = 0;
667         struct sock *ctl_sk;
668         struct net *net;
669
670         /* Never send a reset in response to a reset. */
671         if (th->rst)
672                 return;
673
674         /* If sk not NULL, it means we did a successful lookup and incoming
675          * route had to be correct. prequeue might have dropped our dst.
676          */
677         if (!sk && skb_rtable(skb)->rt_type != RTN_LOCAL)
678                 return;
679
680         /* Swap the send and the receive. */
681         memset(&rep, 0, sizeof(rep));
682         rep.th.dest   = th->source;
683         rep.th.source = th->dest;
684         rep.th.doff   = sizeof(struct tcphdr) / 4;
685         rep.th.rst    = 1;
686
687         if (th->ack) {
688                 rep.th.seq = th->ack_seq;
689         } else {
690                 rep.th.ack = 1;
691                 rep.th.ack_seq = htonl(ntohl(th->seq) + th->syn + th->fin +
692                                        skb->len - (th->doff << 2));
693         }
694
695         memset(&arg, 0, sizeof(arg));
696         arg.iov[0].iov_base = (unsigned char *)&rep;
697         arg.iov[0].iov_len  = sizeof(rep.th);
698
699         net = sk ? sock_net(sk) : dev_net(skb_dst(skb)->dev);
700 #ifdef CONFIG_TCP_MD5SIG
701         rcu_read_lock();
702         hash_location = tcp_parse_md5sig_option(th);
703         if (sk && sk_fullsock(sk)) {
704                 const union tcp_md5_addr *addr;
705                 int l3index;
706
707                 /* sdif set, means packet ingressed via a device
708                  * in an L3 domain and inet_iif is set to it.
709                  */
710                 l3index = tcp_v4_sdif(skb) ? inet_iif(skb) : 0;
711                 addr = (union tcp_md5_addr *)&ip_hdr(skb)->saddr;
712                 key = tcp_md5_do_lookup(sk, l3index, addr, AF_INET);
713         } else if (hash_location) {
714                 const union tcp_md5_addr *addr;
715                 int sdif = tcp_v4_sdif(skb);
716                 int dif = inet_iif(skb);
717                 int l3index;
718
719                 /*
720                  * active side is lost. Try to find listening socket through
721                  * source port, and then find md5 key through listening socket.
722                  * we are not loose security here:
723                  * Incoming packet is checked with md5 hash with finding key,
724                  * no RST generated if md5 hash doesn't match.
725                  */
726                 sk1 = __inet_lookup_listener(net, &tcp_hashinfo, NULL, 0,
727                                              ip_hdr(skb)->saddr,
728                                              th->source, ip_hdr(skb)->daddr,
729                                              ntohs(th->source), dif, sdif);
730                 /* don't send rst if it can't find key */
731                 if (!sk1)
732                         goto out;
733
734                 /* sdif set, means packet ingressed via a device
735                  * in an L3 domain and dif is set to it.
736                  */
737                 l3index = sdif ? dif : 0;
738                 addr = (union tcp_md5_addr *)&ip_hdr(skb)->saddr;
739                 key = tcp_md5_do_lookup(sk1, l3index, addr, AF_INET);
740                 if (!key)
741                         goto out;
742
743
744                 genhash = tcp_v4_md5_hash_skb(newhash, key, NULL, skb);
745                 if (genhash || memcmp(hash_location, newhash, 16) != 0)
746                         goto out;
747
748         }
749
750         if (key) {
751                 rep.opt[0] = htonl((TCPOPT_NOP << 24) |
752                                    (TCPOPT_NOP << 16) |
753                                    (TCPOPT_MD5SIG << 8) |
754                                    TCPOLEN_MD5SIG);
755                 /* Update length and the length the header thinks exists */
756                 arg.iov[0].iov_len += TCPOLEN_MD5SIG_ALIGNED;
757                 rep.th.doff = arg.iov[0].iov_len / 4;
758
759                 tcp_v4_md5_hash_hdr((__u8 *) &rep.opt[1],
760                                      key, ip_hdr(skb)->saddr,
761                                      ip_hdr(skb)->daddr, &rep.th);
762         }
763 #endif
764         arg.csum = csum_tcpudp_nofold(ip_hdr(skb)->daddr,
765                                       ip_hdr(skb)->saddr, /* XXX */
766                                       arg.iov[0].iov_len, IPPROTO_TCP, 0);
767         arg.csumoffset = offsetof(struct tcphdr, check) / 2;
768         arg.flags = (sk && inet_sk_transparent(sk)) ? IP_REPLY_ARG_NOSRCCHECK : 0;
769
770         /* When socket is gone, all binding information is lost.
771          * routing might fail in this case. No choice here, if we choose to force
772          * input interface, we will misroute in case of asymmetric route.
773          */
774         if (sk) {
775                 arg.bound_dev_if = sk->sk_bound_dev_if;
776                 if (sk_fullsock(sk))
777                         trace_tcp_send_reset(sk, skb);
778         }
779
780         BUILD_BUG_ON(offsetof(struct sock, sk_bound_dev_if) !=
781                      offsetof(struct inet_timewait_sock, tw_bound_dev_if));
782
783         arg.tos = ip_hdr(skb)->tos;
784         arg.uid = sock_net_uid(net, sk && sk_fullsock(sk) ? sk : NULL);
785         local_bh_disable();
786         ctl_sk = this_cpu_read(*net->ipv4.tcp_sk);
787         if (sk) {
788                 ctl_sk->sk_mark = (sk->sk_state == TCP_TIME_WAIT) ?
789                                    inet_twsk(sk)->tw_mark : sk->sk_mark;
790                 ctl_sk->sk_priority = (sk->sk_state == TCP_TIME_WAIT) ?
791                                    inet_twsk(sk)->tw_priority : sk->sk_priority;
792                 transmit_time = tcp_transmit_time(sk);
793         }
794         ip_send_unicast_reply(ctl_sk,
795                               skb, &TCP_SKB_CB(skb)->header.h4.opt,
796                               ip_hdr(skb)->saddr, ip_hdr(skb)->daddr,
797                               &arg, arg.iov[0].iov_len,
798                               transmit_time);
799
800         ctl_sk->sk_mark = 0;
801         __TCP_INC_STATS(net, TCP_MIB_OUTSEGS);
802         __TCP_INC_STATS(net, TCP_MIB_OUTRSTS);
803         local_bh_enable();
804
805 #ifdef CONFIG_TCP_MD5SIG
806 out:
807         rcu_read_unlock();
808 #endif
809 }
810
811 /* The code following below sending ACKs in SYN-RECV and TIME-WAIT states
812    outside socket context is ugly, certainly. What can I do?
813  */
814
815 static void tcp_v4_send_ack(const struct sock *sk,
816                             struct sk_buff *skb, u32 seq, u32 ack,
817                             u32 win, u32 tsval, u32 tsecr, int oif,
818                             struct tcp_md5sig_key *key,
819                             int reply_flags, u8 tos)
820 {
821         const struct tcphdr *th = tcp_hdr(skb);
822         struct {
823                 struct tcphdr th;
824                 __be32 opt[(TCPOLEN_TSTAMP_ALIGNED >> 2)
825 #ifdef CONFIG_TCP_MD5SIG
826                            + (TCPOLEN_MD5SIG_ALIGNED >> 2)
827 #endif
828                         ];
829         } rep;
830         struct net *net = sock_net(sk);
831         struct ip_reply_arg arg;
832         struct sock *ctl_sk;
833         u64 transmit_time;
834
835         memset(&rep.th, 0, sizeof(struct tcphdr));
836         memset(&arg, 0, sizeof(arg));
837
838         arg.iov[0].iov_base = (unsigned char *)&rep;
839         arg.iov[0].iov_len  = sizeof(rep.th);
840         if (tsecr) {
841                 rep.opt[0] = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) |
842                                    (TCPOPT_TIMESTAMP << 8) |
843                                    TCPOLEN_TIMESTAMP);
844                 rep.opt[1] = htonl(tsval);
845                 rep.opt[2] = htonl(tsecr);
846                 arg.iov[0].iov_len += TCPOLEN_TSTAMP_ALIGNED;
847         }
848
849         /* Swap the send and the receive. */
850         rep.th.dest    = th->source;
851         rep.th.source  = th->dest;
852         rep.th.doff    = arg.iov[0].iov_len / 4;
853         rep.th.seq     = htonl(seq);
854         rep.th.ack_seq = htonl(ack);
855         rep.th.ack     = 1;
856         rep.th.window  = htons(win);
857
858 #ifdef CONFIG_TCP_MD5SIG
859         if (key) {
860                 int offset = (tsecr) ? 3 : 0;
861
862                 rep.opt[offset++] = htonl((TCPOPT_NOP << 24) |
863                                           (TCPOPT_NOP << 16) |
864                                           (TCPOPT_MD5SIG << 8) |
865                                           TCPOLEN_MD5SIG);
866                 arg.iov[0].iov_len += TCPOLEN_MD5SIG_ALIGNED;
867                 rep.th.doff = arg.iov[0].iov_len/4;
868
869                 tcp_v4_md5_hash_hdr((__u8 *) &rep.opt[offset],
870                                     key, ip_hdr(skb)->saddr,
871                                     ip_hdr(skb)->daddr, &rep.th);
872         }
873 #endif
874         arg.flags = reply_flags;
875         arg.csum = csum_tcpudp_nofold(ip_hdr(skb)->daddr,
876                                       ip_hdr(skb)->saddr, /* XXX */
877                                       arg.iov[0].iov_len, IPPROTO_TCP, 0);
878         arg.csumoffset = offsetof(struct tcphdr, check) / 2;
879         if (oif)
880                 arg.bound_dev_if = oif;
881         arg.tos = tos;
882         arg.uid = sock_net_uid(net, sk_fullsock(sk) ? sk : NULL);
883         local_bh_disable();
884         ctl_sk = this_cpu_read(*net->ipv4.tcp_sk);
885         ctl_sk->sk_mark = (sk->sk_state == TCP_TIME_WAIT) ?
886                            inet_twsk(sk)->tw_mark : sk->sk_mark;
887         ctl_sk->sk_priority = (sk->sk_state == TCP_TIME_WAIT) ?
888                            inet_twsk(sk)->tw_priority : sk->sk_priority;
889         transmit_time = tcp_transmit_time(sk);
890         ip_send_unicast_reply(ctl_sk,
891                               skb, &TCP_SKB_CB(skb)->header.h4.opt,
892                               ip_hdr(skb)->saddr, ip_hdr(skb)->daddr,
893                               &arg, arg.iov[0].iov_len,
894                               transmit_time);
895
896         ctl_sk->sk_mark = 0;
897         __TCP_INC_STATS(net, TCP_MIB_OUTSEGS);
898         local_bh_enable();
899 }
900
901 static void tcp_v4_timewait_ack(struct sock *sk, struct sk_buff *skb)
902 {
903         struct inet_timewait_sock *tw = inet_twsk(sk);
904         struct tcp_timewait_sock *tcptw = tcp_twsk(sk);
905
906         tcp_v4_send_ack(sk, skb,
907                         tcptw->tw_snd_nxt, tcptw->tw_rcv_nxt,
908                         tcptw->tw_rcv_wnd >> tw->tw_rcv_wscale,
909                         tcp_time_stamp_raw() + tcptw->tw_ts_offset,
910                         tcptw->tw_ts_recent,
911                         tw->tw_bound_dev_if,
912                         tcp_twsk_md5_key(tcptw),
913                         tw->tw_transparent ? IP_REPLY_ARG_NOSRCCHECK : 0,
914                         tw->tw_tos
915                         );
916
917         inet_twsk_put(tw);
918 }
919
920 static void tcp_v4_reqsk_send_ack(const struct sock *sk, struct sk_buff *skb,
921                                   struct request_sock *req)
922 {
923         const union tcp_md5_addr *addr;
924         int l3index;
925
926         /* sk->sk_state == TCP_LISTEN -> for regular TCP_SYN_RECV
927          * sk->sk_state == TCP_SYN_RECV -> for Fast Open.
928          */
929         u32 seq = (sk->sk_state == TCP_LISTEN) ? tcp_rsk(req)->snt_isn + 1 :
930                                              tcp_sk(sk)->snd_nxt;
931
932         /* RFC 7323 2.3
933          * The window field (SEG.WND) of every outgoing segment, with the
934          * exception of <SYN> segments, MUST be right-shifted by
935          * Rcv.Wind.Shift bits:
936          */
937         addr = (union tcp_md5_addr *)&ip_hdr(skb)->saddr;
938         l3index = tcp_v4_sdif(skb) ? inet_iif(skb) : 0;
939         tcp_v4_send_ack(sk, skb, seq,
940                         tcp_rsk(req)->rcv_nxt,
941                         req->rsk_rcv_wnd >> inet_rsk(req)->rcv_wscale,
942                         tcp_time_stamp_raw() + tcp_rsk(req)->ts_off,
943                         req->ts_recent,
944                         0,
945                         tcp_md5_do_lookup(sk, l3index, addr, AF_INET),
946                         inet_rsk(req)->no_srccheck ? IP_REPLY_ARG_NOSRCCHECK : 0,
947                         ip_hdr(skb)->tos);
948 }
949
950 /*
951  *      Send a SYN-ACK after having received a SYN.
952  *      This still operates on a request_sock only, not on a big
953  *      socket.
954  */
955 static int tcp_v4_send_synack(const struct sock *sk, struct dst_entry *dst,
956                               struct flowi *fl,
957                               struct request_sock *req,
958                               struct tcp_fastopen_cookie *foc,
959                               enum tcp_synack_type synack_type)
960 {
961         const struct inet_request_sock *ireq = inet_rsk(req);
962         struct flowi4 fl4;
963         int err = -1;
964         struct sk_buff *skb;
965
966         /* First, grab a route. */
967         if (!dst && (dst = inet_csk_route_req(sk, &fl4, req)) == NULL)
968                 return -1;
969
970         skb = tcp_make_synack(sk, dst, req, foc, synack_type);
971
972         if (skb) {
973                 __tcp_v4_send_check(skb, ireq->ir_loc_addr, ireq->ir_rmt_addr);
974
975                 rcu_read_lock();
976                 err = ip_build_and_send_pkt(skb, sk, ireq->ir_loc_addr,
977                                             ireq->ir_rmt_addr,
978                                             rcu_dereference(ireq->ireq_opt));
979                 rcu_read_unlock();
980                 err = net_xmit_eval(err);
981         }
982
983         return err;
984 }
985
986 /*
987  *      IPv4 request_sock destructor.
988  */
989 static void tcp_v4_reqsk_destructor(struct request_sock *req)
990 {
991         kfree(rcu_dereference_protected(inet_rsk(req)->ireq_opt, 1));
992 }
993
994 #ifdef CONFIG_TCP_MD5SIG
995 /*
996  * RFC2385 MD5 checksumming requires a mapping of
997  * IP address->MD5 Key.
998  * We need to maintain these in the sk structure.
999  */
1000
1001 DEFINE_STATIC_KEY_FALSE(tcp_md5_needed);
1002 EXPORT_SYMBOL(tcp_md5_needed);
1003
1004 /* Find the Key structure for an address.  */
1005 struct tcp_md5sig_key *__tcp_md5_do_lookup(const struct sock *sk, int l3index,
1006                                            const union tcp_md5_addr *addr,
1007                                            int family)
1008 {
1009         const struct tcp_sock *tp = tcp_sk(sk);
1010         struct tcp_md5sig_key *key;
1011         const struct tcp_md5sig_info *md5sig;
1012         __be32 mask;
1013         struct tcp_md5sig_key *best_match = NULL;
1014         bool match;
1015
1016         /* caller either holds rcu_read_lock() or socket lock */
1017         md5sig = rcu_dereference_check(tp->md5sig_info,
1018                                        lockdep_sock_is_held(sk));
1019         if (!md5sig)
1020                 return NULL;
1021
1022         hlist_for_each_entry_rcu(key, &md5sig->head, node,
1023                                  lockdep_sock_is_held(sk)) {
1024                 if (key->family != family)
1025                         continue;
1026                 if (key->l3index && key->l3index != l3index)
1027                         continue;
1028                 if (family == AF_INET) {
1029                         mask = inet_make_mask(key->prefixlen);
1030                         match = (key->addr.a4.s_addr & mask) ==
1031                                 (addr->a4.s_addr & mask);
1032 #if IS_ENABLED(CONFIG_IPV6)
1033                 } else if (family == AF_INET6) {
1034                         match = ipv6_prefix_equal(&key->addr.a6, &addr->a6,
1035                                                   key->prefixlen);
1036 #endif
1037                 } else {
1038                         match = false;
1039                 }
1040
1041                 if (match && (!best_match ||
1042                               key->prefixlen > best_match->prefixlen))
1043                         best_match = key;
1044         }
1045         return best_match;
1046 }
1047 EXPORT_SYMBOL(__tcp_md5_do_lookup);
1048
1049 static struct tcp_md5sig_key *tcp_md5_do_lookup_exact(const struct sock *sk,
1050                                                       const union tcp_md5_addr *addr,
1051                                                       int family, u8 prefixlen,
1052                                                       int l3index)
1053 {
1054         const struct tcp_sock *tp = tcp_sk(sk);
1055         struct tcp_md5sig_key *key;
1056         unsigned int size = sizeof(struct in_addr);
1057         const struct tcp_md5sig_info *md5sig;
1058
1059         /* caller either holds rcu_read_lock() or socket lock */
1060         md5sig = rcu_dereference_check(tp->md5sig_info,
1061                                        lockdep_sock_is_held(sk));
1062         if (!md5sig)
1063                 return NULL;
1064 #if IS_ENABLED(CONFIG_IPV6)
1065         if (family == AF_INET6)
1066                 size = sizeof(struct in6_addr);
1067 #endif
1068         hlist_for_each_entry_rcu(key, &md5sig->head, node,
1069                                  lockdep_sock_is_held(sk)) {
1070                 if (key->family != family)
1071                         continue;
1072                 if (key->l3index && key->l3index != l3index)
1073                         continue;
1074                 if (!memcmp(&key->addr, addr, size) &&
1075                     key->prefixlen == prefixlen)
1076                         return key;
1077         }
1078         return NULL;
1079 }
1080
1081 struct tcp_md5sig_key *tcp_v4_md5_lookup(const struct sock *sk,
1082                                          const struct sock *addr_sk)
1083 {
1084         const union tcp_md5_addr *addr;
1085         int l3index;
1086
1087         l3index = l3mdev_master_ifindex_by_index(sock_net(sk),
1088                                                  addr_sk->sk_bound_dev_if);
1089         addr = (const union tcp_md5_addr *)&addr_sk->sk_daddr;
1090         return tcp_md5_do_lookup(sk, l3index, addr, AF_INET);
1091 }
1092 EXPORT_SYMBOL(tcp_v4_md5_lookup);
1093
1094 /* This can be called on a newly created socket, from other files */
1095 int tcp_md5_do_add(struct sock *sk, const union tcp_md5_addr *addr,
1096                    int family, u8 prefixlen, int l3index,
1097                    const u8 *newkey, u8 newkeylen, gfp_t gfp)
1098 {
1099         /* Add Key to the list */
1100         struct tcp_md5sig_key *key;
1101         struct tcp_sock *tp = tcp_sk(sk);
1102         struct tcp_md5sig_info *md5sig;
1103
1104         key = tcp_md5_do_lookup_exact(sk, addr, family, prefixlen, l3index);
1105         if (key) {
1106                 /* Pre-existing entry - just update that one. */
1107                 memcpy(key->key, newkey, newkeylen);
1108                 key->keylen = newkeylen;
1109                 return 0;
1110         }
1111
1112         md5sig = rcu_dereference_protected(tp->md5sig_info,
1113                                            lockdep_sock_is_held(sk));
1114         if (!md5sig) {
1115                 md5sig = kmalloc(sizeof(*md5sig), gfp);
1116                 if (!md5sig)
1117                         return -ENOMEM;
1118
1119                 sk_nocaps_add(sk, NETIF_F_GSO_MASK);
1120                 INIT_HLIST_HEAD(&md5sig->head);
1121                 rcu_assign_pointer(tp->md5sig_info, md5sig);
1122         }
1123
1124         key = sock_kmalloc(sk, sizeof(*key), gfp);
1125         if (!key)
1126                 return -ENOMEM;
1127         if (!tcp_alloc_md5sig_pool()) {
1128                 sock_kfree_s(sk, key, sizeof(*key));
1129                 return -ENOMEM;
1130         }
1131
1132         memcpy(key->key, newkey, newkeylen);
1133         key->keylen = newkeylen;
1134         key->family = family;
1135         key->prefixlen = prefixlen;
1136         key->l3index = l3index;
1137         memcpy(&key->addr, addr,
1138                (family == AF_INET6) ? sizeof(struct in6_addr) :
1139                                       sizeof(struct in_addr));
1140         hlist_add_head_rcu(&key->node, &md5sig->head);
1141         return 0;
1142 }
1143 EXPORT_SYMBOL(tcp_md5_do_add);
1144
1145 int tcp_md5_do_del(struct sock *sk, const union tcp_md5_addr *addr, int family,
1146                    u8 prefixlen, int l3index)
1147 {
1148         struct tcp_md5sig_key *key;
1149
1150         key = tcp_md5_do_lookup_exact(sk, addr, family, prefixlen, l3index);
1151         if (!key)
1152                 return -ENOENT;
1153         hlist_del_rcu(&key->node);
1154         atomic_sub(sizeof(*key), &sk->sk_omem_alloc);
1155         kfree_rcu(key, rcu);
1156         return 0;
1157 }
1158 EXPORT_SYMBOL(tcp_md5_do_del);
1159
1160 static void tcp_clear_md5_list(struct sock *sk)
1161 {
1162         struct tcp_sock *tp = tcp_sk(sk);
1163         struct tcp_md5sig_key *key;
1164         struct hlist_node *n;
1165         struct tcp_md5sig_info *md5sig;
1166
1167         md5sig = rcu_dereference_protected(tp->md5sig_info, 1);
1168
1169         hlist_for_each_entry_safe(key, n, &md5sig->head, node) {
1170                 hlist_del_rcu(&key->node);
1171                 atomic_sub(sizeof(*key), &sk->sk_omem_alloc);
1172                 kfree_rcu(key, rcu);
1173         }
1174 }
1175
1176 static int tcp_v4_parse_md5_keys(struct sock *sk, int optname,
1177                                  char __user *optval, int optlen)
1178 {
1179         struct tcp_md5sig cmd;
1180         struct sockaddr_in *sin = (struct sockaddr_in *)&cmd.tcpm_addr;
1181         const union tcp_md5_addr *addr;
1182         u8 prefixlen = 32;
1183         int l3index = 0;
1184
1185         if (optlen < sizeof(cmd))
1186                 return -EINVAL;
1187
1188         if (copy_from_user(&cmd, optval, sizeof(cmd)))
1189                 return -EFAULT;
1190
1191         if (sin->sin_family != AF_INET)
1192                 return -EINVAL;
1193
1194         if (optname == TCP_MD5SIG_EXT &&
1195             cmd.tcpm_flags & TCP_MD5SIG_FLAG_PREFIX) {
1196                 prefixlen = cmd.tcpm_prefixlen;
1197                 if (prefixlen > 32)
1198                         return -EINVAL;
1199         }
1200
1201         if (optname == TCP_MD5SIG_EXT &&
1202             cmd.tcpm_flags & TCP_MD5SIG_FLAG_IFINDEX) {
1203                 struct net_device *dev;
1204
1205                 rcu_read_lock();
1206                 dev = dev_get_by_index_rcu(sock_net(sk), cmd.tcpm_ifindex);
1207                 if (dev && netif_is_l3_master(dev))
1208                         l3index = dev->ifindex;
1209
1210                 rcu_read_unlock();
1211
1212                 /* ok to reference set/not set outside of rcu;
1213                  * right now device MUST be an L3 master
1214                  */
1215                 if (!dev || !l3index)
1216                         return -EINVAL;
1217         }
1218
1219         addr = (union tcp_md5_addr *)&sin->sin_addr.s_addr;
1220
1221         if (!cmd.tcpm_keylen)
1222                 return tcp_md5_do_del(sk, addr, AF_INET, prefixlen, l3index);
1223
1224         if (cmd.tcpm_keylen > TCP_MD5SIG_MAXKEYLEN)
1225                 return -EINVAL;
1226
1227         return tcp_md5_do_add(sk, addr, AF_INET, prefixlen, l3index,
1228                               cmd.tcpm_key, cmd.tcpm_keylen, GFP_KERNEL);
1229 }
1230
1231 static int tcp_v4_md5_hash_headers(struct tcp_md5sig_pool *hp,
1232                                    __be32 daddr, __be32 saddr,
1233                                    const struct tcphdr *th, int nbytes)
1234 {
1235         struct tcp4_pseudohdr *bp;
1236         struct scatterlist sg;
1237         struct tcphdr *_th;
1238
1239         bp = hp->scratch;
1240         bp->saddr = saddr;
1241         bp->daddr = daddr;
1242         bp->pad = 0;
1243         bp->protocol = IPPROTO_TCP;
1244         bp->len = cpu_to_be16(nbytes);
1245
1246         _th = (struct tcphdr *)(bp + 1);
1247         memcpy(_th, th, sizeof(*th));
1248         _th->check = 0;
1249
1250         sg_init_one(&sg, bp, sizeof(*bp) + sizeof(*th));
1251         ahash_request_set_crypt(hp->md5_req, &sg, NULL,
1252                                 sizeof(*bp) + sizeof(*th));
1253         return crypto_ahash_update(hp->md5_req);
1254 }
1255
1256 static int tcp_v4_md5_hash_hdr(char *md5_hash, const struct tcp_md5sig_key *key,
1257                                __be32 daddr, __be32 saddr, const struct tcphdr *th)
1258 {
1259         struct tcp_md5sig_pool *hp;
1260         struct ahash_request *req;
1261
1262         hp = tcp_get_md5sig_pool();
1263         if (!hp)
1264                 goto clear_hash_noput;
1265         req = hp->md5_req;
1266
1267         if (crypto_ahash_init(req))
1268                 goto clear_hash;
1269         if (tcp_v4_md5_hash_headers(hp, daddr, saddr, th, th->doff << 2))
1270                 goto clear_hash;
1271         if (tcp_md5_hash_key(hp, key))
1272                 goto clear_hash;
1273         ahash_request_set_crypt(req, NULL, md5_hash, 0);
1274         if (crypto_ahash_final(req))
1275                 goto clear_hash;
1276
1277         tcp_put_md5sig_pool();
1278         return 0;
1279
1280 clear_hash:
1281         tcp_put_md5sig_pool();
1282 clear_hash_noput:
1283         memset(md5_hash, 0, 16);
1284         return 1;
1285 }
1286
1287 int tcp_v4_md5_hash_skb(char *md5_hash, const struct tcp_md5sig_key *key,
1288                         const struct sock *sk,
1289                         const struct sk_buff *skb)
1290 {
1291         struct tcp_md5sig_pool *hp;
1292         struct ahash_request *req;
1293         const struct tcphdr *th = tcp_hdr(skb);
1294         __be32 saddr, daddr;
1295
1296         if (sk) { /* valid for establish/request sockets */
1297                 saddr = sk->sk_rcv_saddr;
1298                 daddr = sk->sk_daddr;
1299         } else {
1300                 const struct iphdr *iph = ip_hdr(skb);
1301                 saddr = iph->saddr;
1302                 daddr = iph->daddr;
1303         }
1304
1305         hp = tcp_get_md5sig_pool();
1306         if (!hp)
1307                 goto clear_hash_noput;
1308         req = hp->md5_req;
1309
1310         if (crypto_ahash_init(req))
1311                 goto clear_hash;
1312
1313         if (tcp_v4_md5_hash_headers(hp, daddr, saddr, th, skb->len))
1314                 goto clear_hash;
1315         if (tcp_md5_hash_skb_data(hp, skb, th->doff << 2))
1316                 goto clear_hash;
1317         if (tcp_md5_hash_key(hp, key))
1318                 goto clear_hash;
1319         ahash_request_set_crypt(req, NULL, md5_hash, 0);
1320         if (crypto_ahash_final(req))
1321                 goto clear_hash;
1322
1323         tcp_put_md5sig_pool();
1324         return 0;
1325
1326 clear_hash:
1327         tcp_put_md5sig_pool();
1328 clear_hash_noput:
1329         memset(md5_hash, 0, 16);
1330         return 1;
1331 }
1332 EXPORT_SYMBOL(tcp_v4_md5_hash_skb);
1333
1334 #endif
1335
1336 /* Called with rcu_read_lock() */
1337 static bool tcp_v4_inbound_md5_hash(const struct sock *sk,
1338                                     const struct sk_buff *skb,
1339                                     int dif, int sdif)
1340 {
1341 #ifdef CONFIG_TCP_MD5SIG
1342         /*
1343          * This gets called for each TCP segment that arrives
1344          * so we want to be efficient.
1345          * We have 3 drop cases:
1346          * o No MD5 hash and one expected.
1347          * o MD5 hash and we're not expecting one.
1348          * o MD5 hash and its wrong.
1349          */
1350         const __u8 *hash_location = NULL;
1351         struct tcp_md5sig_key *hash_expected;
1352         const struct iphdr *iph = ip_hdr(skb);
1353         const struct tcphdr *th = tcp_hdr(skb);
1354         const union tcp_md5_addr *addr;
1355         unsigned char newhash[16];
1356         int genhash, l3index;
1357
1358         /* sdif set, means packet ingressed via a device
1359          * in an L3 domain and dif is set to the l3mdev
1360          */
1361         l3index = sdif ? dif : 0;
1362
1363         addr = (union tcp_md5_addr *)&iph->saddr;
1364         hash_expected = tcp_md5_do_lookup(sk, l3index, addr, AF_INET);
1365         hash_location = tcp_parse_md5sig_option(th);
1366
1367         /* We've parsed the options - do we have a hash? */
1368         if (!hash_expected && !hash_location)
1369                 return false;
1370
1371         if (hash_expected && !hash_location) {
1372                 NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPMD5NOTFOUND);
1373                 return true;
1374         }
1375
1376         if (!hash_expected && hash_location) {
1377                 NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPMD5UNEXPECTED);
1378                 return true;
1379         }
1380
1381         /* Okay, so this is hash_expected and hash_location -
1382          * so we need to calculate the checksum.
1383          */
1384         genhash = tcp_v4_md5_hash_skb(newhash,
1385                                       hash_expected,
1386                                       NULL, skb);
1387
1388         if (genhash || memcmp(hash_location, newhash, 16) != 0) {
1389                 NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPMD5FAILURE);
1390                 net_info_ratelimited("MD5 Hash failed for (%pI4, %d)->(%pI4, %d)%s L3 index %d\n",
1391                                      &iph->saddr, ntohs(th->source),
1392                                      &iph->daddr, ntohs(th->dest),
1393                                      genhash ? " tcp_v4_calc_md5_hash failed"
1394                                      : "", l3index);
1395                 return true;
1396         }
1397         return false;
1398 #endif
1399         return false;
1400 }
1401
1402 static void tcp_v4_init_req(struct request_sock *req,
1403                             const struct sock *sk_listener,
1404                             struct sk_buff *skb)
1405 {
1406         struct inet_request_sock *ireq = inet_rsk(req);
1407         struct net *net = sock_net(sk_listener);
1408
1409         sk_rcv_saddr_set(req_to_sk(req), ip_hdr(skb)->daddr);
1410         sk_daddr_set(req_to_sk(req), ip_hdr(skb)->saddr);
1411         RCU_INIT_POINTER(ireq->ireq_opt, tcp_v4_save_options(net, skb));
1412 }
1413
1414 static struct dst_entry *tcp_v4_route_req(const struct sock *sk,
1415                                           struct flowi *fl,
1416                                           const struct request_sock *req)
1417 {
1418         return inet_csk_route_req(sk, &fl->u.ip4, req);
1419 }
1420
1421 struct request_sock_ops tcp_request_sock_ops __read_mostly = {
1422         .family         =       PF_INET,
1423         .obj_size       =       sizeof(struct tcp_request_sock),
1424         .rtx_syn_ack    =       tcp_rtx_synack,
1425         .send_ack       =       tcp_v4_reqsk_send_ack,
1426         .destructor     =       tcp_v4_reqsk_destructor,
1427         .send_reset     =       tcp_v4_send_reset,
1428         .syn_ack_timeout =      tcp_syn_ack_timeout,
1429 };
1430
1431 const struct tcp_request_sock_ops tcp_request_sock_ipv4_ops = {
1432         .mss_clamp      =       TCP_MSS_DEFAULT,
1433 #ifdef CONFIG_TCP_MD5SIG
1434         .req_md5_lookup =       tcp_v4_md5_lookup,
1435         .calc_md5_hash  =       tcp_v4_md5_hash_skb,
1436 #endif
1437         .init_req       =       tcp_v4_init_req,
1438 #ifdef CONFIG_SYN_COOKIES
1439         .cookie_init_seq =      cookie_v4_init_sequence,
1440 #endif
1441         .route_req      =       tcp_v4_route_req,
1442         .init_seq       =       tcp_v4_init_seq,
1443         .init_ts_off    =       tcp_v4_init_ts_off,
1444         .send_synack    =       tcp_v4_send_synack,
1445 };
1446
1447 int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
1448 {
1449         /* Never answer to SYNs send to broadcast or multicast */
1450         if (skb_rtable(skb)->rt_flags & (RTCF_BROADCAST | RTCF_MULTICAST))
1451                 goto drop;
1452
1453         return tcp_conn_request(&tcp_request_sock_ops,
1454                                 &tcp_request_sock_ipv4_ops, sk, skb);
1455
1456 drop:
1457         tcp_listendrop(sk);
1458         return 0;
1459 }
1460 EXPORT_SYMBOL(tcp_v4_conn_request);
1461
1462
1463 /*
1464  * The three way handshake has completed - we got a valid synack -
1465  * now create the new socket.
1466  */
1467 struct sock *tcp_v4_syn_recv_sock(const struct sock *sk, struct sk_buff *skb,
1468                                   struct request_sock *req,
1469                                   struct dst_entry *dst,
1470                                   struct request_sock *req_unhash,
1471                                   bool *own_req)
1472 {
1473         struct inet_request_sock *ireq;
1474         struct inet_sock *newinet;
1475         struct tcp_sock *newtp;
1476         struct sock *newsk;
1477 #ifdef CONFIG_TCP_MD5SIG
1478         const union tcp_md5_addr *addr;
1479         struct tcp_md5sig_key *key;
1480         int l3index;
1481 #endif
1482         struct ip_options_rcu *inet_opt;
1483
1484         if (sk_acceptq_is_full(sk))
1485                 goto exit_overflow;
1486
1487         newsk = tcp_create_openreq_child(sk, req, skb);
1488         if (!newsk)
1489                 goto exit_nonewsk;
1490
1491         newsk->sk_gso_type = SKB_GSO_TCPV4;
1492         inet_sk_rx_dst_set(newsk, skb);
1493
1494         newtp                 = tcp_sk(newsk);
1495         newinet               = inet_sk(newsk);
1496         ireq                  = inet_rsk(req);
1497         sk_daddr_set(newsk, ireq->ir_rmt_addr);
1498         sk_rcv_saddr_set(newsk, ireq->ir_loc_addr);
1499         newsk->sk_bound_dev_if = ireq->ir_iif;
1500         newinet->inet_saddr   = ireq->ir_loc_addr;
1501         inet_opt              = rcu_dereference(ireq->ireq_opt);
1502         RCU_INIT_POINTER(newinet->inet_opt, inet_opt);
1503         newinet->mc_index     = inet_iif(skb);
1504         newinet->mc_ttl       = ip_hdr(skb)->ttl;
1505         newinet->rcv_tos      = ip_hdr(skb)->tos;
1506         inet_csk(newsk)->icsk_ext_hdr_len = 0;
1507         if (inet_opt)
1508                 inet_csk(newsk)->icsk_ext_hdr_len = inet_opt->opt.optlen;
1509         newinet->inet_id = prandom_u32();
1510
1511         if (!dst) {
1512                 dst = inet_csk_route_child_sock(sk, newsk, req);
1513                 if (!dst)
1514                         goto put_and_exit;
1515         } else {
1516                 /* syncookie case : see end of cookie_v4_check() */
1517         }
1518         sk_setup_caps(newsk, dst);
1519
1520         tcp_ca_openreq_child(newsk, dst);
1521
1522         tcp_sync_mss(newsk, dst_mtu(dst));
1523         newtp->advmss = tcp_mss_clamp(tcp_sk(sk), dst_metric_advmss(dst));
1524
1525         tcp_initialize_rcv_mss(newsk);
1526
1527 #ifdef CONFIG_TCP_MD5SIG
1528         l3index = l3mdev_master_ifindex_by_index(sock_net(sk), ireq->ir_iif);
1529         /* Copy over the MD5 key from the original socket */
1530         addr = (union tcp_md5_addr *)&newinet->inet_daddr;
1531         key = tcp_md5_do_lookup(sk, l3index, addr, AF_INET);
1532         if (key) {
1533                 /*
1534                  * We're using one, so create a matching key
1535                  * on the newsk structure. If we fail to get
1536                  * memory, then we end up not copying the key
1537                  * across. Shucks.
1538                  */
1539                 tcp_md5_do_add(newsk, addr, AF_INET, 32, l3index,
1540                                key->key, key->keylen, GFP_ATOMIC);
1541                 sk_nocaps_add(newsk, NETIF_F_GSO_MASK);
1542         }
1543 #endif
1544
1545         if (__inet_inherit_port(sk, newsk) < 0)
1546                 goto put_and_exit;
1547         *own_req = inet_ehash_nolisten(newsk, req_to_sk(req_unhash));
1548         if (likely(*own_req)) {
1549                 tcp_move_syn(newtp, req);
1550                 ireq->ireq_opt = NULL;
1551         } else {
1552                 newinet->inet_opt = NULL;
1553         }
1554         return newsk;
1555
1556 exit_overflow:
1557         NET_INC_STATS(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS);
1558 exit_nonewsk:
1559         dst_release(dst);
1560 exit:
1561         tcp_listendrop(sk);
1562         return NULL;
1563 put_and_exit:
1564         newinet->inet_opt = NULL;
1565         inet_csk_prepare_forced_close(newsk);
1566         tcp_done(newsk);
1567         goto exit;
1568 }
1569 EXPORT_SYMBOL(tcp_v4_syn_recv_sock);
1570
1571 static struct sock *tcp_v4_cookie_check(struct sock *sk, struct sk_buff *skb)
1572 {
1573 #ifdef CONFIG_SYN_COOKIES
1574         const struct tcphdr *th = tcp_hdr(skb);
1575
1576         if (!th->syn)
1577                 sk = cookie_v4_check(sk, skb);
1578 #endif
1579         return sk;
1580 }
1581
1582 u16 tcp_v4_get_syncookie(struct sock *sk, struct iphdr *iph,
1583                          struct tcphdr *th, u32 *cookie)
1584 {
1585         u16 mss = 0;
1586 #ifdef CONFIG_SYN_COOKIES
1587         mss = tcp_get_syncookie_mss(&tcp_request_sock_ops,
1588                                     &tcp_request_sock_ipv4_ops, sk, th);
1589         if (mss) {
1590                 *cookie = __cookie_v4_init_sequence(iph, th, &mss);
1591                 tcp_synq_overflow(sk);
1592         }
1593 #endif
1594         return mss;
1595 }
1596
1597 /* The socket must have it's spinlock held when we get
1598  * here, unless it is a TCP_LISTEN socket.
1599  *
1600  * We have a potential double-lock case here, so even when
1601  * doing backlog processing we use the BH locking scheme.
1602  * This is because we cannot sleep with the original spinlock
1603  * held.
1604  */
1605 int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb)
1606 {
1607         struct sock *rsk;
1608
1609         if (sk->sk_state == TCP_ESTABLISHED) { /* Fast path */
1610                 struct dst_entry *dst = sk->sk_rx_dst;
1611
1612                 sock_rps_save_rxhash(sk, skb);
1613                 sk_mark_napi_id(sk, skb);
1614                 if (dst) {
1615                         if (inet_sk(sk)->rx_dst_ifindex != skb->skb_iif ||
1616                             !dst->ops->check(dst, 0)) {
1617                                 dst_release(dst);
1618                                 sk->sk_rx_dst = NULL;
1619                         }
1620                 }
1621                 tcp_rcv_established(sk, skb);
1622                 return 0;
1623         }
1624
1625         if (tcp_checksum_complete(skb))
1626                 goto csum_err;
1627
1628         if (sk->sk_state == TCP_LISTEN) {
1629                 struct sock *nsk = tcp_v4_cookie_check(sk, skb);
1630
1631                 if (!nsk)
1632                         goto discard;
1633                 if (nsk != sk) {
1634                         if (tcp_child_process(sk, nsk, skb)) {
1635                                 rsk = nsk;
1636                                 goto reset;
1637                         }
1638                         return 0;
1639                 }
1640         } else
1641                 sock_rps_save_rxhash(sk, skb);
1642
1643         if (tcp_rcv_state_process(sk, skb)) {
1644                 rsk = sk;
1645                 goto reset;
1646         }
1647         return 0;
1648
1649 reset:
1650         tcp_v4_send_reset(rsk, skb);
1651 discard:
1652         kfree_skb(skb);
1653         /* Be careful here. If this function gets more complicated and
1654          * gcc suffers from register pressure on the x86, sk (in %ebx)
1655          * might be destroyed here. This current version compiles correctly,
1656          * but you have been warned.
1657          */
1658         return 0;
1659
1660 csum_err:
1661         TCP_INC_STATS(sock_net(sk), TCP_MIB_CSUMERRORS);
1662         TCP_INC_STATS(sock_net(sk), TCP_MIB_INERRS);
1663         goto discard;
1664 }
1665 EXPORT_SYMBOL(tcp_v4_do_rcv);
1666
1667 int tcp_v4_early_demux(struct sk_buff *skb)
1668 {
1669         const struct iphdr *iph;
1670         const struct tcphdr *th;
1671         struct sock *sk;
1672
1673         if (skb->pkt_type != PACKET_HOST)
1674                 return 0;
1675
1676         if (!pskb_may_pull(skb, skb_transport_offset(skb) + sizeof(struct tcphdr)))
1677                 return 0;
1678
1679         iph = ip_hdr(skb);
1680         th = tcp_hdr(skb);
1681
1682         if (th->doff < sizeof(struct tcphdr) / 4)
1683                 return 0;
1684
1685         sk = __inet_lookup_established(dev_net(skb->dev), &tcp_hashinfo,
1686                                        iph->saddr, th->source,
1687                                        iph->daddr, ntohs(th->dest),
1688                                        skb->skb_iif, inet_sdif(skb));
1689         if (sk) {
1690                 skb->sk = sk;
1691                 skb->destructor = sock_edemux;
1692                 if (sk_fullsock(sk)) {
1693                         struct dst_entry *dst = READ_ONCE(sk->sk_rx_dst);
1694
1695                         if (dst)
1696                                 dst = dst_check(dst, 0);
1697                         if (dst &&
1698                             inet_sk(sk)->rx_dst_ifindex == skb->skb_iif)
1699                                 skb_dst_set_noref(skb, dst);
1700                 }
1701         }
1702         return 0;
1703 }
1704
1705 bool tcp_add_backlog(struct sock *sk, struct sk_buff *skb)
1706 {
1707         u32 limit = READ_ONCE(sk->sk_rcvbuf) + READ_ONCE(sk->sk_sndbuf);
1708         struct skb_shared_info *shinfo;
1709         const struct tcphdr *th;
1710         struct tcphdr *thtail;
1711         struct sk_buff *tail;
1712         unsigned int hdrlen;
1713         bool fragstolen;
1714         u32 gso_segs;
1715         int delta;
1716
1717         /* In case all data was pulled from skb frags (in __pskb_pull_tail()),
1718          * we can fix skb->truesize to its real value to avoid future drops.
1719          * This is valid because skb is not yet charged to the socket.
1720          * It has been noticed pure SACK packets were sometimes dropped
1721          * (if cooked by drivers without copybreak feature).
1722          */
1723         skb_condense(skb);
1724
1725         skb_dst_drop(skb);
1726
1727         if (unlikely(tcp_checksum_complete(skb))) {
1728                 bh_unlock_sock(sk);
1729                 __TCP_INC_STATS(sock_net(sk), TCP_MIB_CSUMERRORS);
1730                 __TCP_INC_STATS(sock_net(sk), TCP_MIB_INERRS);
1731                 return true;
1732         }
1733
1734         /* Attempt coalescing to last skb in backlog, even if we are
1735          * above the limits.
1736          * This is okay because skb capacity is limited to MAX_SKB_FRAGS.
1737          */
1738         th = (const struct tcphdr *)skb->data;
1739         hdrlen = th->doff * 4;
1740         shinfo = skb_shinfo(skb);
1741
1742         if (!shinfo->gso_size)
1743                 shinfo->gso_size = skb->len - hdrlen;
1744
1745         if (!shinfo->gso_segs)
1746                 shinfo->gso_segs = 1;
1747
1748         tail = sk->sk_backlog.tail;
1749         if (!tail)
1750                 goto no_coalesce;
1751         thtail = (struct tcphdr *)tail->data;
1752
1753         if (TCP_SKB_CB(tail)->end_seq != TCP_SKB_CB(skb)->seq ||
1754             TCP_SKB_CB(tail)->ip_dsfield != TCP_SKB_CB(skb)->ip_dsfield ||
1755             ((TCP_SKB_CB(tail)->tcp_flags |
1756               TCP_SKB_CB(skb)->tcp_flags) & (TCPHDR_SYN | TCPHDR_RST | TCPHDR_URG)) ||
1757             !((TCP_SKB_CB(tail)->tcp_flags &
1758               TCP_SKB_CB(skb)->tcp_flags) & TCPHDR_ACK) ||
1759             ((TCP_SKB_CB(tail)->tcp_flags ^
1760               TCP_SKB_CB(skb)->tcp_flags) & (TCPHDR_ECE | TCPHDR_CWR)) ||
1761 #ifdef CONFIG_TLS_DEVICE
1762             tail->decrypted != skb->decrypted ||
1763 #endif
1764             thtail->doff != th->doff ||
1765             memcmp(thtail + 1, th + 1, hdrlen - sizeof(*th)))
1766                 goto no_coalesce;
1767
1768         __skb_pull(skb, hdrlen);
1769         if (skb_try_coalesce(tail, skb, &fragstolen, &delta)) {
1770                 thtail->window = th->window;
1771
1772                 TCP_SKB_CB(tail)->end_seq = TCP_SKB_CB(skb)->end_seq;
1773
1774                 if (after(TCP_SKB_CB(skb)->ack_seq, TCP_SKB_CB(tail)->ack_seq))
1775                         TCP_SKB_CB(tail)->ack_seq = TCP_SKB_CB(skb)->ack_seq;
1776
1777                 /* We have to update both TCP_SKB_CB(tail)->tcp_flags and
1778                  * thtail->fin, so that the fast path in tcp_rcv_established()
1779                  * is not entered if we append a packet with a FIN.
1780                  * SYN, RST, URG are not present.
1781                  * ACK is set on both packets.
1782                  * PSH : we do not really care in TCP stack,
1783                  *       at least for 'GRO' packets.
1784                  */
1785                 thtail->fin |= th->fin;
1786                 TCP_SKB_CB(tail)->tcp_flags |= TCP_SKB_CB(skb)->tcp_flags;
1787
1788                 if (TCP_SKB_CB(skb)->has_rxtstamp) {
1789                         TCP_SKB_CB(tail)->has_rxtstamp = true;
1790                         tail->tstamp = skb->tstamp;
1791                         skb_hwtstamps(tail)->hwtstamp = skb_hwtstamps(skb)->hwtstamp;
1792                 }
1793
1794                 /* Not as strict as GRO. We only need to carry mss max value */
1795                 skb_shinfo(tail)->gso_size = max(shinfo->gso_size,
1796                                                  skb_shinfo(tail)->gso_size);
1797
1798                 gso_segs = skb_shinfo(tail)->gso_segs + shinfo->gso_segs;
1799                 skb_shinfo(tail)->gso_segs = min_t(u32, gso_segs, 0xFFFF);
1800
1801                 sk->sk_backlog.len += delta;
1802                 __NET_INC_STATS(sock_net(sk),
1803                                 LINUX_MIB_TCPBACKLOGCOALESCE);
1804                 kfree_skb_partial(skb, fragstolen);
1805                 return false;
1806         }
1807         __skb_push(skb, hdrlen);
1808
1809 no_coalesce:
1810         /* Only socket owner can try to collapse/prune rx queues
1811          * to reduce memory overhead, so add a little headroom here.
1812          * Few sockets backlog are possibly concurrently non empty.
1813          */
1814         limit += 64*1024;
1815
1816         if (unlikely(sk_add_backlog(sk, skb, limit))) {
1817                 bh_unlock_sock(sk);
1818                 __NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPBACKLOGDROP);
1819                 return true;
1820         }
1821         return false;
1822 }
1823 EXPORT_SYMBOL(tcp_add_backlog);
1824
1825 int tcp_filter(struct sock *sk, struct sk_buff *skb)
1826 {
1827         struct tcphdr *th = (struct tcphdr *)skb->data;
1828
1829         return sk_filter_trim_cap(sk, skb, th->doff * 4);
1830 }
1831 EXPORT_SYMBOL(tcp_filter);
1832
1833 static void tcp_v4_restore_cb(struct sk_buff *skb)
1834 {
1835         memmove(IPCB(skb), &TCP_SKB_CB(skb)->header.h4,
1836                 sizeof(struct inet_skb_parm));
1837 }
1838
1839 static void tcp_v4_fill_cb(struct sk_buff *skb, const struct iphdr *iph,
1840                            const struct tcphdr *th)
1841 {
1842         /* This is tricky : We move IPCB at its correct location into TCP_SKB_CB()
1843          * barrier() makes sure compiler wont play fool^Waliasing games.
1844          */
1845         memmove(&TCP_SKB_CB(skb)->header.h4, IPCB(skb),
1846                 sizeof(struct inet_skb_parm));
1847         barrier();
1848
1849         TCP_SKB_CB(skb)->seq = ntohl(th->seq);
1850         TCP_SKB_CB(skb)->end_seq = (TCP_SKB_CB(skb)->seq + th->syn + th->fin +
1851                                     skb->len - th->doff * 4);
1852         TCP_SKB_CB(skb)->ack_seq = ntohl(th->ack_seq);
1853         TCP_SKB_CB(skb)->tcp_flags = tcp_flag_byte(th);
1854         TCP_SKB_CB(skb)->tcp_tw_isn = 0;
1855         TCP_SKB_CB(skb)->ip_dsfield = ipv4_get_dsfield(iph);
1856         TCP_SKB_CB(skb)->sacked  = 0;
1857         TCP_SKB_CB(skb)->has_rxtstamp =
1858                         skb->tstamp || skb_hwtstamps(skb)->hwtstamp;
1859 }
1860
1861 /*
1862  *      From tcp_input.c
1863  */
1864
1865 int tcp_v4_rcv(struct sk_buff *skb)
1866 {
1867         struct net *net = dev_net(skb->dev);
1868         struct sk_buff *skb_to_free;
1869         int sdif = inet_sdif(skb);
1870         int dif = inet_iif(skb);
1871         const struct iphdr *iph;
1872         const struct tcphdr *th;
1873         bool refcounted;
1874         struct sock *sk;
1875         int ret;
1876
1877         if (skb->pkt_type != PACKET_HOST)
1878                 goto discard_it;
1879
1880         /* Count it even if it's bad */
1881         __TCP_INC_STATS(net, TCP_MIB_INSEGS);
1882
1883         if (!pskb_may_pull(skb, sizeof(struct tcphdr)))
1884                 goto discard_it;
1885
1886         th = (const struct tcphdr *)skb->data;
1887
1888         if (unlikely(th->doff < sizeof(struct tcphdr) / 4))
1889                 goto bad_packet;
1890         if (!pskb_may_pull(skb, th->doff * 4))
1891                 goto discard_it;
1892
1893         /* An explanation is required here, I think.
1894          * Packet length and doff are validated by header prediction,
1895          * provided case of th->doff==0 is eliminated.
1896          * So, we defer the checks. */
1897
1898         if (skb_checksum_init(skb, IPPROTO_TCP, inet_compute_pseudo))
1899                 goto csum_error;
1900
1901         th = (const struct tcphdr *)skb->data;
1902         iph = ip_hdr(skb);
1903 lookup:
1904         sk = __inet_lookup_skb(&tcp_hashinfo, skb, __tcp_hdrlen(th), th->source,
1905                                th->dest, sdif, &refcounted);
1906         if (!sk)
1907                 goto no_tcp_socket;
1908
1909 process:
1910         if (sk->sk_state == TCP_TIME_WAIT)
1911                 goto do_time_wait;
1912
1913         if (sk->sk_state == TCP_NEW_SYN_RECV) {
1914                 struct request_sock *req = inet_reqsk(sk);
1915                 bool req_stolen = false;
1916                 struct sock *nsk;
1917
1918                 sk = req->rsk_listener;
1919                 if (unlikely(tcp_v4_inbound_md5_hash(sk, skb, dif, sdif))) {
1920                         sk_drops_add(sk, skb);
1921                         reqsk_put(req);
1922                         goto discard_it;
1923                 }
1924                 if (tcp_checksum_complete(skb)) {
1925                         reqsk_put(req);
1926                         goto csum_error;
1927                 }
1928                 if (unlikely(sk->sk_state != TCP_LISTEN)) {
1929                         inet_csk_reqsk_queue_drop_and_put(sk, req);
1930                         goto lookup;
1931                 }
1932                 /* We own a reference on the listener, increase it again
1933                  * as we might lose it too soon.
1934                  */
1935                 sock_hold(sk);
1936                 refcounted = true;
1937                 nsk = NULL;
1938                 if (!tcp_filter(sk, skb)) {
1939                         th = (const struct tcphdr *)skb->data;
1940                         iph = ip_hdr(skb);
1941                         tcp_v4_fill_cb(skb, iph, th);
1942                         nsk = tcp_check_req(sk, skb, req, false, &req_stolen);
1943                 }
1944                 if (!nsk) {
1945                         reqsk_put(req);
1946                         if (req_stolen) {
1947                                 /* Another cpu got exclusive access to req
1948                                  * and created a full blown socket.
1949                                  * Try to feed this packet to this socket
1950                                  * instead of discarding it.
1951                                  */
1952                                 tcp_v4_restore_cb(skb);
1953                                 sock_put(sk);
1954                                 goto lookup;
1955                         }
1956                         goto discard_and_relse;
1957                 }
1958                 if (nsk == sk) {
1959                         reqsk_put(req);
1960                         tcp_v4_restore_cb(skb);
1961                 } else if (tcp_child_process(sk, nsk, skb)) {
1962                         tcp_v4_send_reset(nsk, skb);
1963                         goto discard_and_relse;
1964                 } else {
1965                         sock_put(sk);
1966                         return 0;
1967                 }
1968         }
1969         if (unlikely(iph->ttl < inet_sk(sk)->min_ttl)) {
1970                 __NET_INC_STATS(net, LINUX_MIB_TCPMINTTLDROP);
1971                 goto discard_and_relse;
1972         }
1973
1974         if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb))
1975                 goto discard_and_relse;
1976
1977         if (tcp_v4_inbound_md5_hash(sk, skb, dif, sdif))
1978                 goto discard_and_relse;
1979
1980         nf_reset_ct(skb);
1981
1982         if (tcp_filter(sk, skb))
1983                 goto discard_and_relse;
1984         th = (const struct tcphdr *)skb->data;
1985         iph = ip_hdr(skb);
1986         tcp_v4_fill_cb(skb, iph, th);
1987
1988         skb->dev = NULL;
1989
1990         if (sk->sk_state == TCP_LISTEN) {
1991                 ret = tcp_v4_do_rcv(sk, skb);
1992                 goto put_and_return;
1993         }
1994
1995         sk_incoming_cpu_update(sk);
1996
1997         bh_lock_sock_nested(sk);
1998         tcp_segs_in(tcp_sk(sk), skb);
1999         ret = 0;
2000         if (!sock_owned_by_user(sk)) {
2001                 skb_to_free = sk->sk_rx_skb_cache;
2002                 sk->sk_rx_skb_cache = NULL;
2003                 ret = tcp_v4_do_rcv(sk, skb);
2004         } else {
2005                 if (tcp_add_backlog(sk, skb))
2006                         goto discard_and_relse;
2007                 skb_to_free = NULL;
2008         }
2009         bh_unlock_sock(sk);
2010         if (skb_to_free)
2011                 __kfree_skb(skb_to_free);
2012
2013 put_and_return:
2014         if (refcounted)
2015                 sock_put(sk);
2016
2017         return ret;
2018
2019 no_tcp_socket:
2020         if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb))
2021                 goto discard_it;
2022
2023         tcp_v4_fill_cb(skb, iph, th);
2024
2025         if (tcp_checksum_complete(skb)) {
2026 csum_error:
2027                 __TCP_INC_STATS(net, TCP_MIB_CSUMERRORS);
2028 bad_packet:
2029                 __TCP_INC_STATS(net, TCP_MIB_INERRS);
2030         } else {
2031                 tcp_v4_send_reset(NULL, skb);
2032         }
2033
2034 discard_it:
2035         /* Discard frame. */
2036         kfree_skb(skb);
2037         return 0;
2038
2039 discard_and_relse:
2040         sk_drops_add(sk, skb);
2041         if (refcounted)
2042                 sock_put(sk);
2043         goto discard_it;
2044
2045 do_time_wait:
2046         if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) {
2047                 inet_twsk_put(inet_twsk(sk));
2048                 goto discard_it;
2049         }
2050
2051         tcp_v4_fill_cb(skb, iph, th);
2052
2053         if (tcp_checksum_complete(skb)) {
2054                 inet_twsk_put(inet_twsk(sk));
2055                 goto csum_error;
2056         }
2057         switch (tcp_timewait_state_process(inet_twsk(sk), skb, th)) {
2058         case TCP_TW_SYN: {
2059                 struct sock *sk2 = inet_lookup_listener(dev_net(skb->dev),
2060                                                         &tcp_hashinfo, skb,
2061                                                         __tcp_hdrlen(th),
2062                                                         iph->saddr, th->source,
2063                                                         iph->daddr, th->dest,
2064                                                         inet_iif(skb),
2065                                                         sdif);
2066                 if (sk2) {
2067                         inet_twsk_deschedule_put(inet_twsk(sk));
2068                         sk = sk2;
2069                         tcp_v4_restore_cb(skb);
2070                         refcounted = false;
2071                         goto process;
2072                 }
2073         }
2074                 /* to ACK */
2075                 fallthrough;
2076         case TCP_TW_ACK:
2077                 tcp_v4_timewait_ack(sk, skb);
2078                 break;
2079         case TCP_TW_RST:
2080                 tcp_v4_send_reset(sk, skb);
2081                 inet_twsk_deschedule_put(inet_twsk(sk));
2082                 goto discard_it;
2083         case TCP_TW_SUCCESS:;
2084         }
2085         goto discard_it;
2086 }
2087
2088 static struct timewait_sock_ops tcp_timewait_sock_ops = {
2089         .twsk_obj_size  = sizeof(struct tcp_timewait_sock),
2090         .twsk_unique    = tcp_twsk_unique,
2091         .twsk_destructor= tcp_twsk_destructor,
2092 };
2093
2094 void inet_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb)
2095 {
2096         struct dst_entry *dst = skb_dst(skb);
2097
2098         if (dst && dst_hold_safe(dst)) {
2099                 sk->sk_rx_dst = dst;
2100                 inet_sk(sk)->rx_dst_ifindex = skb->skb_iif;
2101         }
2102 }
2103 EXPORT_SYMBOL(inet_sk_rx_dst_set);
2104
2105 const struct inet_connection_sock_af_ops ipv4_specific = {
2106         .queue_xmit        = ip_queue_xmit,
2107         .send_check        = tcp_v4_send_check,
2108         .rebuild_header    = inet_sk_rebuild_header,
2109         .sk_rx_dst_set     = inet_sk_rx_dst_set,
2110         .conn_request      = tcp_v4_conn_request,
2111         .syn_recv_sock     = tcp_v4_syn_recv_sock,
2112         .net_header_len    = sizeof(struct iphdr),
2113         .setsockopt        = ip_setsockopt,
2114         .getsockopt        = ip_getsockopt,
2115         .addr2sockaddr     = inet_csk_addr2sockaddr,
2116         .sockaddr_len      = sizeof(struct sockaddr_in),
2117 #ifdef CONFIG_COMPAT
2118         .compat_setsockopt = compat_ip_setsockopt,
2119         .compat_getsockopt = compat_ip_getsockopt,
2120 #endif
2121         .mtu_reduced       = tcp_v4_mtu_reduced,
2122 };
2123 EXPORT_SYMBOL(ipv4_specific);
2124
2125 #ifdef CONFIG_TCP_MD5SIG
2126 static const struct tcp_sock_af_ops tcp_sock_ipv4_specific = {
2127         .md5_lookup             = tcp_v4_md5_lookup,
2128         .calc_md5_hash          = tcp_v4_md5_hash_skb,
2129         .md5_parse              = tcp_v4_parse_md5_keys,
2130 };
2131 #endif
2132
2133 /* NOTE: A lot of things set to zero explicitly by call to
2134  *       sk_alloc() so need not be done here.
2135  */
2136 static int tcp_v4_init_sock(struct sock *sk)
2137 {
2138         struct inet_connection_sock *icsk = inet_csk(sk);
2139
2140         tcp_init_sock(sk);
2141
2142         icsk->icsk_af_ops = &ipv4_specific;
2143
2144 #ifdef CONFIG_TCP_MD5SIG
2145         tcp_sk(sk)->af_specific = &tcp_sock_ipv4_specific;
2146 #endif
2147
2148         return 0;
2149 }
2150
2151 void tcp_v4_destroy_sock(struct sock *sk)
2152 {
2153         struct tcp_sock *tp = tcp_sk(sk);
2154
2155         trace_tcp_destroy_sock(sk);
2156
2157         tcp_clear_xmit_timers(sk);
2158
2159         tcp_cleanup_congestion_control(sk);
2160
2161         tcp_cleanup_ulp(sk);
2162
2163         /* Cleanup up the write buffer. */
2164         tcp_write_queue_purge(sk);
2165
2166         /* Check if we want to disable active TFO */
2167         tcp_fastopen_active_disable_ofo_check(sk);
2168
2169         /* Cleans up our, hopefully empty, out_of_order_queue. */
2170         skb_rbtree_purge(&tp->out_of_order_queue);
2171
2172 #ifdef CONFIG_TCP_MD5SIG
2173         /* Clean up the MD5 key list, if any */
2174         if (tp->md5sig_info) {
2175                 tcp_clear_md5_list(sk);
2176                 kfree_rcu(rcu_dereference_protected(tp->md5sig_info, 1), rcu);
2177                 tp->md5sig_info = NULL;
2178         }
2179 #endif
2180
2181         /* Clean up a referenced TCP bind bucket. */
2182         if (inet_csk(sk)->icsk_bind_hash)
2183                 inet_put_port(sk);
2184
2185         BUG_ON(rcu_access_pointer(tp->fastopen_rsk));
2186
2187         /* If socket is aborted during connect operation */
2188         tcp_free_fastopen_req(tp);
2189         tcp_fastopen_destroy_cipher(sk);
2190         tcp_saved_syn_free(tp);
2191
2192         sk_sockets_allocated_dec(sk);
2193 }
2194 EXPORT_SYMBOL(tcp_v4_destroy_sock);
2195
2196 #ifdef CONFIG_PROC_FS
2197 /* Proc filesystem TCP sock list dumping. */
2198
2199 /*
2200  * Get next listener socket follow cur.  If cur is NULL, get first socket
2201  * starting from bucket given in st->bucket; when st->bucket is zero the
2202  * very first socket in the hash table is returned.
2203  */
2204 static void *listening_get_next(struct seq_file *seq, void *cur)
2205 {
2206         struct tcp_seq_afinfo *afinfo = PDE_DATA(file_inode(seq->file));
2207         struct tcp_iter_state *st = seq->private;
2208         struct net *net = seq_file_net(seq);
2209         struct inet_listen_hashbucket *ilb;
2210         struct hlist_nulls_node *node;
2211         struct sock *sk = cur;
2212
2213         if (!sk) {
2214 get_head:
2215                 ilb = &tcp_hashinfo.listening_hash[st->bucket];
2216                 spin_lock(&ilb->lock);
2217                 sk = sk_nulls_head(&ilb->nulls_head);
2218                 st->offset = 0;
2219                 goto get_sk;
2220         }
2221         ilb = &tcp_hashinfo.listening_hash[st->bucket];
2222         ++st->num;
2223         ++st->offset;
2224
2225         sk = sk_nulls_next(sk);
2226 get_sk:
2227         sk_nulls_for_each_from(sk, node) {
2228                 if (!net_eq(sock_net(sk), net))
2229                         continue;
2230                 if (sk->sk_family == afinfo->family)
2231                         return sk;
2232         }
2233         spin_unlock(&ilb->lock);
2234         st->offset = 0;
2235         if (++st->bucket < INET_LHTABLE_SIZE)
2236                 goto get_head;
2237         return NULL;
2238 }
2239
2240 static void *listening_get_idx(struct seq_file *seq, loff_t *pos)
2241 {
2242         struct tcp_iter_state *st = seq->private;
2243         void *rc;
2244
2245         st->bucket = 0;
2246         st->offset = 0;
2247         rc = listening_get_next(seq, NULL);
2248
2249         while (rc && *pos) {
2250                 rc = listening_get_next(seq, rc);
2251                 --*pos;
2252         }
2253         return rc;
2254 }
2255
2256 static inline bool empty_bucket(const struct tcp_iter_state *st)
2257 {
2258         return hlist_nulls_empty(&tcp_hashinfo.ehash[st->bucket].chain);
2259 }
2260
2261 /*
2262  * Get first established socket starting from bucket given in st->bucket.
2263  * If st->bucket is zero, the very first socket in the hash is returned.
2264  */
2265 static void *established_get_first(struct seq_file *seq)
2266 {
2267         struct tcp_seq_afinfo *afinfo = PDE_DATA(file_inode(seq->file));
2268         struct tcp_iter_state *st = seq->private;
2269         struct net *net = seq_file_net(seq);
2270         void *rc = NULL;
2271
2272         st->offset = 0;
2273         for (; st->bucket <= tcp_hashinfo.ehash_mask; ++st->bucket) {
2274                 struct sock *sk;
2275                 struct hlist_nulls_node *node;
2276                 spinlock_t *lock = inet_ehash_lockp(&tcp_hashinfo, st->bucket);
2277
2278                 /* Lockless fast path for the common case of empty buckets */
2279                 if (empty_bucket(st))
2280                         continue;
2281
2282                 spin_lock_bh(lock);
2283                 sk_nulls_for_each(sk, node, &tcp_hashinfo.ehash[st->bucket].chain) {
2284                         if (sk->sk_family != afinfo->family ||
2285                             !net_eq(sock_net(sk), net)) {
2286                                 continue;
2287                         }
2288                         rc = sk;
2289                         goto out;
2290                 }
2291                 spin_unlock_bh(lock);
2292         }
2293 out:
2294         return rc;
2295 }
2296
2297 static void *established_get_next(struct seq_file *seq, void *cur)
2298 {
2299         struct tcp_seq_afinfo *afinfo = PDE_DATA(file_inode(seq->file));
2300         struct sock *sk = cur;
2301         struct hlist_nulls_node *node;
2302         struct tcp_iter_state *st = seq->private;
2303         struct net *net = seq_file_net(seq);
2304
2305         ++st->num;
2306         ++st->offset;
2307
2308         sk = sk_nulls_next(sk);
2309
2310         sk_nulls_for_each_from(sk, node) {
2311                 if (sk->sk_family == afinfo->family &&
2312                     net_eq(sock_net(sk), net))
2313                         return sk;
2314         }
2315
2316         spin_unlock_bh(inet_ehash_lockp(&tcp_hashinfo, st->bucket));
2317         ++st->bucket;
2318         return established_get_first(seq);
2319 }
2320
2321 static void *established_get_idx(struct seq_file *seq, loff_t pos)
2322 {
2323         struct tcp_iter_state *st = seq->private;
2324         void *rc;
2325
2326         st->bucket = 0;
2327         rc = established_get_first(seq);
2328
2329         while (rc && pos) {
2330                 rc = established_get_next(seq, rc);
2331                 --pos;
2332         }
2333         return rc;
2334 }
2335
2336 static void *tcp_get_idx(struct seq_file *seq, loff_t pos)
2337 {
2338         void *rc;
2339         struct tcp_iter_state *st = seq->private;
2340
2341         st->state = TCP_SEQ_STATE_LISTENING;
2342         rc        = listening_get_idx(seq, &pos);
2343
2344         if (!rc) {
2345                 st->state = TCP_SEQ_STATE_ESTABLISHED;
2346                 rc        = established_get_idx(seq, pos);
2347         }
2348
2349         return rc;
2350 }
2351
2352 static void *tcp_seek_last_pos(struct seq_file *seq)
2353 {
2354         struct tcp_iter_state *st = seq->private;
2355         int offset = st->offset;
2356         int orig_num = st->num;
2357         void *rc = NULL;
2358
2359         switch (st->state) {
2360         case TCP_SEQ_STATE_LISTENING:
2361                 if (st->bucket >= INET_LHTABLE_SIZE)
2362                         break;
2363                 st->state = TCP_SEQ_STATE_LISTENING;
2364                 rc = listening_get_next(seq, NULL);
2365                 while (offset-- && rc)
2366                         rc = listening_get_next(seq, rc);
2367                 if (rc)
2368                         break;
2369                 st->bucket = 0;
2370                 st->state = TCP_SEQ_STATE_ESTABLISHED;
2371                 fallthrough;
2372         case TCP_SEQ_STATE_ESTABLISHED:
2373                 if (st->bucket > tcp_hashinfo.ehash_mask)
2374                         break;
2375                 rc = established_get_first(seq);
2376                 while (offset-- && rc)
2377                         rc = established_get_next(seq, rc);
2378         }
2379
2380         st->num = orig_num;
2381
2382         return rc;
2383 }
2384
2385 void *tcp_seq_start(struct seq_file *seq, loff_t *pos)
2386 {
2387         struct tcp_iter_state *st = seq->private;
2388         void *rc;
2389
2390         if (*pos && *pos == st->last_pos) {
2391                 rc = tcp_seek_last_pos(seq);
2392                 if (rc)
2393                         goto out;
2394         }
2395
2396         st->state = TCP_SEQ_STATE_LISTENING;
2397         st->num = 0;
2398         st->bucket = 0;
2399         st->offset = 0;
2400         rc = *pos ? tcp_get_idx(seq, *pos - 1) : SEQ_START_TOKEN;
2401
2402 out:
2403         st->last_pos = *pos;
2404         return rc;
2405 }
2406 EXPORT_SYMBOL(tcp_seq_start);
2407
2408 void *tcp_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2409 {
2410         struct tcp_iter_state *st = seq->private;
2411         void *rc = NULL;
2412
2413         if (v == SEQ_START_TOKEN) {
2414                 rc = tcp_get_idx(seq, 0);
2415                 goto out;
2416         }
2417
2418         switch (st->state) {
2419         case TCP_SEQ_STATE_LISTENING:
2420                 rc = listening_get_next(seq, v);
2421                 if (!rc) {
2422                         st->state = TCP_SEQ_STATE_ESTABLISHED;
2423                         st->bucket = 0;
2424                         st->offset = 0;
2425                         rc        = established_get_first(seq);
2426                 }
2427                 break;
2428         case TCP_SEQ_STATE_ESTABLISHED:
2429                 rc = established_get_next(seq, v);
2430                 break;
2431         }
2432 out:
2433         ++*pos;
2434         st->last_pos = *pos;
2435         return rc;
2436 }
2437 EXPORT_SYMBOL(tcp_seq_next);
2438
2439 void tcp_seq_stop(struct seq_file *seq, void *v)
2440 {
2441         struct tcp_iter_state *st = seq->private;
2442
2443         switch (st->state) {
2444         case TCP_SEQ_STATE_LISTENING:
2445                 if (v != SEQ_START_TOKEN)
2446                         spin_unlock(&tcp_hashinfo.listening_hash[st->bucket].lock);
2447                 break;
2448         case TCP_SEQ_STATE_ESTABLISHED:
2449                 if (v)
2450                         spin_unlock_bh(inet_ehash_lockp(&tcp_hashinfo, st->bucket));
2451                 break;
2452         }
2453 }
2454 EXPORT_SYMBOL(tcp_seq_stop);
2455
2456 static void get_openreq4(const struct request_sock *req,
2457                          struct seq_file *f, int i)
2458 {
2459         const struct inet_request_sock *ireq = inet_rsk(req);
2460         long delta = req->rsk_timer.expires - jiffies;
2461
2462         seq_printf(f, "%4d: %08X:%04X %08X:%04X"
2463                 " %02X %08X:%08X %02X:%08lX %08X %5u %8d %u %d %pK",
2464                 i,
2465                 ireq->ir_loc_addr,
2466                 ireq->ir_num,
2467                 ireq->ir_rmt_addr,
2468                 ntohs(ireq->ir_rmt_port),
2469                 TCP_SYN_RECV,
2470                 0, 0, /* could print option size, but that is af dependent. */
2471                 1,    /* timers active (only the expire timer) */
2472                 jiffies_delta_to_clock_t(delta),
2473                 req->num_timeout,
2474                 from_kuid_munged(seq_user_ns(f),
2475                                  sock_i_uid(req->rsk_listener)),
2476                 0,  /* non standard timer */
2477                 0, /* open_requests have no inode */
2478                 0,
2479                 req);
2480 }
2481
2482 static void get_tcp4_sock(struct sock *sk, struct seq_file *f, int i)
2483 {
2484         int timer_active;
2485         unsigned long timer_expires;
2486         const struct tcp_sock *tp = tcp_sk(sk);
2487         const struct inet_connection_sock *icsk = inet_csk(sk);
2488         const struct inet_sock *inet = inet_sk(sk);
2489         const struct fastopen_queue *fastopenq = &icsk->icsk_accept_queue.fastopenq;
2490         __be32 dest = inet->inet_daddr;
2491         __be32 src = inet->inet_rcv_saddr;
2492         __u16 destp = ntohs(inet->inet_dport);
2493         __u16 srcp = ntohs(inet->inet_sport);
2494         int rx_queue;
2495         int state;
2496
2497         if (icsk->icsk_pending == ICSK_TIME_RETRANS ||
2498             icsk->icsk_pending == ICSK_TIME_REO_TIMEOUT ||
2499             icsk->icsk_pending == ICSK_TIME_LOSS_PROBE) {
2500                 timer_active    = 1;
2501                 timer_expires   = icsk->icsk_timeout;
2502         } else if (icsk->icsk_pending == ICSK_TIME_PROBE0) {
2503                 timer_active    = 4;
2504                 timer_expires   = icsk->icsk_timeout;
2505         } else if (timer_pending(&sk->sk_timer)) {
2506                 timer_active    = 2;
2507                 timer_expires   = sk->sk_timer.expires;
2508         } else {
2509                 timer_active    = 0;
2510                 timer_expires = jiffies;
2511         }
2512
2513         state = inet_sk_state_load(sk);
2514         if (state == TCP_LISTEN)
2515                 rx_queue = READ_ONCE(sk->sk_ack_backlog);
2516         else
2517                 /* Because we don't lock the socket,
2518                  * we might find a transient negative value.
2519                  */
2520                 rx_queue = max_t(int, READ_ONCE(tp->rcv_nxt) -
2521                                       READ_ONCE(tp->copied_seq), 0);
2522
2523         seq_printf(f, "%4d: %08X:%04X %08X:%04X %02X %08X:%08X %02X:%08lX "
2524                         "%08X %5u %8d %lu %d %pK %lu %lu %u %u %d",
2525                 i, src, srcp, dest, destp, state,
2526                 READ_ONCE(tp->write_seq) - tp->snd_una,
2527                 rx_queue,
2528                 timer_active,
2529                 jiffies_delta_to_clock_t(timer_expires - jiffies),
2530                 icsk->icsk_retransmits,
2531                 from_kuid_munged(seq_user_ns(f), sock_i_uid(sk)),
2532                 icsk->icsk_probes_out,
2533                 sock_i_ino(sk),
2534                 refcount_read(&sk->sk_refcnt), sk,
2535                 jiffies_to_clock_t(icsk->icsk_rto),
2536                 jiffies_to_clock_t(icsk->icsk_ack.ato),
2537                 (icsk->icsk_ack.quick << 1) | inet_csk_in_pingpong_mode(sk),
2538                 tp->snd_cwnd,
2539                 state == TCP_LISTEN ?
2540                     fastopenq->max_qlen :
2541                     (tcp_in_initial_slowstart(tp) ? -1 : tp->snd_ssthresh));
2542 }
2543
2544 static void get_timewait4_sock(const struct inet_timewait_sock *tw,
2545                                struct seq_file *f, int i)
2546 {
2547         long delta = tw->tw_timer.expires - jiffies;
2548         __be32 dest, src;
2549         __u16 destp, srcp;
2550
2551         dest  = tw->tw_daddr;
2552         src   = tw->tw_rcv_saddr;
2553         destp = ntohs(tw->tw_dport);
2554         srcp  = ntohs(tw->tw_sport);
2555
2556         seq_printf(f, "%4d: %08X:%04X %08X:%04X"
2557                 " %02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %pK",
2558                 i, src, srcp, dest, destp, tw->tw_substate, 0, 0,
2559                 3, jiffies_delta_to_clock_t(delta), 0, 0, 0, 0,
2560                 refcount_read(&tw->tw_refcnt), tw);
2561 }
2562
2563 #define TMPSZ 150
2564
2565 static int tcp4_seq_show(struct seq_file *seq, void *v)
2566 {
2567         struct tcp_iter_state *st;
2568         struct sock *sk = v;
2569
2570         seq_setwidth(seq, TMPSZ - 1);
2571         if (v == SEQ_START_TOKEN) {
2572                 seq_puts(seq, "  sl  local_address rem_address   st tx_queue "
2573                            "rx_queue tr tm->when retrnsmt   uid  timeout "
2574                            "inode");
2575                 goto out;
2576         }
2577         st = seq->private;
2578
2579         if (sk->sk_state == TCP_TIME_WAIT)
2580                 get_timewait4_sock(v, seq, st->num);
2581         else if (sk->sk_state == TCP_NEW_SYN_RECV)
2582                 get_openreq4(v, seq, st->num);
2583         else
2584                 get_tcp4_sock(v, seq, st->num);
2585 out:
2586         seq_pad(seq, '\n');
2587         return 0;
2588 }
2589
2590 static const struct seq_operations tcp4_seq_ops = {
2591         .show           = tcp4_seq_show,
2592         .start          = tcp_seq_start,
2593         .next           = tcp_seq_next,
2594         .stop           = tcp_seq_stop,
2595 };
2596
2597 static struct tcp_seq_afinfo tcp4_seq_afinfo = {
2598         .family         = AF_INET,
2599 };
2600
2601 static int __net_init tcp4_proc_init_net(struct net *net)
2602 {
2603         if (!proc_create_net_data("tcp", 0444, net->proc_net, &tcp4_seq_ops,
2604                         sizeof(struct tcp_iter_state), &tcp4_seq_afinfo))
2605                 return -ENOMEM;
2606         return 0;
2607 }
2608
2609 static void __net_exit tcp4_proc_exit_net(struct net *net)
2610 {
2611         remove_proc_entry("tcp", net->proc_net);
2612 }
2613
2614 static struct pernet_operations tcp4_net_ops = {
2615         .init = tcp4_proc_init_net,
2616         .exit = tcp4_proc_exit_net,
2617 };
2618
2619 int __init tcp4_proc_init(void)
2620 {
2621         return register_pernet_subsys(&tcp4_net_ops);
2622 }
2623
2624 void tcp4_proc_exit(void)
2625 {
2626         unregister_pernet_subsys(&tcp4_net_ops);
2627 }
2628 #endif /* CONFIG_PROC_FS */
2629
2630 struct proto tcp_prot = {
2631         .name                   = "TCP",
2632         .owner                  = THIS_MODULE,
2633         .close                  = tcp_close,
2634         .pre_connect            = tcp_v4_pre_connect,
2635         .connect                = tcp_v4_connect,
2636         .disconnect             = tcp_disconnect,
2637         .accept                 = inet_csk_accept,
2638         .ioctl                  = tcp_ioctl,
2639         .init                   = tcp_v4_init_sock,
2640         .destroy                = tcp_v4_destroy_sock,
2641         .shutdown               = tcp_shutdown,
2642         .setsockopt             = tcp_setsockopt,
2643         .getsockopt             = tcp_getsockopt,
2644         .keepalive              = tcp_set_keepalive,
2645         .recvmsg                = tcp_recvmsg,
2646         .sendmsg                = tcp_sendmsg,
2647         .sendpage               = tcp_sendpage,
2648         .backlog_rcv            = tcp_v4_do_rcv,
2649         .release_cb             = tcp_release_cb,
2650         .hash                   = inet_hash,
2651         .unhash                 = inet_unhash,
2652         .get_port               = inet_csk_get_port,
2653         .enter_memory_pressure  = tcp_enter_memory_pressure,
2654         .leave_memory_pressure  = tcp_leave_memory_pressure,
2655         .stream_memory_free     = tcp_stream_memory_free,
2656         .sockets_allocated      = &tcp_sockets_allocated,
2657         .orphan_count           = &tcp_orphan_count,
2658         .memory_allocated       = &tcp_memory_allocated,
2659         .memory_pressure        = &tcp_memory_pressure,
2660         .sysctl_mem             = sysctl_tcp_mem,
2661         .sysctl_wmem_offset     = offsetof(struct net, ipv4.sysctl_tcp_wmem),
2662         .sysctl_rmem_offset     = offsetof(struct net, ipv4.sysctl_tcp_rmem),
2663         .max_header             = MAX_TCP_HEADER,
2664         .obj_size               = sizeof(struct tcp_sock),
2665         .slab_flags             = SLAB_TYPESAFE_BY_RCU,
2666         .twsk_prot              = &tcp_timewait_sock_ops,
2667         .rsk_prot               = &tcp_request_sock_ops,
2668         .h.hashinfo             = &tcp_hashinfo,
2669         .no_autobind            = true,
2670 #ifdef CONFIG_COMPAT
2671         .compat_setsockopt      = compat_tcp_setsockopt,
2672         .compat_getsockopt      = compat_tcp_getsockopt,
2673 #endif
2674         .diag_destroy           = tcp_abort,
2675 };
2676 EXPORT_SYMBOL(tcp_prot);
2677
2678 static void __net_exit tcp_sk_exit(struct net *net)
2679 {
2680         int cpu;
2681
2682         if (net->ipv4.tcp_congestion_control)
2683                 bpf_module_put(net->ipv4.tcp_congestion_control,
2684                                net->ipv4.tcp_congestion_control->owner);
2685
2686         for_each_possible_cpu(cpu)
2687                 inet_ctl_sock_destroy(*per_cpu_ptr(net->ipv4.tcp_sk, cpu));
2688         free_percpu(net->ipv4.tcp_sk);
2689 }
2690
2691 static int __net_init tcp_sk_init(struct net *net)
2692 {
2693         int res, cpu, cnt;
2694
2695         net->ipv4.tcp_sk = alloc_percpu(struct sock *);
2696         if (!net->ipv4.tcp_sk)
2697                 return -ENOMEM;
2698
2699         for_each_possible_cpu(cpu) {
2700                 struct sock *sk;
2701
2702                 res = inet_ctl_sock_create(&sk, PF_INET, SOCK_RAW,
2703                                            IPPROTO_TCP, net);
2704                 if (res)
2705                         goto fail;
2706                 sock_set_flag(sk, SOCK_USE_WRITE_QUEUE);
2707
2708                 /* Please enforce IP_DF and IPID==0 for RST and
2709                  * ACK sent in SYN-RECV and TIME-WAIT state.
2710                  */
2711                 inet_sk(sk)->pmtudisc = IP_PMTUDISC_DO;
2712
2713                 *per_cpu_ptr(net->ipv4.tcp_sk, cpu) = sk;
2714         }
2715
2716         net->ipv4.sysctl_tcp_ecn = 2;
2717         net->ipv4.sysctl_tcp_ecn_fallback = 1;
2718
2719         net->ipv4.sysctl_tcp_base_mss = TCP_BASE_MSS;
2720         net->ipv4.sysctl_tcp_min_snd_mss = TCP_MIN_SND_MSS;
2721         net->ipv4.sysctl_tcp_probe_threshold = TCP_PROBE_THRESHOLD;
2722         net->ipv4.sysctl_tcp_probe_interval = TCP_PROBE_INTERVAL;
2723         net->ipv4.sysctl_tcp_mtu_probe_floor = TCP_MIN_SND_MSS;
2724
2725         net->ipv4.sysctl_tcp_keepalive_time = TCP_KEEPALIVE_TIME;
2726         net->ipv4.sysctl_tcp_keepalive_probes = TCP_KEEPALIVE_PROBES;
2727         net->ipv4.sysctl_tcp_keepalive_intvl = TCP_KEEPALIVE_INTVL;
2728
2729         net->ipv4.sysctl_tcp_syn_retries = TCP_SYN_RETRIES;
2730         net->ipv4.sysctl_tcp_synack_retries = TCP_SYNACK_RETRIES;
2731         net->ipv4.sysctl_tcp_syncookies = 1;
2732         net->ipv4.sysctl_tcp_reordering = TCP_FASTRETRANS_THRESH;
2733         net->ipv4.sysctl_tcp_retries1 = TCP_RETR1;
2734         net->ipv4.sysctl_tcp_retries2 = TCP_RETR2;
2735         net->ipv4.sysctl_tcp_orphan_retries = 0;
2736         net->ipv4.sysctl_tcp_fin_timeout = TCP_FIN_TIMEOUT;
2737         net->ipv4.sysctl_tcp_notsent_lowat = UINT_MAX;
2738         net->ipv4.sysctl_tcp_tw_reuse = 2;
2739         net->ipv4.sysctl_tcp_no_ssthresh_metrics_save = 1;
2740
2741         cnt = tcp_hashinfo.ehash_mask + 1;
2742         net->ipv4.tcp_death_row.sysctl_max_tw_buckets = cnt / 2;
2743         net->ipv4.tcp_death_row.hashinfo = &tcp_hashinfo;
2744
2745         net->ipv4.sysctl_max_syn_backlog = max(128, cnt / 128);
2746         net->ipv4.sysctl_tcp_sack = 1;
2747         net->ipv4.sysctl_tcp_window_scaling = 1;
2748         net->ipv4.sysctl_tcp_timestamps = 1;
2749         net->ipv4.sysctl_tcp_early_retrans = 3;
2750         net->ipv4.sysctl_tcp_recovery = TCP_RACK_LOSS_DETECTION;
2751         net->ipv4.sysctl_tcp_slow_start_after_idle = 1; /* By default, RFC2861 behavior.  */
2752         net->ipv4.sysctl_tcp_retrans_collapse = 1;
2753         net->ipv4.sysctl_tcp_max_reordering = 300;
2754         net->ipv4.sysctl_tcp_dsack = 1;
2755         net->ipv4.sysctl_tcp_app_win = 31;
2756         net->ipv4.sysctl_tcp_adv_win_scale = 1;
2757         net->ipv4.sysctl_tcp_frto = 2;
2758         net->ipv4.sysctl_tcp_moderate_rcvbuf = 1;
2759         /* This limits the percentage of the congestion window which we
2760          * will allow a single TSO frame to consume.  Building TSO frames
2761          * which are too large can cause TCP streams to be bursty.
2762          */
2763         net->ipv4.sysctl_tcp_tso_win_divisor = 3;
2764         /* Default TSQ limit of 16 TSO segments */
2765         net->ipv4.sysctl_tcp_limit_output_bytes = 16 * 65536;
2766         /* rfc5961 challenge ack rate limiting */
2767         net->ipv4.sysctl_tcp_challenge_ack_limit = 1000;
2768         net->ipv4.sysctl_tcp_min_tso_segs = 2;
2769         net->ipv4.sysctl_tcp_min_rtt_wlen = 300;
2770         net->ipv4.sysctl_tcp_autocorking = 1;
2771         net->ipv4.sysctl_tcp_invalid_ratelimit = HZ/2;
2772         net->ipv4.sysctl_tcp_pacing_ss_ratio = 200;
2773         net->ipv4.sysctl_tcp_pacing_ca_ratio = 120;
2774         if (net != &init_net) {
2775                 memcpy(net->ipv4.sysctl_tcp_rmem,
2776                        init_net.ipv4.sysctl_tcp_rmem,
2777                        sizeof(init_net.ipv4.sysctl_tcp_rmem));
2778                 memcpy(net->ipv4.sysctl_tcp_wmem,
2779                        init_net.ipv4.sysctl_tcp_wmem,
2780                        sizeof(init_net.ipv4.sysctl_tcp_wmem));
2781         }
2782         net->ipv4.sysctl_tcp_comp_sack_delay_ns = NSEC_PER_MSEC;
2783         net->ipv4.sysctl_tcp_comp_sack_nr = 44;
2784         net->ipv4.sysctl_tcp_fastopen = TFO_CLIENT_ENABLE;
2785         spin_lock_init(&net->ipv4.tcp_fastopen_ctx_lock);
2786         net->ipv4.sysctl_tcp_fastopen_blackhole_timeout = 60 * 60;
2787         atomic_set(&net->ipv4.tfo_active_disable_times, 0);
2788
2789         /* Reno is always built in */
2790         if (!net_eq(net, &init_net) &&
2791             bpf_try_module_get(init_net.ipv4.tcp_congestion_control,
2792                                init_net.ipv4.tcp_congestion_control->owner))
2793                 net->ipv4.tcp_congestion_control = init_net.ipv4.tcp_congestion_control;
2794         else
2795                 net->ipv4.tcp_congestion_control = &tcp_reno;
2796
2797         return 0;
2798 fail:
2799         tcp_sk_exit(net);
2800
2801         return res;
2802 }
2803
2804 static void __net_exit tcp_sk_exit_batch(struct list_head *net_exit_list)
2805 {
2806         struct net *net;
2807
2808         inet_twsk_purge(&tcp_hashinfo, AF_INET);
2809
2810         list_for_each_entry(net, net_exit_list, exit_list)
2811                 tcp_fastopen_ctx_destroy(net);
2812 }
2813
2814 static struct pernet_operations __net_initdata tcp_sk_ops = {
2815        .init       = tcp_sk_init,
2816        .exit       = tcp_sk_exit,
2817        .exit_batch = tcp_sk_exit_batch,
2818 };
2819
2820 void __init tcp_v4_init(void)
2821 {
2822         if (register_pernet_subsys(&tcp_sk_ops))
2823                 panic("Failed to create the TCP control socket.\n");
2824 }
This page took 0.1904 seconds and 4 git commands to generate.