mptcp: Only use subflow EOF signaling on fallback connections
[linux-2.6-microblaze.git] / net / mptcp / subflow.c
1 // SPDX-License-Identifier: GPL-2.0
2 /* Multipath TCP
3  *
4  * Copyright (c) 2017 - 2019, Intel Corporation.
5  */
6
7 #define pr_fmt(fmt) "MPTCP: " fmt
8
9 #include <linux/kernel.h>
10 #include <linux/module.h>
11 #include <linux/netdevice.h>
12 #include <crypto/algapi.h>
13 #include <crypto/sha.h>
14 #include <net/sock.h>
15 #include <net/inet_common.h>
16 #include <net/inet_hashtables.h>
17 #include <net/protocol.h>
18 #include <net/tcp.h>
19 #if IS_ENABLED(CONFIG_MPTCP_IPV6)
20 #include <net/ip6_route.h>
21 #endif
22 #include <net/mptcp.h>
23 #include "protocol.h"
24 #include "mib.h"
25
26 static void SUBFLOW_REQ_INC_STATS(struct request_sock *req,
27                                   enum linux_mptcp_mib_field field)
28 {
29         MPTCP_INC_STATS(sock_net(req_to_sk(req)), field);
30 }
31
32 static void subflow_req_destructor(struct request_sock *req)
33 {
34         struct mptcp_subflow_request_sock *subflow_req = mptcp_subflow_rsk(req);
35
36         pr_debug("subflow_req=%p", subflow_req);
37
38         if (subflow_req->msk)
39                 sock_put((struct sock *)subflow_req->msk);
40
41         mptcp_token_destroy_request(req);
42         tcp_request_sock_ops.destructor(req);
43 }
44
45 static void subflow_generate_hmac(u64 key1, u64 key2, u32 nonce1, u32 nonce2,
46                                   void *hmac)
47 {
48         u8 msg[8];
49
50         put_unaligned_be32(nonce1, &msg[0]);
51         put_unaligned_be32(nonce2, &msg[4]);
52
53         mptcp_crypto_hmac_sha(key1, key2, msg, 8, hmac);
54 }
55
56 static bool mptcp_can_accept_new_subflow(const struct mptcp_sock *msk)
57 {
58         return mptcp_is_fully_established((void *)msk) &&
59                READ_ONCE(msk->pm.accept_subflow);
60 }
61
62 /* validate received token and create truncated hmac and nonce for SYN-ACK */
63 static struct mptcp_sock *subflow_token_join_request(struct request_sock *req,
64                                                      const struct sk_buff *skb)
65 {
66         struct mptcp_subflow_request_sock *subflow_req = mptcp_subflow_rsk(req);
67         u8 hmac[SHA256_DIGEST_SIZE];
68         struct mptcp_sock *msk;
69         int local_id;
70
71         msk = mptcp_token_get_sock(subflow_req->token);
72         if (!msk) {
73                 SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_JOINNOTOKEN);
74                 return NULL;
75         }
76
77         local_id = mptcp_pm_get_local_id(msk, (struct sock_common *)req);
78         if (local_id < 0) {
79                 sock_put((struct sock *)msk);
80                 return NULL;
81         }
82         subflow_req->local_id = local_id;
83
84         get_random_bytes(&subflow_req->local_nonce, sizeof(u32));
85
86         subflow_generate_hmac(msk->local_key, msk->remote_key,
87                               subflow_req->local_nonce,
88                               subflow_req->remote_nonce, hmac);
89
90         subflow_req->thmac = get_unaligned_be64(hmac);
91         return msk;
92 }
93
94 static void subflow_init_req(struct request_sock *req,
95                              const struct sock *sk_listener,
96                              struct sk_buff *skb)
97 {
98         struct mptcp_subflow_context *listener = mptcp_subflow_ctx(sk_listener);
99         struct mptcp_subflow_request_sock *subflow_req = mptcp_subflow_rsk(req);
100         struct mptcp_options_received mp_opt;
101
102         pr_debug("subflow_req=%p, listener=%p", subflow_req, listener);
103
104         mptcp_get_options(skb, &mp_opt);
105
106         subflow_req->mp_capable = 0;
107         subflow_req->mp_join = 0;
108         subflow_req->msk = NULL;
109         mptcp_token_init_request(req);
110
111 #ifdef CONFIG_TCP_MD5SIG
112         /* no MPTCP if MD5SIG is enabled on this socket or we may run out of
113          * TCP option space.
114          */
115         if (rcu_access_pointer(tcp_sk(sk_listener)->md5sig_info))
116                 return;
117 #endif
118
119         if (mp_opt.mp_capable) {
120                 SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_MPCAPABLEPASSIVE);
121
122                 if (mp_opt.mp_join)
123                         return;
124         } else if (mp_opt.mp_join) {
125                 SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_JOINSYNRX);
126         }
127
128         if (mp_opt.mp_capable && listener->request_mptcp) {
129                 int err;
130
131                 err = mptcp_token_new_request(req);
132                 if (err == 0)
133                         subflow_req->mp_capable = 1;
134
135                 subflow_req->ssn_offset = TCP_SKB_CB(skb)->seq;
136         } else if (mp_opt.mp_join && listener->request_mptcp) {
137                 subflow_req->ssn_offset = TCP_SKB_CB(skb)->seq;
138                 subflow_req->mp_join = 1;
139                 subflow_req->backup = mp_opt.backup;
140                 subflow_req->remote_id = mp_opt.join_id;
141                 subflow_req->token = mp_opt.token;
142                 subflow_req->remote_nonce = mp_opt.nonce;
143                 subflow_req->msk = subflow_token_join_request(req, skb);
144                 pr_debug("token=%u, remote_nonce=%u msk=%p", subflow_req->token,
145                          subflow_req->remote_nonce, subflow_req->msk);
146         }
147 }
148
149 static void subflow_v4_init_req(struct request_sock *req,
150                                 const struct sock *sk_listener,
151                                 struct sk_buff *skb)
152 {
153         tcp_rsk(req)->is_mptcp = 1;
154
155         tcp_request_sock_ipv4_ops.init_req(req, sk_listener, skb);
156
157         subflow_init_req(req, sk_listener, skb);
158 }
159
160 #if IS_ENABLED(CONFIG_MPTCP_IPV6)
161 static void subflow_v6_init_req(struct request_sock *req,
162                                 const struct sock *sk_listener,
163                                 struct sk_buff *skb)
164 {
165         tcp_rsk(req)->is_mptcp = 1;
166
167         tcp_request_sock_ipv6_ops.init_req(req, sk_listener, skb);
168
169         subflow_init_req(req, sk_listener, skb);
170 }
171 #endif
172
173 /* validate received truncated hmac and create hmac for third ACK */
174 static bool subflow_thmac_valid(struct mptcp_subflow_context *subflow)
175 {
176         u8 hmac[SHA256_DIGEST_SIZE];
177         u64 thmac;
178
179         subflow_generate_hmac(subflow->remote_key, subflow->local_key,
180                               subflow->remote_nonce, subflow->local_nonce,
181                               hmac);
182
183         thmac = get_unaligned_be64(hmac);
184         pr_debug("subflow=%p, token=%u, thmac=%llu, subflow->thmac=%llu\n",
185                  subflow, subflow->token,
186                  (unsigned long long)thmac,
187                  (unsigned long long)subflow->thmac);
188
189         return thmac == subflow->thmac;
190 }
191
192 static void subflow_finish_connect(struct sock *sk, const struct sk_buff *skb)
193 {
194         struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
195         struct mptcp_options_received mp_opt;
196         struct sock *parent = subflow->conn;
197
198         subflow->icsk_af_ops->sk_rx_dst_set(sk, skb);
199
200         if (inet_sk_state_load(parent) == TCP_SYN_SENT) {
201                 inet_sk_state_store(parent, TCP_ESTABLISHED);
202                 parent->sk_state_change(parent);
203         }
204
205         /* be sure no special action on any packet other than syn-ack */
206         if (subflow->conn_finished)
207                 return;
208
209         subflow->rel_write_seq = 1;
210         subflow->conn_finished = 1;
211         subflow->ssn_offset = TCP_SKB_CB(skb)->seq;
212         pr_debug("subflow=%p synack seq=%x", subflow, subflow->ssn_offset);
213
214         mptcp_get_options(skb, &mp_opt);
215         if (subflow->request_mptcp) {
216                 if (!mp_opt.mp_capable) {
217                         MPTCP_INC_STATS(sock_net(sk),
218                                         MPTCP_MIB_MPCAPABLEACTIVEFALLBACK);
219                         mptcp_do_fallback(sk);
220                         pr_fallback(mptcp_sk(subflow->conn));
221                         goto fallback;
222                 }
223
224                 subflow->mp_capable = 1;
225                 subflow->can_ack = 1;
226                 subflow->remote_key = mp_opt.sndr_key;
227                 pr_debug("subflow=%p, remote_key=%llu", subflow,
228                          subflow->remote_key);
229                 mptcp_finish_connect(sk);
230         } else if (subflow->request_join) {
231                 u8 hmac[SHA256_DIGEST_SIZE];
232
233                 if (!mp_opt.mp_join)
234                         goto do_reset;
235
236                 subflow->thmac = mp_opt.thmac;
237                 subflow->remote_nonce = mp_opt.nonce;
238                 pr_debug("subflow=%p, thmac=%llu, remote_nonce=%u", subflow,
239                          subflow->thmac, subflow->remote_nonce);
240
241                 if (!subflow_thmac_valid(subflow)) {
242                         MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_JOINACKMAC);
243                         goto do_reset;
244                 }
245
246                 subflow_generate_hmac(subflow->local_key, subflow->remote_key,
247                                       subflow->local_nonce,
248                                       subflow->remote_nonce,
249                                       hmac);
250                 memcpy(subflow->hmac, hmac, MPTCPOPT_HMAC_LEN);
251
252                 if (!mptcp_finish_join(sk))
253                         goto do_reset;
254
255                 subflow->mp_join = 1;
256                 MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_JOINSYNACKRX);
257         } else if (mptcp_check_fallback(sk)) {
258 fallback:
259                 mptcp_rcv_space_init(mptcp_sk(parent), sk);
260         }
261         return;
262
263 do_reset:
264         tcp_send_active_reset(sk, GFP_ATOMIC);
265         tcp_done(sk);
266 }
267
268 static struct request_sock_ops subflow_request_sock_ops;
269 static struct tcp_request_sock_ops subflow_request_sock_ipv4_ops;
270
271 static int subflow_v4_conn_request(struct sock *sk, struct sk_buff *skb)
272 {
273         struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
274
275         pr_debug("subflow=%p", subflow);
276
277         /* Never answer to SYNs sent to broadcast or multicast */
278         if (skb_rtable(skb)->rt_flags & (RTCF_BROADCAST | RTCF_MULTICAST))
279                 goto drop;
280
281         return tcp_conn_request(&subflow_request_sock_ops,
282                                 &subflow_request_sock_ipv4_ops,
283                                 sk, skb);
284 drop:
285         tcp_listendrop(sk);
286         return 0;
287 }
288
289 #if IS_ENABLED(CONFIG_MPTCP_IPV6)
290 static struct tcp_request_sock_ops subflow_request_sock_ipv6_ops;
291 static struct inet_connection_sock_af_ops subflow_v6_specific;
292 static struct inet_connection_sock_af_ops subflow_v6m_specific;
293
294 static int subflow_v6_conn_request(struct sock *sk, struct sk_buff *skb)
295 {
296         struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
297
298         pr_debug("subflow=%p", subflow);
299
300         if (skb->protocol == htons(ETH_P_IP))
301                 return subflow_v4_conn_request(sk, skb);
302
303         if (!ipv6_unicast_destination(skb))
304                 goto drop;
305
306         return tcp_conn_request(&subflow_request_sock_ops,
307                                 &subflow_request_sock_ipv6_ops, sk, skb);
308
309 drop:
310         tcp_listendrop(sk);
311         return 0; /* don't send reset */
312 }
313 #endif
314
315 /* validate hmac received in third ACK */
316 static bool subflow_hmac_valid(const struct request_sock *req,
317                                const struct mptcp_options_received *mp_opt)
318 {
319         const struct mptcp_subflow_request_sock *subflow_req;
320         u8 hmac[SHA256_DIGEST_SIZE];
321         struct mptcp_sock *msk;
322
323         subflow_req = mptcp_subflow_rsk(req);
324         msk = subflow_req->msk;
325         if (!msk)
326                 return false;
327
328         subflow_generate_hmac(msk->remote_key, msk->local_key,
329                               subflow_req->remote_nonce,
330                               subflow_req->local_nonce, hmac);
331
332         return !crypto_memneq(hmac, mp_opt->hmac, MPTCPOPT_HMAC_LEN);
333 }
334
335 static void mptcp_sock_destruct(struct sock *sk)
336 {
337         /* if new mptcp socket isn't accepted, it is free'd
338          * from the tcp listener sockets request queue, linked
339          * from req->sk.  The tcp socket is released.
340          * This calls the ULP release function which will
341          * also remove the mptcp socket, via
342          * sock_put(ctx->conn).
343          *
344          * Problem is that the mptcp socket will not be in
345          * SYN_RECV state and doesn't have SOCK_DEAD flag.
346          * Both result in warnings from inet_sock_destruct.
347          */
348
349         if (sk->sk_state == TCP_SYN_RECV) {
350                 sk->sk_state = TCP_CLOSE;
351                 WARN_ON_ONCE(sk->sk_socket);
352                 sock_orphan(sk);
353         }
354
355         mptcp_token_destroy(mptcp_sk(sk));
356         inet_sock_destruct(sk);
357 }
358
359 static void mptcp_force_close(struct sock *sk)
360 {
361         inet_sk_state_store(sk, TCP_CLOSE);
362         sk_common_release(sk);
363 }
364
365 static void subflow_ulp_fallback(struct sock *sk,
366                                  struct mptcp_subflow_context *old_ctx)
367 {
368         struct inet_connection_sock *icsk = inet_csk(sk);
369
370         mptcp_subflow_tcp_fallback(sk, old_ctx);
371         icsk->icsk_ulp_ops = NULL;
372         rcu_assign_pointer(icsk->icsk_ulp_data, NULL);
373         tcp_sk(sk)->is_mptcp = 0;
374 }
375
376 static void subflow_drop_ctx(struct sock *ssk)
377 {
378         struct mptcp_subflow_context *ctx = mptcp_subflow_ctx(ssk);
379
380         if (!ctx)
381                 return;
382
383         subflow_ulp_fallback(ssk, ctx);
384         if (ctx->conn)
385                 sock_put(ctx->conn);
386
387         kfree_rcu(ctx, rcu);
388 }
389
390 void mptcp_subflow_fully_established(struct mptcp_subflow_context *subflow,
391                                      struct mptcp_options_received *mp_opt)
392 {
393         struct mptcp_sock *msk = mptcp_sk(subflow->conn);
394
395         subflow->remote_key = mp_opt->sndr_key;
396         subflow->fully_established = 1;
397         subflow->can_ack = 1;
398         WRITE_ONCE(msk->fully_established, true);
399 }
400
401 static struct sock *subflow_syn_recv_sock(const struct sock *sk,
402                                           struct sk_buff *skb,
403                                           struct request_sock *req,
404                                           struct dst_entry *dst,
405                                           struct request_sock *req_unhash,
406                                           bool *own_req)
407 {
408         struct mptcp_subflow_context *listener = mptcp_subflow_ctx(sk);
409         struct mptcp_subflow_request_sock *subflow_req;
410         struct mptcp_options_received mp_opt;
411         bool fallback, fallback_is_fatal;
412         struct sock *new_msk = NULL;
413         struct sock *child;
414
415         pr_debug("listener=%p, req=%p, conn=%p", listener, req, listener->conn);
416
417         /* After child creation we must look for 'mp_capable' even when options
418          * are not parsed
419          */
420         mp_opt.mp_capable = 0;
421
422         /* hopefully temporary handling for MP_JOIN+syncookie */
423         subflow_req = mptcp_subflow_rsk(req);
424         fallback_is_fatal = tcp_rsk(req)->is_mptcp && subflow_req->mp_join;
425         fallback = !tcp_rsk(req)->is_mptcp;
426         if (fallback)
427                 goto create_child;
428
429         /* if the sk is MP_CAPABLE, we try to fetch the client key */
430         if (subflow_req->mp_capable) {
431                 if (TCP_SKB_CB(skb)->seq != subflow_req->ssn_offset + 1) {
432                         /* here we can receive and accept an in-window,
433                          * out-of-order pkt, which will not carry the MP_CAPABLE
434                          * opt even on mptcp enabled paths
435                          */
436                         goto create_msk;
437                 }
438
439                 mptcp_get_options(skb, &mp_opt);
440                 if (!mp_opt.mp_capable) {
441                         fallback = true;
442                         goto create_child;
443                 }
444
445 create_msk:
446                 new_msk = mptcp_sk_clone(listener->conn, &mp_opt, req);
447                 if (!new_msk)
448                         fallback = true;
449         } else if (subflow_req->mp_join) {
450                 mptcp_get_options(skb, &mp_opt);
451                 if (!mp_opt.mp_join ||
452                     !mptcp_can_accept_new_subflow(subflow_req->msk) ||
453                     !subflow_hmac_valid(req, &mp_opt)) {
454                         SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_JOINACKMAC);
455                         fallback = true;
456                 }
457         }
458
459 create_child:
460         child = listener->icsk_af_ops->syn_recv_sock(sk, skb, req, dst,
461                                                      req_unhash, own_req);
462
463         if (child && *own_req) {
464                 struct mptcp_subflow_context *ctx = mptcp_subflow_ctx(child);
465
466                 tcp_rsk(req)->drop_req = false;
467
468                 /* we need to fallback on ctx allocation failure and on pre-reqs
469                  * checking above. In the latter scenario we additionally need
470                  * to reset the context to non MPTCP status.
471                  */
472                 if (!ctx || fallback) {
473                         if (fallback_is_fatal)
474                                 goto dispose_child;
475
476                         subflow_drop_ctx(child);
477                         goto out;
478                 }
479
480                 if (ctx->mp_capable) {
481                         /* this can't race with mptcp_close(), as the msk is
482                          * not yet exposted to user-space
483                          */
484                         inet_sk_state_store((void *)new_msk, TCP_ESTABLISHED);
485
486                         /* new mpc subflow takes ownership of the newly
487                          * created mptcp socket
488                          */
489                         new_msk->sk_destruct = mptcp_sock_destruct;
490                         mptcp_pm_new_connection(mptcp_sk(new_msk), 1);
491                         mptcp_token_accept(subflow_req, mptcp_sk(new_msk));
492                         ctx->conn = new_msk;
493                         new_msk = NULL;
494
495                         /* with OoO packets we can reach here without ingress
496                          * mpc option
497                          */
498                         if (mp_opt.mp_capable)
499                                 mptcp_subflow_fully_established(ctx, &mp_opt);
500                 } else if (ctx->mp_join) {
501                         struct mptcp_sock *owner;
502
503                         owner = subflow_req->msk;
504                         if (!owner)
505                                 goto dispose_child;
506
507                         /* move the msk reference ownership to the subflow */
508                         subflow_req->msk = NULL;
509                         ctx->conn = (struct sock *)owner;
510                         if (!mptcp_finish_join(child))
511                                 goto dispose_child;
512
513                         SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_JOINACKRX);
514                         tcp_rsk(req)->drop_req = true;
515                 }
516         }
517
518 out:
519         /* dispose of the left over mptcp master, if any */
520         if (unlikely(new_msk))
521                 mptcp_force_close(new_msk);
522
523         /* check for expected invariant - should never trigger, just help
524          * catching eariler subtle bugs
525          */
526         WARN_ON_ONCE(child && *own_req && tcp_sk(child)->is_mptcp &&
527                      (!mptcp_subflow_ctx(child) ||
528                       !mptcp_subflow_ctx(child)->conn));
529         return child;
530
531 dispose_child:
532         subflow_drop_ctx(child);
533         tcp_rsk(req)->drop_req = true;
534         inet_csk_prepare_for_destroy_sock(child);
535         tcp_done(child);
536         req->rsk_ops->send_reset(sk, skb);
537
538         /* The last child reference will be released by the caller */
539         return child;
540 }
541
542 static struct inet_connection_sock_af_ops subflow_specific;
543
544 enum mapping_status {
545         MAPPING_OK,
546         MAPPING_INVALID,
547         MAPPING_EMPTY,
548         MAPPING_DATA_FIN,
549         MAPPING_DUMMY
550 };
551
552 static u64 expand_seq(u64 old_seq, u16 old_data_len, u64 seq)
553 {
554         if ((u32)seq == (u32)old_seq)
555                 return old_seq;
556
557         /* Assume map covers data not mapped yet. */
558         return seq | ((old_seq + old_data_len + 1) & GENMASK_ULL(63, 32));
559 }
560
561 static void warn_bad_map(struct mptcp_subflow_context *subflow, u32 ssn)
562 {
563         WARN_ONCE(1, "Bad mapping: ssn=%d map_seq=%d map_data_len=%d",
564                   ssn, subflow->map_subflow_seq, subflow->map_data_len);
565 }
566
567 static bool skb_is_fully_mapped(struct sock *ssk, struct sk_buff *skb)
568 {
569         struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
570         unsigned int skb_consumed;
571
572         skb_consumed = tcp_sk(ssk)->copied_seq - TCP_SKB_CB(skb)->seq;
573         if (WARN_ON_ONCE(skb_consumed >= skb->len))
574                 return true;
575
576         return skb->len - skb_consumed <= subflow->map_data_len -
577                                           mptcp_subflow_get_map_offset(subflow);
578 }
579
580 static bool validate_mapping(struct sock *ssk, struct sk_buff *skb)
581 {
582         struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
583         u32 ssn = tcp_sk(ssk)->copied_seq - subflow->ssn_offset;
584
585         if (unlikely(before(ssn, subflow->map_subflow_seq))) {
586                 /* Mapping covers data later in the subflow stream,
587                  * currently unsupported.
588                  */
589                 warn_bad_map(subflow, ssn);
590                 return false;
591         }
592         if (unlikely(!before(ssn, subflow->map_subflow_seq +
593                                   subflow->map_data_len))) {
594                 /* Mapping does covers past subflow data, invalid */
595                 warn_bad_map(subflow, ssn + skb->len);
596                 return false;
597         }
598         return true;
599 }
600
601 static enum mapping_status get_mapping_status(struct sock *ssk,
602                                               struct mptcp_sock *msk)
603 {
604         struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
605         struct mptcp_ext *mpext;
606         struct sk_buff *skb;
607         u16 data_len;
608         u64 map_seq;
609
610         skb = skb_peek(&ssk->sk_receive_queue);
611         if (!skb)
612                 return MAPPING_EMPTY;
613
614         if (mptcp_check_fallback(ssk))
615                 return MAPPING_DUMMY;
616
617         mpext = mptcp_get_ext(skb);
618         if (!mpext || !mpext->use_map) {
619                 if (!subflow->map_valid && !skb->len) {
620                         /* the TCP stack deliver 0 len FIN pkt to the receive
621                          * queue, that is the only 0len pkts ever expected here,
622                          * and we can admit no mapping only for 0 len pkts
623                          */
624                         if (!(TCP_SKB_CB(skb)->tcp_flags & TCPHDR_FIN))
625                                 WARN_ONCE(1, "0len seq %d:%d flags %x",
626                                           TCP_SKB_CB(skb)->seq,
627                                           TCP_SKB_CB(skb)->end_seq,
628                                           TCP_SKB_CB(skb)->tcp_flags);
629                         sk_eat_skb(ssk, skb);
630                         return MAPPING_EMPTY;
631                 }
632
633                 if (!subflow->map_valid)
634                         return MAPPING_INVALID;
635
636                 goto validate_seq;
637         }
638
639         pr_debug("seq=%llu is64=%d ssn=%u data_len=%u data_fin=%d",
640                  mpext->data_seq, mpext->dsn64, mpext->subflow_seq,
641                  mpext->data_len, mpext->data_fin);
642
643         data_len = mpext->data_len;
644         if (data_len == 0) {
645                 pr_err("Infinite mapping not handled");
646                 MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_INFINITEMAPRX);
647                 return MAPPING_INVALID;
648         }
649
650         if (mpext->data_fin == 1) {
651                 if (data_len == 1) {
652                         mptcp_update_rcv_data_fin(msk, mpext->data_seq);
653                         pr_debug("DATA_FIN with no payload seq=%llu", mpext->data_seq);
654                         if (subflow->map_valid) {
655                                 /* A DATA_FIN might arrive in a DSS
656                                  * option before the previous mapping
657                                  * has been fully consumed. Continue
658                                  * handling the existing mapping.
659                                  */
660                                 skb_ext_del(skb, SKB_EXT_MPTCP);
661                                 return MAPPING_OK;
662                         } else {
663                                 return MAPPING_DATA_FIN;
664                         }
665                 } else {
666                         mptcp_update_rcv_data_fin(msk, mpext->data_seq + data_len);
667                         pr_debug("DATA_FIN with mapping seq=%llu", mpext->data_seq + data_len);
668                 }
669
670                 /* Adjust for DATA_FIN using 1 byte of sequence space */
671                 data_len--;
672         }
673
674         if (!mpext->dsn64) {
675                 map_seq = expand_seq(subflow->map_seq, subflow->map_data_len,
676                                      mpext->data_seq);
677                 subflow->use_64bit_ack = 0;
678                 pr_debug("expanded seq=%llu", subflow->map_seq);
679         } else {
680                 map_seq = mpext->data_seq;
681                 subflow->use_64bit_ack = 1;
682         }
683
684         if (subflow->map_valid) {
685                 /* Allow replacing only with an identical map */
686                 if (subflow->map_seq == map_seq &&
687                     subflow->map_subflow_seq == mpext->subflow_seq &&
688                     subflow->map_data_len == data_len) {
689                         skb_ext_del(skb, SKB_EXT_MPTCP);
690                         return MAPPING_OK;
691                 }
692
693                 /* If this skb data are fully covered by the current mapping,
694                  * the new map would need caching, which is not supported
695                  */
696                 if (skb_is_fully_mapped(ssk, skb)) {
697                         MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_DSSNOMATCH);
698                         return MAPPING_INVALID;
699                 }
700
701                 /* will validate the next map after consuming the current one */
702                 return MAPPING_OK;
703         }
704
705         subflow->map_seq = map_seq;
706         subflow->map_subflow_seq = mpext->subflow_seq;
707         subflow->map_data_len = data_len;
708         subflow->map_valid = 1;
709         subflow->mpc_map = mpext->mpc_map;
710         pr_debug("new map seq=%llu subflow_seq=%u data_len=%u",
711                  subflow->map_seq, subflow->map_subflow_seq,
712                  subflow->map_data_len);
713
714 validate_seq:
715         /* we revalidate valid mapping on new skb, because we must ensure
716          * the current skb is completely covered by the available mapping
717          */
718         if (!validate_mapping(ssk, skb))
719                 return MAPPING_INVALID;
720
721         skb_ext_del(skb, SKB_EXT_MPTCP);
722         return MAPPING_OK;
723 }
724
725 static int subflow_read_actor(read_descriptor_t *desc,
726                               struct sk_buff *skb,
727                               unsigned int offset, size_t len)
728 {
729         size_t copy_len = min(desc->count, len);
730
731         desc->count -= copy_len;
732
733         pr_debug("flushed %zu bytes, %zu left", copy_len, desc->count);
734         return copy_len;
735 }
736
737 static bool subflow_check_data_avail(struct sock *ssk)
738 {
739         struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
740         enum mapping_status status;
741         struct mptcp_sock *msk;
742         struct sk_buff *skb;
743
744         pr_debug("msk=%p ssk=%p data_avail=%d skb=%p", subflow->conn, ssk,
745                  subflow->data_avail, skb_peek(&ssk->sk_receive_queue));
746         if (subflow->data_avail)
747                 return true;
748
749         msk = mptcp_sk(subflow->conn);
750         for (;;) {
751                 u32 map_remaining;
752                 size_t delta;
753                 u64 ack_seq;
754                 u64 old_ack;
755
756                 status = get_mapping_status(ssk, msk);
757                 pr_debug("msk=%p ssk=%p status=%d", msk, ssk, status);
758                 if (status == MAPPING_INVALID) {
759                         ssk->sk_err = EBADMSG;
760                         goto fatal;
761                 }
762                 if (status == MAPPING_DUMMY) {
763                         __mptcp_do_fallback(msk);
764                         skb = skb_peek(&ssk->sk_receive_queue);
765                         subflow->map_valid = 1;
766                         subflow->map_seq = READ_ONCE(msk->ack_seq);
767                         subflow->map_data_len = skb->len;
768                         subflow->map_subflow_seq = tcp_sk(ssk)->copied_seq -
769                                                    subflow->ssn_offset;
770                         return true;
771                 }
772
773                 if (status != MAPPING_OK)
774                         return false;
775
776                 skb = skb_peek(&ssk->sk_receive_queue);
777                 if (WARN_ON_ONCE(!skb))
778                         return false;
779
780                 /* if msk lacks the remote key, this subflow must provide an
781                  * MP_CAPABLE-based mapping
782                  */
783                 if (unlikely(!READ_ONCE(msk->can_ack))) {
784                         if (!subflow->mpc_map) {
785                                 ssk->sk_err = EBADMSG;
786                                 goto fatal;
787                         }
788                         WRITE_ONCE(msk->remote_key, subflow->remote_key);
789                         WRITE_ONCE(msk->ack_seq, subflow->map_seq);
790                         WRITE_ONCE(msk->can_ack, true);
791                 }
792
793                 old_ack = READ_ONCE(msk->ack_seq);
794                 ack_seq = mptcp_subflow_get_mapped_dsn(subflow);
795                 pr_debug("msk ack_seq=%llx subflow ack_seq=%llx", old_ack,
796                          ack_seq);
797                 if (ack_seq == old_ack)
798                         break;
799
800                 /* only accept in-sequence mapping. Old values are spurious
801                  * retransmission; we can hit "future" values on active backup
802                  * subflow switch, we relay on retransmissions to get
803                  * in-sequence data.
804                  * Cuncurrent subflows support will require subflow data
805                  * reordering
806                  */
807                 map_remaining = subflow->map_data_len -
808                                 mptcp_subflow_get_map_offset(subflow);
809                 if (before64(ack_seq, old_ack))
810                         delta = min_t(size_t, old_ack - ack_seq, map_remaining);
811                 else
812                         delta = min_t(size_t, ack_seq - old_ack, map_remaining);
813
814                 /* discard mapped data */
815                 pr_debug("discarding %zu bytes, current map len=%d", delta,
816                          map_remaining);
817                 if (delta) {
818                         read_descriptor_t desc = {
819                                 .count = delta,
820                         };
821                         int ret;
822
823                         ret = tcp_read_sock(ssk, &desc, subflow_read_actor);
824                         if (ret < 0) {
825                                 ssk->sk_err = -ret;
826                                 goto fatal;
827                         }
828                         if (ret < delta)
829                                 return false;
830                         if (delta == map_remaining)
831                                 subflow->map_valid = 0;
832                 }
833         }
834         return true;
835
836 fatal:
837         /* fatal protocol error, close the socket */
838         /* This barrier is coupled with smp_rmb() in tcp_poll() */
839         smp_wmb();
840         ssk->sk_error_report(ssk);
841         tcp_set_state(ssk, TCP_CLOSE);
842         tcp_send_active_reset(ssk, GFP_ATOMIC);
843         return false;
844 }
845
846 bool mptcp_subflow_data_available(struct sock *sk)
847 {
848         struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
849         struct sk_buff *skb;
850
851         /* check if current mapping is still valid */
852         if (subflow->map_valid &&
853             mptcp_subflow_get_map_offset(subflow) >= subflow->map_data_len) {
854                 subflow->map_valid = 0;
855                 subflow->data_avail = 0;
856
857                 pr_debug("Done with mapping: seq=%u data_len=%u",
858                          subflow->map_subflow_seq,
859                          subflow->map_data_len);
860         }
861
862         if (!subflow_check_data_avail(sk)) {
863                 subflow->data_avail = 0;
864                 return false;
865         }
866
867         skb = skb_peek(&sk->sk_receive_queue);
868         subflow->data_avail = skb &&
869                        before(tcp_sk(sk)->copied_seq, TCP_SKB_CB(skb)->end_seq);
870         return subflow->data_avail;
871 }
872
873 /* If ssk has an mptcp parent socket, use the mptcp rcvbuf occupancy,
874  * not the ssk one.
875  *
876  * In mptcp, rwin is about the mptcp-level connection data.
877  *
878  * Data that is still on the ssk rx queue can thus be ignored,
879  * as far as mptcp peer is concerened that data is still inflight.
880  * DSS ACK is updated when skb is moved to the mptcp rx queue.
881  */
882 void mptcp_space(const struct sock *ssk, int *space, int *full_space)
883 {
884         const struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
885         const struct sock *sk = subflow->conn;
886
887         *space = tcp_space(sk);
888         *full_space = tcp_full_space(sk);
889 }
890
891 static void subflow_data_ready(struct sock *sk)
892 {
893         struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
894         u16 state = 1 << inet_sk_state_load(sk);
895         struct sock *parent = subflow->conn;
896         struct mptcp_sock *msk;
897
898         msk = mptcp_sk(parent);
899         if (state & TCPF_LISTEN) {
900                 set_bit(MPTCP_DATA_READY, &msk->flags);
901                 parent->sk_data_ready(parent);
902                 return;
903         }
904
905         WARN_ON_ONCE(!__mptcp_check_fallback(msk) && !subflow->mp_capable &&
906                      !subflow->mp_join && !(state & TCPF_CLOSE));
907
908         if (mptcp_subflow_data_available(sk))
909                 mptcp_data_ready(parent, sk);
910 }
911
912 static void subflow_write_space(struct sock *sk)
913 {
914         struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
915         struct sock *parent = subflow->conn;
916
917         sk_stream_write_space(sk);
918         if (sk_stream_is_writeable(sk)) {
919                 set_bit(MPTCP_SEND_SPACE, &mptcp_sk(parent)->flags);
920                 smp_mb__after_atomic();
921                 /* set SEND_SPACE before sk_stream_write_space clears NOSPACE */
922                 sk_stream_write_space(parent);
923         }
924 }
925
926 static struct inet_connection_sock_af_ops *
927 subflow_default_af_ops(struct sock *sk)
928 {
929 #if IS_ENABLED(CONFIG_MPTCP_IPV6)
930         if (sk->sk_family == AF_INET6)
931                 return &subflow_v6_specific;
932 #endif
933         return &subflow_specific;
934 }
935
936 #if IS_ENABLED(CONFIG_MPTCP_IPV6)
937 void mptcpv6_handle_mapped(struct sock *sk, bool mapped)
938 {
939         struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
940         struct inet_connection_sock *icsk = inet_csk(sk);
941         struct inet_connection_sock_af_ops *target;
942
943         target = mapped ? &subflow_v6m_specific : subflow_default_af_ops(sk);
944
945         pr_debug("subflow=%p family=%d ops=%p target=%p mapped=%d",
946                  subflow, sk->sk_family, icsk->icsk_af_ops, target, mapped);
947
948         if (likely(icsk->icsk_af_ops == target))
949                 return;
950
951         subflow->icsk_af_ops = icsk->icsk_af_ops;
952         icsk->icsk_af_ops = target;
953 }
954 #endif
955
956 static void mptcp_info2sockaddr(const struct mptcp_addr_info *info,
957                                 struct sockaddr_storage *addr)
958 {
959         memset(addr, 0, sizeof(*addr));
960         addr->ss_family = info->family;
961         if (addr->ss_family == AF_INET) {
962                 struct sockaddr_in *in_addr = (struct sockaddr_in *)addr;
963
964                 in_addr->sin_addr = info->addr;
965                 in_addr->sin_port = info->port;
966         }
967 #if IS_ENABLED(CONFIG_MPTCP_IPV6)
968         else if (addr->ss_family == AF_INET6) {
969                 struct sockaddr_in6 *in6_addr = (struct sockaddr_in6 *)addr;
970
971                 in6_addr->sin6_addr = info->addr6;
972                 in6_addr->sin6_port = info->port;
973         }
974 #endif
975 }
976
977 int __mptcp_subflow_connect(struct sock *sk, int ifindex,
978                             const struct mptcp_addr_info *loc,
979                             const struct mptcp_addr_info *remote)
980 {
981         struct mptcp_sock *msk = mptcp_sk(sk);
982         struct mptcp_subflow_context *subflow;
983         struct sockaddr_storage addr;
984         int local_id = loc->id;
985         struct socket *sf;
986         struct sock *ssk;
987         u32 remote_token;
988         int addrlen;
989         int err;
990
991         if (!mptcp_is_fully_established(sk))
992                 return -ENOTCONN;
993
994         err = mptcp_subflow_create_socket(sk, &sf);
995         if (err)
996                 return err;
997
998         ssk = sf->sk;
999         subflow = mptcp_subflow_ctx(ssk);
1000         do {
1001                 get_random_bytes(&subflow->local_nonce, sizeof(u32));
1002         } while (!subflow->local_nonce);
1003
1004         if (!local_id) {
1005                 err = mptcp_pm_get_local_id(msk, (struct sock_common *)ssk);
1006                 if (err < 0)
1007                         goto failed;
1008
1009                 local_id = err;
1010         }
1011
1012         subflow->remote_key = msk->remote_key;
1013         subflow->local_key = msk->local_key;
1014         subflow->token = msk->token;
1015         mptcp_info2sockaddr(loc, &addr);
1016
1017         addrlen = sizeof(struct sockaddr_in);
1018 #if IS_ENABLED(CONFIG_MPTCP_IPV6)
1019         if (loc->family == AF_INET6)
1020                 addrlen = sizeof(struct sockaddr_in6);
1021 #endif
1022         ssk->sk_bound_dev_if = ifindex;
1023         err = kernel_bind(sf, (struct sockaddr *)&addr, addrlen);
1024         if (err)
1025                 goto failed;
1026
1027         mptcp_crypto_key_sha(subflow->remote_key, &remote_token, NULL);
1028         pr_debug("msk=%p remote_token=%u local_id=%d", msk, remote_token,
1029                  local_id);
1030         subflow->remote_token = remote_token;
1031         subflow->local_id = local_id;
1032         subflow->request_join = 1;
1033         subflow->request_bkup = 1;
1034         mptcp_info2sockaddr(remote, &addr);
1035
1036         err = kernel_connect(sf, (struct sockaddr *)&addr, addrlen, O_NONBLOCK);
1037         if (err && err != -EINPROGRESS)
1038                 goto failed;
1039
1040         spin_lock_bh(&msk->join_list_lock);
1041         list_add_tail(&subflow->node, &msk->join_list);
1042         spin_unlock_bh(&msk->join_list_lock);
1043
1044         return err;
1045
1046 failed:
1047         sock_release(sf);
1048         return err;
1049 }
1050
1051 int mptcp_subflow_create_socket(struct sock *sk, struct socket **new_sock)
1052 {
1053         struct mptcp_subflow_context *subflow;
1054         struct net *net = sock_net(sk);
1055         struct socket *sf;
1056         int err;
1057
1058         err = sock_create_kern(net, sk->sk_family, SOCK_STREAM, IPPROTO_TCP,
1059                                &sf);
1060         if (err)
1061                 return err;
1062
1063         lock_sock(sf->sk);
1064
1065         /* kernel sockets do not by default acquire net ref, but TCP timer
1066          * needs it.
1067          */
1068         sf->sk->sk_net_refcnt = 1;
1069         get_net(net);
1070 #ifdef CONFIG_PROC_FS
1071         this_cpu_add(*net->core.sock_inuse, 1);
1072 #endif
1073         err = tcp_set_ulp(sf->sk, "mptcp");
1074         release_sock(sf->sk);
1075
1076         if (err) {
1077                 sock_release(sf);
1078                 return err;
1079         }
1080
1081         /* the newly created socket really belongs to the owning MPTCP master
1082          * socket, even if for additional subflows the allocation is performed
1083          * by a kernel workqueue. Adjust inode references, so that the
1084          * procfs/diag interaces really show this one belonging to the correct
1085          * user.
1086          */
1087         SOCK_INODE(sf)->i_ino = SOCK_INODE(sk->sk_socket)->i_ino;
1088         SOCK_INODE(sf)->i_uid = SOCK_INODE(sk->sk_socket)->i_uid;
1089         SOCK_INODE(sf)->i_gid = SOCK_INODE(sk->sk_socket)->i_gid;
1090
1091         subflow = mptcp_subflow_ctx(sf->sk);
1092         pr_debug("subflow=%p", subflow);
1093
1094         *new_sock = sf;
1095         sock_hold(sk);
1096         subflow->conn = sk;
1097
1098         return 0;
1099 }
1100
1101 static struct mptcp_subflow_context *subflow_create_ctx(struct sock *sk,
1102                                                         gfp_t priority)
1103 {
1104         struct inet_connection_sock *icsk = inet_csk(sk);
1105         struct mptcp_subflow_context *ctx;
1106
1107         ctx = kzalloc(sizeof(*ctx), priority);
1108         if (!ctx)
1109                 return NULL;
1110
1111         rcu_assign_pointer(icsk->icsk_ulp_data, ctx);
1112         INIT_LIST_HEAD(&ctx->node);
1113
1114         pr_debug("subflow=%p", ctx);
1115
1116         ctx->tcp_sock = sk;
1117
1118         return ctx;
1119 }
1120
1121 static void __subflow_state_change(struct sock *sk)
1122 {
1123         struct socket_wq *wq;
1124
1125         rcu_read_lock();
1126         wq = rcu_dereference(sk->sk_wq);
1127         if (skwq_has_sleeper(wq))
1128                 wake_up_interruptible_all(&wq->wait);
1129         rcu_read_unlock();
1130 }
1131
1132 static bool subflow_is_done(const struct sock *sk)
1133 {
1134         return sk->sk_shutdown & RCV_SHUTDOWN || sk->sk_state == TCP_CLOSE;
1135 }
1136
1137 static void subflow_state_change(struct sock *sk)
1138 {
1139         struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
1140         struct sock *parent = subflow->conn;
1141
1142         __subflow_state_change(sk);
1143
1144         if (subflow_simultaneous_connect(sk)) {
1145                 mptcp_do_fallback(sk);
1146                 mptcp_rcv_space_init(mptcp_sk(parent), sk);
1147                 pr_fallback(mptcp_sk(parent));
1148                 subflow->conn_finished = 1;
1149                 if (inet_sk_state_load(parent) == TCP_SYN_SENT) {
1150                         inet_sk_state_store(parent, TCP_ESTABLISHED);
1151                         parent->sk_state_change(parent);
1152                 }
1153         }
1154
1155         /* as recvmsg() does not acquire the subflow socket for ssk selection
1156          * a fin packet carrying a DSS can be unnoticed if we don't trigger
1157          * the data available machinery here.
1158          */
1159         if (mptcp_subflow_data_available(sk))
1160                 mptcp_data_ready(parent, sk);
1161
1162         if (__mptcp_check_fallback(mptcp_sk(parent)) &&
1163             !(parent->sk_shutdown & RCV_SHUTDOWN) &&
1164             !subflow->rx_eof && subflow_is_done(sk)) {
1165                 subflow->rx_eof = 1;
1166                 mptcp_subflow_eof(parent);
1167         }
1168 }
1169
1170 static int subflow_ulp_init(struct sock *sk)
1171 {
1172         struct inet_connection_sock *icsk = inet_csk(sk);
1173         struct mptcp_subflow_context *ctx;
1174         struct tcp_sock *tp = tcp_sk(sk);
1175         int err = 0;
1176
1177         /* disallow attaching ULP to a socket unless it has been
1178          * created with sock_create_kern()
1179          */
1180         if (!sk->sk_kern_sock) {
1181                 err = -EOPNOTSUPP;
1182                 goto out;
1183         }
1184
1185         ctx = subflow_create_ctx(sk, GFP_KERNEL);
1186         if (!ctx) {
1187                 err = -ENOMEM;
1188                 goto out;
1189         }
1190
1191         pr_debug("subflow=%p, family=%d", ctx, sk->sk_family);
1192
1193         tp->is_mptcp = 1;
1194         ctx->icsk_af_ops = icsk->icsk_af_ops;
1195         icsk->icsk_af_ops = subflow_default_af_ops(sk);
1196         ctx->tcp_data_ready = sk->sk_data_ready;
1197         ctx->tcp_state_change = sk->sk_state_change;
1198         ctx->tcp_write_space = sk->sk_write_space;
1199         sk->sk_data_ready = subflow_data_ready;
1200         sk->sk_write_space = subflow_write_space;
1201         sk->sk_state_change = subflow_state_change;
1202 out:
1203         return err;
1204 }
1205
1206 static void subflow_ulp_release(struct sock *sk)
1207 {
1208         struct mptcp_subflow_context *ctx = mptcp_subflow_ctx(sk);
1209
1210         if (!ctx)
1211                 return;
1212
1213         if (ctx->conn)
1214                 sock_put(ctx->conn);
1215
1216         kfree_rcu(ctx, rcu);
1217 }
1218
1219 static void subflow_ulp_clone(const struct request_sock *req,
1220                               struct sock *newsk,
1221                               const gfp_t priority)
1222 {
1223         struct mptcp_subflow_request_sock *subflow_req = mptcp_subflow_rsk(req);
1224         struct mptcp_subflow_context *old_ctx = mptcp_subflow_ctx(newsk);
1225         struct mptcp_subflow_context *new_ctx;
1226
1227         if (!tcp_rsk(req)->is_mptcp ||
1228             (!subflow_req->mp_capable && !subflow_req->mp_join)) {
1229                 subflow_ulp_fallback(newsk, old_ctx);
1230                 return;
1231         }
1232
1233         new_ctx = subflow_create_ctx(newsk, priority);
1234         if (!new_ctx) {
1235                 subflow_ulp_fallback(newsk, old_ctx);
1236                 return;
1237         }
1238
1239         new_ctx->conn_finished = 1;
1240         new_ctx->icsk_af_ops = old_ctx->icsk_af_ops;
1241         new_ctx->tcp_data_ready = old_ctx->tcp_data_ready;
1242         new_ctx->tcp_state_change = old_ctx->tcp_state_change;
1243         new_ctx->tcp_write_space = old_ctx->tcp_write_space;
1244         new_ctx->rel_write_seq = 1;
1245         new_ctx->tcp_sock = newsk;
1246
1247         if (subflow_req->mp_capable) {
1248                 /* see comments in subflow_syn_recv_sock(), MPTCP connection
1249                  * is fully established only after we receive the remote key
1250                  */
1251                 new_ctx->mp_capable = 1;
1252                 new_ctx->local_key = subflow_req->local_key;
1253                 new_ctx->token = subflow_req->token;
1254                 new_ctx->ssn_offset = subflow_req->ssn_offset;
1255                 new_ctx->idsn = subflow_req->idsn;
1256         } else if (subflow_req->mp_join) {
1257                 new_ctx->ssn_offset = subflow_req->ssn_offset;
1258                 new_ctx->mp_join = 1;
1259                 new_ctx->fully_established = 1;
1260                 new_ctx->backup = subflow_req->backup;
1261                 new_ctx->local_id = subflow_req->local_id;
1262                 new_ctx->token = subflow_req->token;
1263                 new_ctx->thmac = subflow_req->thmac;
1264         }
1265 }
1266
1267 static struct tcp_ulp_ops subflow_ulp_ops __read_mostly = {
1268         .name           = "mptcp",
1269         .owner          = THIS_MODULE,
1270         .init           = subflow_ulp_init,
1271         .release        = subflow_ulp_release,
1272         .clone          = subflow_ulp_clone,
1273 };
1274
1275 static int subflow_ops_init(struct request_sock_ops *subflow_ops)
1276 {
1277         subflow_ops->obj_size = sizeof(struct mptcp_subflow_request_sock);
1278         subflow_ops->slab_name = "request_sock_subflow";
1279
1280         subflow_ops->slab = kmem_cache_create(subflow_ops->slab_name,
1281                                               subflow_ops->obj_size, 0,
1282                                               SLAB_ACCOUNT |
1283                                               SLAB_TYPESAFE_BY_RCU,
1284                                               NULL);
1285         if (!subflow_ops->slab)
1286                 return -ENOMEM;
1287
1288         subflow_ops->destructor = subflow_req_destructor;
1289
1290         return 0;
1291 }
1292
1293 void __init mptcp_subflow_init(void)
1294 {
1295         subflow_request_sock_ops = tcp_request_sock_ops;
1296         if (subflow_ops_init(&subflow_request_sock_ops) != 0)
1297                 panic("MPTCP: failed to init subflow request sock ops\n");
1298
1299         subflow_request_sock_ipv4_ops = tcp_request_sock_ipv4_ops;
1300         subflow_request_sock_ipv4_ops.init_req = subflow_v4_init_req;
1301
1302         subflow_specific = ipv4_specific;
1303         subflow_specific.conn_request = subflow_v4_conn_request;
1304         subflow_specific.syn_recv_sock = subflow_syn_recv_sock;
1305         subflow_specific.sk_rx_dst_set = subflow_finish_connect;
1306
1307 #if IS_ENABLED(CONFIG_MPTCP_IPV6)
1308         subflow_request_sock_ipv6_ops = tcp_request_sock_ipv6_ops;
1309         subflow_request_sock_ipv6_ops.init_req = subflow_v6_init_req;
1310
1311         subflow_v6_specific = ipv6_specific;
1312         subflow_v6_specific.conn_request = subflow_v6_conn_request;
1313         subflow_v6_specific.syn_recv_sock = subflow_syn_recv_sock;
1314         subflow_v6_specific.sk_rx_dst_set = subflow_finish_connect;
1315
1316         subflow_v6m_specific = subflow_v6_specific;
1317         subflow_v6m_specific.queue_xmit = ipv4_specific.queue_xmit;
1318         subflow_v6m_specific.send_check = ipv4_specific.send_check;
1319         subflow_v6m_specific.net_header_len = ipv4_specific.net_header_len;
1320         subflow_v6m_specific.mtu_reduced = ipv4_specific.mtu_reduced;
1321         subflow_v6m_specific.net_frag_header_len = 0;
1322 #endif
1323
1324         mptcp_diag_subflow_init(&subflow_ulp_ops);
1325
1326         if (tcp_register_ulp(&subflow_ulp_ops) != 0)
1327                 panic("MPTCP: failed to register subflows to ULP\n");
1328 }