xref: /kernel/linux/linux-6.6/net/mptcp/sockopt.c (revision 62306a36)
1// SPDX-License-Identifier: GPL-2.0
2/* Multipath TCP
3 *
4 * Copyright (c) 2021, Red Hat.
5 */
6
7#define pr_fmt(fmt) "MPTCP: " fmt
8
9#include <linux/kernel.h>
10#include <linux/module.h>
11#include <net/sock.h>
12#include <net/protocol.h>
13#include <net/tcp.h>
14#include <net/mptcp.h>
15#include "protocol.h"
16
17#define MIN_INFO_OPTLEN_SIZE		16
18#define MIN_FULL_INFO_OPTLEN_SIZE	40
19
20static struct sock *__mptcp_tcp_fallback(struct mptcp_sock *msk)
21{
22	msk_owned_by_me(msk);
23
24	if (likely(!__mptcp_check_fallback(msk)))
25		return NULL;
26
27	return msk->first;
28}
29
30static u32 sockopt_seq_reset(const struct sock *sk)
31{
32	sock_owned_by_me(sk);
33
34	/* Highbits contain state.  Allows to distinguish sockopt_seq
35	 * of listener and established:
36	 * s0 = new_listener()
37	 * sockopt(s0) - seq is 1
38	 * s1 = accept(s0) - s1 inherits seq 1 if listener sk (s0)
39	 * sockopt(s0) - seq increments to 2 on s0
40	 * sockopt(s1) // seq increments to 2 on s1 (different option)
41	 * new ssk completes join, inherits options from s0 // seq 2
42	 * Needs sync from mptcp join logic, but ssk->seq == msk->seq
43	 *
44	 * Set High order bits to sk_state so ssk->seq == msk->seq test
45	 * will fail.
46	 */
47
48	return (u32)sk->sk_state << 24u;
49}
50
51static void sockopt_seq_inc(struct mptcp_sock *msk)
52{
53	u32 seq = (msk->setsockopt_seq + 1) & 0x00ffffff;
54
55	msk->setsockopt_seq = sockopt_seq_reset((struct sock *)msk) + seq;
56}
57
58static int mptcp_get_int_option(struct mptcp_sock *msk, sockptr_t optval,
59				unsigned int optlen, int *val)
60{
61	if (optlen < sizeof(int))
62		return -EINVAL;
63
64	if (copy_from_sockptr(val, optval, sizeof(*val)))
65		return -EFAULT;
66
67	return 0;
68}
69
70static void mptcp_sol_socket_sync_intval(struct mptcp_sock *msk, int optname, int val)
71{
72	struct mptcp_subflow_context *subflow;
73	struct sock *sk = (struct sock *)msk;
74
75	lock_sock(sk);
76	sockopt_seq_inc(msk);
77
78	mptcp_for_each_subflow(msk, subflow) {
79		struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
80		bool slow = lock_sock_fast(ssk);
81
82		switch (optname) {
83		case SO_DEBUG:
84			sock_valbool_flag(ssk, SOCK_DBG, !!val);
85			break;
86		case SO_KEEPALIVE:
87			if (ssk->sk_prot->keepalive)
88				ssk->sk_prot->keepalive(ssk, !!val);
89			sock_valbool_flag(ssk, SOCK_KEEPOPEN, !!val);
90			break;
91		case SO_PRIORITY:
92			ssk->sk_priority = val;
93			break;
94		case SO_SNDBUF:
95		case SO_SNDBUFFORCE:
96			ssk->sk_userlocks |= SOCK_SNDBUF_LOCK;
97			WRITE_ONCE(ssk->sk_sndbuf, sk->sk_sndbuf);
98			mptcp_subflow_ctx(ssk)->cached_sndbuf = sk->sk_sndbuf;
99			break;
100		case SO_RCVBUF:
101		case SO_RCVBUFFORCE:
102			ssk->sk_userlocks |= SOCK_RCVBUF_LOCK;
103			WRITE_ONCE(ssk->sk_rcvbuf, sk->sk_rcvbuf);
104			break;
105		case SO_MARK:
106			if (READ_ONCE(ssk->sk_mark) != sk->sk_mark) {
107				WRITE_ONCE(ssk->sk_mark, sk->sk_mark);
108				sk_dst_reset(ssk);
109			}
110			break;
111		case SO_INCOMING_CPU:
112			WRITE_ONCE(ssk->sk_incoming_cpu, val);
113			break;
114		}
115
116		subflow->setsockopt_seq = msk->setsockopt_seq;
117		unlock_sock_fast(ssk, slow);
118	}
119
120	release_sock(sk);
121}
122
123static int mptcp_sol_socket_intval(struct mptcp_sock *msk, int optname, int val)
124{
125	sockptr_t optval = KERNEL_SOCKPTR(&val);
126	struct sock *sk = (struct sock *)msk;
127	int ret;
128
129	ret = sock_setsockopt(sk->sk_socket, SOL_SOCKET, optname,
130			      optval, sizeof(val));
131	if (ret)
132		return ret;
133
134	mptcp_sol_socket_sync_intval(msk, optname, val);
135	return 0;
136}
137
138static void mptcp_so_incoming_cpu(struct mptcp_sock *msk, int val)
139{
140	struct sock *sk = (struct sock *)msk;
141
142	WRITE_ONCE(sk->sk_incoming_cpu, val);
143
144	mptcp_sol_socket_sync_intval(msk, SO_INCOMING_CPU, val);
145}
146
147static int mptcp_setsockopt_sol_socket_tstamp(struct mptcp_sock *msk, int optname, int val)
148{
149	sockptr_t optval = KERNEL_SOCKPTR(&val);
150	struct mptcp_subflow_context *subflow;
151	struct sock *sk = (struct sock *)msk;
152	int ret;
153
154	ret = sock_setsockopt(sk->sk_socket, SOL_SOCKET, optname,
155			      optval, sizeof(val));
156	if (ret)
157		return ret;
158
159	lock_sock(sk);
160	mptcp_for_each_subflow(msk, subflow) {
161		struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
162		bool slow = lock_sock_fast(ssk);
163
164		sock_set_timestamp(sk, optname, !!val);
165		unlock_sock_fast(ssk, slow);
166	}
167
168	release_sock(sk);
169	return 0;
170}
171
172static int mptcp_setsockopt_sol_socket_int(struct mptcp_sock *msk, int optname,
173					   sockptr_t optval,
174					   unsigned int optlen)
175{
176	int val, ret;
177
178	ret = mptcp_get_int_option(msk, optval, optlen, &val);
179	if (ret)
180		return ret;
181
182	switch (optname) {
183	case SO_KEEPALIVE:
184		mptcp_sol_socket_sync_intval(msk, optname, val);
185		return 0;
186	case SO_DEBUG:
187	case SO_MARK:
188	case SO_PRIORITY:
189	case SO_SNDBUF:
190	case SO_SNDBUFFORCE:
191	case SO_RCVBUF:
192	case SO_RCVBUFFORCE:
193		return mptcp_sol_socket_intval(msk, optname, val);
194	case SO_INCOMING_CPU:
195		mptcp_so_incoming_cpu(msk, val);
196		return 0;
197	case SO_TIMESTAMP_OLD:
198	case SO_TIMESTAMP_NEW:
199	case SO_TIMESTAMPNS_OLD:
200	case SO_TIMESTAMPNS_NEW:
201		return mptcp_setsockopt_sol_socket_tstamp(msk, optname, val);
202	}
203
204	return -ENOPROTOOPT;
205}
206
207static int mptcp_setsockopt_sol_socket_timestamping(struct mptcp_sock *msk,
208						    int optname,
209						    sockptr_t optval,
210						    unsigned int optlen)
211{
212	struct mptcp_subflow_context *subflow;
213	struct sock *sk = (struct sock *)msk;
214	struct so_timestamping timestamping;
215	int ret;
216
217	if (optlen == sizeof(timestamping)) {
218		if (copy_from_sockptr(&timestamping, optval,
219				      sizeof(timestamping)))
220			return -EFAULT;
221	} else if (optlen == sizeof(int)) {
222		memset(&timestamping, 0, sizeof(timestamping));
223
224		if (copy_from_sockptr(&timestamping.flags, optval, sizeof(int)))
225			return -EFAULT;
226	} else {
227		return -EINVAL;
228	}
229
230	ret = sock_setsockopt(sk->sk_socket, SOL_SOCKET, optname,
231			      KERNEL_SOCKPTR(&timestamping),
232			      sizeof(timestamping));
233	if (ret)
234		return ret;
235
236	lock_sock(sk);
237
238	mptcp_for_each_subflow(msk, subflow) {
239		struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
240		bool slow = lock_sock_fast(ssk);
241
242		sock_set_timestamping(sk, optname, timestamping);
243		unlock_sock_fast(ssk, slow);
244	}
245
246	release_sock(sk);
247
248	return 0;
249}
250
251static int mptcp_setsockopt_sol_socket_linger(struct mptcp_sock *msk, sockptr_t optval,
252					      unsigned int optlen)
253{
254	struct mptcp_subflow_context *subflow;
255	struct sock *sk = (struct sock *)msk;
256	struct linger ling;
257	sockptr_t kopt;
258	int ret;
259
260	if (optlen < sizeof(ling))
261		return -EINVAL;
262
263	if (copy_from_sockptr(&ling, optval, sizeof(ling)))
264		return -EFAULT;
265
266	kopt = KERNEL_SOCKPTR(&ling);
267	ret = sock_setsockopt(sk->sk_socket, SOL_SOCKET, SO_LINGER, kopt, sizeof(ling));
268	if (ret)
269		return ret;
270
271	lock_sock(sk);
272	sockopt_seq_inc(msk);
273	mptcp_for_each_subflow(msk, subflow) {
274		struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
275		bool slow = lock_sock_fast(ssk);
276
277		if (!ling.l_onoff) {
278			sock_reset_flag(ssk, SOCK_LINGER);
279		} else {
280			ssk->sk_lingertime = sk->sk_lingertime;
281			sock_set_flag(ssk, SOCK_LINGER);
282		}
283
284		subflow->setsockopt_seq = msk->setsockopt_seq;
285		unlock_sock_fast(ssk, slow);
286	}
287
288	release_sock(sk);
289	return 0;
290}
291
292static int mptcp_setsockopt_sol_socket(struct mptcp_sock *msk, int optname,
293				       sockptr_t optval, unsigned int optlen)
294{
295	struct sock *sk = (struct sock *)msk;
296	struct sock *ssk;
297	int ret;
298
299	switch (optname) {
300	case SO_REUSEPORT:
301	case SO_REUSEADDR:
302	case SO_BINDTODEVICE:
303	case SO_BINDTOIFINDEX:
304		lock_sock(sk);
305		ssk = __mptcp_nmpc_sk(msk);
306		if (IS_ERR(ssk)) {
307			release_sock(sk);
308			return PTR_ERR(ssk);
309		}
310
311		ret = sk_setsockopt(ssk, SOL_SOCKET, optname, optval, optlen);
312		if (ret == 0) {
313			if (optname == SO_REUSEPORT)
314				sk->sk_reuseport = ssk->sk_reuseport;
315			else if (optname == SO_REUSEADDR)
316				sk->sk_reuse = ssk->sk_reuse;
317			else if (optname == SO_BINDTODEVICE)
318				sk->sk_bound_dev_if = ssk->sk_bound_dev_if;
319			else if (optname == SO_BINDTOIFINDEX)
320				sk->sk_bound_dev_if = ssk->sk_bound_dev_if;
321		}
322		release_sock(sk);
323		return ret;
324	case SO_KEEPALIVE:
325	case SO_PRIORITY:
326	case SO_SNDBUF:
327	case SO_SNDBUFFORCE:
328	case SO_RCVBUF:
329	case SO_RCVBUFFORCE:
330	case SO_MARK:
331	case SO_INCOMING_CPU:
332	case SO_DEBUG:
333	case SO_TIMESTAMP_OLD:
334	case SO_TIMESTAMP_NEW:
335	case SO_TIMESTAMPNS_OLD:
336	case SO_TIMESTAMPNS_NEW:
337		return mptcp_setsockopt_sol_socket_int(msk, optname, optval,
338						       optlen);
339	case SO_TIMESTAMPING_OLD:
340	case SO_TIMESTAMPING_NEW:
341		return mptcp_setsockopt_sol_socket_timestamping(msk, optname,
342								optval, optlen);
343	case SO_LINGER:
344		return mptcp_setsockopt_sol_socket_linger(msk, optval, optlen);
345	case SO_RCVLOWAT:
346	case SO_RCVTIMEO_OLD:
347	case SO_RCVTIMEO_NEW:
348	case SO_SNDTIMEO_OLD:
349	case SO_SNDTIMEO_NEW:
350	case SO_BUSY_POLL:
351	case SO_PREFER_BUSY_POLL:
352	case SO_BUSY_POLL_BUDGET:
353		/* No need to copy: only relevant for msk */
354		return sock_setsockopt(sk->sk_socket, SOL_SOCKET, optname, optval, optlen);
355	case SO_NO_CHECK:
356	case SO_DONTROUTE:
357	case SO_BROADCAST:
358	case SO_BSDCOMPAT:
359	case SO_PASSCRED:
360	case SO_PASSPIDFD:
361	case SO_PASSSEC:
362	case SO_RXQ_OVFL:
363	case SO_WIFI_STATUS:
364	case SO_NOFCS:
365	case SO_SELECT_ERR_QUEUE:
366		return 0;
367	}
368
369	/* SO_OOBINLINE is not supported, let's avoid the related mess
370	 * SO_ATTACH_FILTER, SO_ATTACH_BPF, SO_ATTACH_REUSEPORT_CBPF,
371	 * SO_DETACH_REUSEPORT_BPF, SO_DETACH_FILTER, SO_LOCK_FILTER,
372	 * we must be careful with subflows
373	 *
374	 * SO_ATTACH_REUSEPORT_EBPF is not supported, at it checks
375	 * explicitly the sk_protocol field
376	 *
377	 * SO_PEEK_OFF is unsupported, as it is for plain TCP
378	 * SO_MAX_PACING_RATE is unsupported, we must be careful with subflows
379	 * SO_CNX_ADVICE is currently unsupported, could possibly be relevant,
380	 * but likely needs careful design
381	 *
382	 * SO_ZEROCOPY is currently unsupported, TODO in sndmsg
383	 * SO_TXTIME is currently unsupported
384	 */
385
386	return -EOPNOTSUPP;
387}
388
389static int mptcp_setsockopt_v6(struct mptcp_sock *msk, int optname,
390			       sockptr_t optval, unsigned int optlen)
391{
392	struct sock *sk = (struct sock *)msk;
393	int ret = -EOPNOTSUPP;
394	struct sock *ssk;
395
396	switch (optname) {
397	case IPV6_V6ONLY:
398	case IPV6_TRANSPARENT:
399	case IPV6_FREEBIND:
400		lock_sock(sk);
401		ssk = __mptcp_nmpc_sk(msk);
402		if (IS_ERR(ssk)) {
403			release_sock(sk);
404			return PTR_ERR(ssk);
405		}
406
407		ret = tcp_setsockopt(ssk, SOL_IPV6, optname, optval, optlen);
408		if (ret != 0) {
409			release_sock(sk);
410			return ret;
411		}
412
413		sockopt_seq_inc(msk);
414
415		switch (optname) {
416		case IPV6_V6ONLY:
417			sk->sk_ipv6only = ssk->sk_ipv6only;
418			break;
419		case IPV6_TRANSPARENT:
420			inet_assign_bit(TRANSPARENT, sk,
421					inet_test_bit(TRANSPARENT, ssk));
422			break;
423		case IPV6_FREEBIND:
424			inet_assign_bit(FREEBIND, sk,
425					inet_test_bit(FREEBIND, ssk));
426			break;
427		}
428
429		release_sock(sk);
430		break;
431	}
432
433	return ret;
434}
435
436static bool mptcp_supported_sockopt(int level, int optname)
437{
438	if (level == SOL_IP) {
439		switch (optname) {
440		/* should work fine */
441		case IP_FREEBIND:
442		case IP_TRANSPARENT:
443
444		/* the following are control cmsg related */
445		case IP_PKTINFO:
446		case IP_RECVTTL:
447		case IP_RECVTOS:
448		case IP_RECVOPTS:
449		case IP_RETOPTS:
450		case IP_PASSSEC:
451		case IP_RECVORIGDSTADDR:
452		case IP_CHECKSUM:
453		case IP_RECVFRAGSIZE:
454
455		/* common stuff that need some love */
456		case IP_TOS:
457		case IP_TTL:
458		case IP_BIND_ADDRESS_NO_PORT:
459		case IP_MTU_DISCOVER:
460		case IP_RECVERR:
461
462		/* possibly less common may deserve some love */
463		case IP_MINTTL:
464
465		/* the following is apparently a no-op for plain TCP */
466		case IP_RECVERR_RFC4884:
467			return true;
468		}
469
470		/* IP_OPTIONS is not supported, needs subflow care */
471		/* IP_HDRINCL, IP_NODEFRAG are not supported, RAW specific */
472		/* IP_MULTICAST_TTL, IP_MULTICAST_LOOP, IP_UNICAST_IF,
473		 * IP_ADD_MEMBERSHIP, IP_ADD_SOURCE_MEMBERSHIP, IP_DROP_MEMBERSHIP,
474		 * IP_DROP_SOURCE_MEMBERSHIP, IP_BLOCK_SOURCE, IP_UNBLOCK_SOURCE,
475		 * MCAST_JOIN_GROUP, MCAST_LEAVE_GROUP MCAST_JOIN_SOURCE_GROUP,
476		 * MCAST_LEAVE_SOURCE_GROUP, MCAST_BLOCK_SOURCE, MCAST_UNBLOCK_SOURCE,
477		 * MCAST_MSFILTER, IP_MULTICAST_ALL are not supported, better not deal
478		 * with mcast stuff
479		 */
480		/* IP_IPSEC_POLICY, IP_XFRM_POLICY are nut supported, unrelated here */
481		return false;
482	}
483	if (level == SOL_IPV6) {
484		switch (optname) {
485		case IPV6_V6ONLY:
486
487		/* the following are control cmsg related */
488		case IPV6_RECVPKTINFO:
489		case IPV6_2292PKTINFO:
490		case IPV6_RECVHOPLIMIT:
491		case IPV6_2292HOPLIMIT:
492		case IPV6_RECVRTHDR:
493		case IPV6_2292RTHDR:
494		case IPV6_RECVHOPOPTS:
495		case IPV6_2292HOPOPTS:
496		case IPV6_RECVDSTOPTS:
497		case IPV6_2292DSTOPTS:
498		case IPV6_RECVTCLASS:
499		case IPV6_FLOWINFO:
500		case IPV6_RECVPATHMTU:
501		case IPV6_RECVORIGDSTADDR:
502		case IPV6_RECVFRAGSIZE:
503
504		/* the following ones need some love but are quite common */
505		case IPV6_TCLASS:
506		case IPV6_TRANSPARENT:
507		case IPV6_FREEBIND:
508		case IPV6_PKTINFO:
509		case IPV6_2292PKTOPTIONS:
510		case IPV6_UNICAST_HOPS:
511		case IPV6_MTU_DISCOVER:
512		case IPV6_MTU:
513		case IPV6_RECVERR:
514		case IPV6_FLOWINFO_SEND:
515		case IPV6_FLOWLABEL_MGR:
516		case IPV6_MINHOPCOUNT:
517		case IPV6_DONTFRAG:
518		case IPV6_AUTOFLOWLABEL:
519
520		/* the following one is a no-op for plain TCP */
521		case IPV6_RECVERR_RFC4884:
522			return true;
523		}
524
525		/* IPV6_HOPOPTS, IPV6_RTHDRDSTOPTS, IPV6_RTHDR, IPV6_DSTOPTS are
526		 * not supported
527		 */
528		/* IPV6_MULTICAST_HOPS, IPV6_MULTICAST_LOOP, IPV6_UNICAST_IF,
529		 * IPV6_MULTICAST_IF, IPV6_ADDRFORM,
530		 * IPV6_ADD_MEMBERSHIP, IPV6_DROP_MEMBERSHIP, IPV6_JOIN_ANYCAST,
531		 * IPV6_LEAVE_ANYCAST, IPV6_MULTICAST_ALL, MCAST_JOIN_GROUP, MCAST_LEAVE_GROUP,
532		 * MCAST_JOIN_SOURCE_GROUP, MCAST_LEAVE_SOURCE_GROUP,
533		 * MCAST_BLOCK_SOURCE, MCAST_UNBLOCK_SOURCE, MCAST_MSFILTER
534		 * are not supported better not deal with mcast
535		 */
536		/* IPV6_ROUTER_ALERT, IPV6_ROUTER_ALERT_ISOLATE are not supported, since are evil */
537
538		/* IPV6_IPSEC_POLICY, IPV6_XFRM_POLICY are not supported */
539		/* IPV6_ADDR_PREFERENCES is not supported, we must be careful with subflows */
540		return false;
541	}
542	if (level == SOL_TCP) {
543		switch (optname) {
544		/* the following are no-op or should work just fine */
545		case TCP_THIN_DUPACK:
546		case TCP_DEFER_ACCEPT:
547
548		/* the following need some love */
549		case TCP_MAXSEG:
550		case TCP_NODELAY:
551		case TCP_THIN_LINEAR_TIMEOUTS:
552		case TCP_CONGESTION:
553		case TCP_CORK:
554		case TCP_KEEPIDLE:
555		case TCP_KEEPINTVL:
556		case TCP_KEEPCNT:
557		case TCP_SYNCNT:
558		case TCP_SAVE_SYN:
559		case TCP_LINGER2:
560		case TCP_WINDOW_CLAMP:
561		case TCP_QUICKACK:
562		case TCP_USER_TIMEOUT:
563		case TCP_TIMESTAMP:
564		case TCP_NOTSENT_LOWAT:
565		case TCP_TX_DELAY:
566		case TCP_INQ:
567		case TCP_FASTOPEN:
568		case TCP_FASTOPEN_CONNECT:
569		case TCP_FASTOPEN_KEY:
570		case TCP_FASTOPEN_NO_COOKIE:
571			return true;
572		}
573
574		/* TCP_MD5SIG, TCP_MD5SIG_EXT are not supported, MD5 is not compatible with MPTCP */
575
576		/* TCP_REPAIR, TCP_REPAIR_QUEUE, TCP_QUEUE_SEQ, TCP_REPAIR_OPTIONS,
577		 * TCP_REPAIR_WINDOW are not supported, better avoid this mess
578		 */
579	}
580	return false;
581}
582
583static int mptcp_setsockopt_sol_tcp_congestion(struct mptcp_sock *msk, sockptr_t optval,
584					       unsigned int optlen)
585{
586	struct mptcp_subflow_context *subflow;
587	struct sock *sk = (struct sock *)msk;
588	char name[TCP_CA_NAME_MAX];
589	bool cap_net_admin;
590	int ret;
591
592	if (optlen < 1)
593		return -EINVAL;
594
595	ret = strncpy_from_sockptr(name, optval,
596				   min_t(long, TCP_CA_NAME_MAX - 1, optlen));
597	if (ret < 0)
598		return -EFAULT;
599
600	name[ret] = 0;
601
602	cap_net_admin = ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN);
603
604	ret = 0;
605	lock_sock(sk);
606	sockopt_seq_inc(msk);
607	mptcp_for_each_subflow(msk, subflow) {
608		struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
609		int err;
610
611		lock_sock(ssk);
612		err = tcp_set_congestion_control(ssk, name, true, cap_net_admin);
613		if (err < 0 && ret == 0)
614			ret = err;
615		subflow->setsockopt_seq = msk->setsockopt_seq;
616		release_sock(ssk);
617	}
618
619	if (ret == 0)
620		strcpy(msk->ca_name, name);
621
622	release_sock(sk);
623	return ret;
624}
625
626static int mptcp_setsockopt_sol_tcp_cork(struct mptcp_sock *msk, sockptr_t optval,
627					 unsigned int optlen)
628{
629	struct mptcp_subflow_context *subflow;
630	struct sock *sk = (struct sock *)msk;
631	int val;
632
633	if (optlen < sizeof(int))
634		return -EINVAL;
635
636	if (copy_from_sockptr(&val, optval, sizeof(val)))
637		return -EFAULT;
638
639	lock_sock(sk);
640	sockopt_seq_inc(msk);
641	msk->cork = !!val;
642	mptcp_for_each_subflow(msk, subflow) {
643		struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
644
645		lock_sock(ssk);
646		__tcp_sock_set_cork(ssk, !!val);
647		release_sock(ssk);
648	}
649	if (!val)
650		mptcp_check_and_set_pending(sk);
651	release_sock(sk);
652
653	return 0;
654}
655
656static int mptcp_setsockopt_sol_tcp_nodelay(struct mptcp_sock *msk, sockptr_t optval,
657					    unsigned int optlen)
658{
659	struct mptcp_subflow_context *subflow;
660	struct sock *sk = (struct sock *)msk;
661	int val;
662
663	if (optlen < sizeof(int))
664		return -EINVAL;
665
666	if (copy_from_sockptr(&val, optval, sizeof(val)))
667		return -EFAULT;
668
669	lock_sock(sk);
670	sockopt_seq_inc(msk);
671	msk->nodelay = !!val;
672	mptcp_for_each_subflow(msk, subflow) {
673		struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
674
675		lock_sock(ssk);
676		__tcp_sock_set_nodelay(ssk, !!val);
677		release_sock(ssk);
678	}
679	if (val)
680		mptcp_check_and_set_pending(sk);
681	release_sock(sk);
682
683	return 0;
684}
685
686static int mptcp_setsockopt_sol_ip_set_transparent(struct mptcp_sock *msk, int optname,
687						   sockptr_t optval, unsigned int optlen)
688{
689	struct sock *sk = (struct sock *)msk;
690	struct sock *ssk;
691	int err;
692
693	err = ip_setsockopt(sk, SOL_IP, optname, optval, optlen);
694	if (err != 0)
695		return err;
696
697	lock_sock(sk);
698
699	ssk = __mptcp_nmpc_sk(msk);
700	if (IS_ERR(ssk)) {
701		release_sock(sk);
702		return PTR_ERR(ssk);
703	}
704
705	switch (optname) {
706	case IP_FREEBIND:
707		inet_assign_bit(FREEBIND, ssk, inet_test_bit(FREEBIND, sk));
708		break;
709	case IP_TRANSPARENT:
710		inet_assign_bit(TRANSPARENT, ssk,
711				inet_test_bit(TRANSPARENT, sk));
712		break;
713	default:
714		release_sock(sk);
715		WARN_ON_ONCE(1);
716		return -EOPNOTSUPP;
717	}
718
719	sockopt_seq_inc(msk);
720	release_sock(sk);
721	return 0;
722}
723
724static int mptcp_setsockopt_v4_set_tos(struct mptcp_sock *msk, int optname,
725				       sockptr_t optval, unsigned int optlen)
726{
727	struct mptcp_subflow_context *subflow;
728	struct sock *sk = (struct sock *)msk;
729	int err, val;
730
731	err = ip_setsockopt(sk, SOL_IP, optname, optval, optlen);
732
733	if (err != 0)
734		return err;
735
736	lock_sock(sk);
737	sockopt_seq_inc(msk);
738	val = inet_sk(sk)->tos;
739	mptcp_for_each_subflow(msk, subflow) {
740		struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
741		bool slow;
742
743		slow = lock_sock_fast(ssk);
744		__ip_sock_set_tos(ssk, val);
745		unlock_sock_fast(ssk, slow);
746	}
747	release_sock(sk);
748
749	return 0;
750}
751
752static int mptcp_setsockopt_v4(struct mptcp_sock *msk, int optname,
753			       sockptr_t optval, unsigned int optlen)
754{
755	switch (optname) {
756	case IP_FREEBIND:
757	case IP_TRANSPARENT:
758		return mptcp_setsockopt_sol_ip_set_transparent(msk, optname, optval, optlen);
759	case IP_TOS:
760		return mptcp_setsockopt_v4_set_tos(msk, optname, optval, optlen);
761	}
762
763	return -EOPNOTSUPP;
764}
765
766static int mptcp_setsockopt_first_sf_only(struct mptcp_sock *msk, int level, int optname,
767					  sockptr_t optval, unsigned int optlen)
768{
769	struct sock *sk = (struct sock *)msk;
770	struct sock *ssk;
771	int ret;
772
773	/* Limit to first subflow, before the connection establishment */
774	lock_sock(sk);
775	ssk = __mptcp_nmpc_sk(msk);
776	if (IS_ERR(ssk)) {
777		ret = PTR_ERR(ssk);
778		goto unlock;
779	}
780
781	ret = tcp_setsockopt(ssk, level, optname, optval, optlen);
782
783unlock:
784	release_sock(sk);
785	return ret;
786}
787
788static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *msk, int optname,
789				    sockptr_t optval, unsigned int optlen)
790{
791	struct sock *sk = (void *)msk;
792	int ret, val;
793
794	switch (optname) {
795	case TCP_INQ:
796		ret = mptcp_get_int_option(msk, optval, optlen, &val);
797		if (ret)
798			return ret;
799		if (val < 0 || val > 1)
800			return -EINVAL;
801
802		lock_sock(sk);
803		msk->recvmsg_inq = !!val;
804		release_sock(sk);
805		return 0;
806	case TCP_ULP:
807		return -EOPNOTSUPP;
808	case TCP_CONGESTION:
809		return mptcp_setsockopt_sol_tcp_congestion(msk, optval, optlen);
810	case TCP_CORK:
811		return mptcp_setsockopt_sol_tcp_cork(msk, optval, optlen);
812	case TCP_NODELAY:
813		return mptcp_setsockopt_sol_tcp_nodelay(msk, optval, optlen);
814	case TCP_DEFER_ACCEPT:
815		/* See tcp.c: TCP_DEFER_ACCEPT does not fail */
816		mptcp_setsockopt_first_sf_only(msk, SOL_TCP, optname, optval, optlen);
817		return 0;
818	case TCP_FASTOPEN:
819	case TCP_FASTOPEN_CONNECT:
820	case TCP_FASTOPEN_KEY:
821	case TCP_FASTOPEN_NO_COOKIE:
822		return mptcp_setsockopt_first_sf_only(msk, SOL_TCP, optname,
823						      optval, optlen);
824	}
825
826	return -EOPNOTSUPP;
827}
828
829int mptcp_setsockopt(struct sock *sk, int level, int optname,
830		     sockptr_t optval, unsigned int optlen)
831{
832	struct mptcp_sock *msk = mptcp_sk(sk);
833	struct sock *ssk;
834
835	pr_debug("msk=%p", msk);
836
837	if (level == SOL_SOCKET)
838		return mptcp_setsockopt_sol_socket(msk, optname, optval, optlen);
839
840	if (!mptcp_supported_sockopt(level, optname))
841		return -ENOPROTOOPT;
842
843	/* @@ the meaning of setsockopt() when the socket is connected and
844	 * there are multiple subflows is not yet defined. It is up to the
845	 * MPTCP-level socket to configure the subflows until the subflow
846	 * is in TCP fallback, when TCP socket options are passed through
847	 * to the one remaining subflow.
848	 */
849	lock_sock(sk);
850	ssk = __mptcp_tcp_fallback(msk);
851	release_sock(sk);
852	if (ssk)
853		return tcp_setsockopt(ssk, level, optname, optval, optlen);
854
855	if (level == SOL_IP)
856		return mptcp_setsockopt_v4(msk, optname, optval, optlen);
857
858	if (level == SOL_IPV6)
859		return mptcp_setsockopt_v6(msk, optname, optval, optlen);
860
861	if (level == SOL_TCP)
862		return mptcp_setsockopt_sol_tcp(msk, optname, optval, optlen);
863
864	return -EOPNOTSUPP;
865}
866
867static int mptcp_getsockopt_first_sf_only(struct mptcp_sock *msk, int level, int optname,
868					  char __user *optval, int __user *optlen)
869{
870	struct sock *sk = (struct sock *)msk;
871	struct sock *ssk;
872	int ret;
873
874	lock_sock(sk);
875	ssk = msk->first;
876	if (ssk) {
877		ret = tcp_getsockopt(ssk, level, optname, optval, optlen);
878		goto out;
879	}
880
881	ssk = __mptcp_nmpc_sk(msk);
882	if (IS_ERR(ssk)) {
883		ret = PTR_ERR(ssk);
884		goto out;
885	}
886
887	ret = tcp_getsockopt(ssk, level, optname, optval, optlen);
888
889out:
890	release_sock(sk);
891	return ret;
892}
893
894void mptcp_diag_fill_info(struct mptcp_sock *msk, struct mptcp_info *info)
895{
896	struct sock *sk = (struct sock *)msk;
897	u32 flags = 0;
898	bool slow;
899
900	memset(info, 0, sizeof(*info));
901
902	info->mptcpi_subflows = READ_ONCE(msk->pm.subflows);
903	info->mptcpi_add_addr_signal = READ_ONCE(msk->pm.add_addr_signaled);
904	info->mptcpi_add_addr_accepted = READ_ONCE(msk->pm.add_addr_accepted);
905	info->mptcpi_local_addr_used = READ_ONCE(msk->pm.local_addr_used);
906
907	if (inet_sk_state_load(sk) == TCP_LISTEN)
908		return;
909
910	/* The following limits only make sense for the in-kernel PM */
911	if (mptcp_pm_is_kernel(msk)) {
912		info->mptcpi_subflows_max =
913			mptcp_pm_get_subflows_max(msk);
914		info->mptcpi_add_addr_signal_max =
915			mptcp_pm_get_add_addr_signal_max(msk);
916		info->mptcpi_add_addr_accepted_max =
917			mptcp_pm_get_add_addr_accept_max(msk);
918		info->mptcpi_local_addr_max =
919			mptcp_pm_get_local_addr_max(msk);
920	}
921
922	if (test_bit(MPTCP_FALLBACK_DONE, &msk->flags))
923		flags |= MPTCP_INFO_FLAG_FALLBACK;
924	if (READ_ONCE(msk->can_ack))
925		flags |= MPTCP_INFO_FLAG_REMOTE_KEY_RECEIVED;
926	info->mptcpi_flags = flags;
927	mptcp_data_lock(sk);
928	info->mptcpi_snd_una = msk->snd_una;
929	info->mptcpi_rcv_nxt = msk->ack_seq;
930	info->mptcpi_bytes_acked = msk->bytes_acked;
931	mptcp_data_unlock(sk);
932
933	slow = lock_sock_fast(sk);
934	info->mptcpi_csum_enabled = msk->csum_enabled;
935	info->mptcpi_token = msk->token;
936	info->mptcpi_write_seq = msk->write_seq;
937	info->mptcpi_retransmits = inet_csk(sk)->icsk_retransmits;
938	info->mptcpi_bytes_sent = msk->bytes_sent;
939	info->mptcpi_bytes_received = msk->bytes_received;
940	info->mptcpi_bytes_retrans = msk->bytes_retrans;
941	unlock_sock_fast(sk, slow);
942}
943EXPORT_SYMBOL_GPL(mptcp_diag_fill_info);
944
945static int mptcp_getsockopt_info(struct mptcp_sock *msk, char __user *optval, int __user *optlen)
946{
947	struct mptcp_info m_info;
948	int len;
949
950	if (get_user(len, optlen))
951		return -EFAULT;
952
953	len = min_t(unsigned int, len, sizeof(struct mptcp_info));
954
955	mptcp_diag_fill_info(msk, &m_info);
956
957	if (put_user(len, optlen))
958		return -EFAULT;
959
960	if (copy_to_user(optval, &m_info, len))
961		return -EFAULT;
962
963	return 0;
964}
965
966static int mptcp_put_subflow_data(struct mptcp_subflow_data *sfd,
967				  char __user *optval,
968				  u32 copied,
969				  int __user *optlen)
970{
971	u32 copylen = min_t(u32, sfd->size_subflow_data, sizeof(*sfd));
972
973	if (copied)
974		copied += sfd->size_subflow_data;
975	else
976		copied = copylen;
977
978	if (put_user(copied, optlen))
979		return -EFAULT;
980
981	if (copy_to_user(optval, sfd, copylen))
982		return -EFAULT;
983
984	return 0;
985}
986
987static int mptcp_get_subflow_data(struct mptcp_subflow_data *sfd,
988				  char __user *optval,
989				  int __user *optlen)
990{
991	int len, copylen;
992
993	if (get_user(len, optlen))
994		return -EFAULT;
995
996	/* if mptcp_subflow_data size is changed, need to adjust
997	 * this function to deal with programs using old version.
998	 */
999	BUILD_BUG_ON(sizeof(*sfd) != MIN_INFO_OPTLEN_SIZE);
1000
1001	if (len < MIN_INFO_OPTLEN_SIZE)
1002		return -EINVAL;
1003
1004	memset(sfd, 0, sizeof(*sfd));
1005
1006	copylen = min_t(unsigned int, len, sizeof(*sfd));
1007	if (copy_from_user(sfd, optval, copylen))
1008		return -EFAULT;
1009
1010	/* size_subflow_data is u32, but len is signed */
1011	if (sfd->size_subflow_data > INT_MAX ||
1012	    sfd->size_user > INT_MAX)
1013		return -EINVAL;
1014
1015	if (sfd->size_subflow_data < MIN_INFO_OPTLEN_SIZE ||
1016	    sfd->size_subflow_data > len)
1017		return -EINVAL;
1018
1019	if (sfd->num_subflows || sfd->size_kernel)
1020		return -EINVAL;
1021
1022	return len - sfd->size_subflow_data;
1023}
1024
1025static int mptcp_getsockopt_tcpinfo(struct mptcp_sock *msk, char __user *optval,
1026				    int __user *optlen)
1027{
1028	struct mptcp_subflow_context *subflow;
1029	struct sock *sk = (struct sock *)msk;
1030	unsigned int sfcount = 0, copied = 0;
1031	struct mptcp_subflow_data sfd;
1032	char __user *infoptr;
1033	int len;
1034
1035	len = mptcp_get_subflow_data(&sfd, optval, optlen);
1036	if (len < 0)
1037		return len;
1038
1039	sfd.size_kernel = sizeof(struct tcp_info);
1040	sfd.size_user = min_t(unsigned int, sfd.size_user,
1041			      sizeof(struct tcp_info));
1042
1043	infoptr = optval + sfd.size_subflow_data;
1044
1045	lock_sock(sk);
1046
1047	mptcp_for_each_subflow(msk, subflow) {
1048		struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
1049
1050		++sfcount;
1051
1052		if (len && len >= sfd.size_user) {
1053			struct tcp_info info;
1054
1055			tcp_get_info(ssk, &info);
1056
1057			if (copy_to_user(infoptr, &info, sfd.size_user)) {
1058				release_sock(sk);
1059				return -EFAULT;
1060			}
1061
1062			infoptr += sfd.size_user;
1063			copied += sfd.size_user;
1064			len -= sfd.size_user;
1065		}
1066	}
1067
1068	release_sock(sk);
1069
1070	sfd.num_subflows = sfcount;
1071
1072	if (mptcp_put_subflow_data(&sfd, optval, copied, optlen))
1073		return -EFAULT;
1074
1075	return 0;
1076}
1077
1078static void mptcp_get_sub_addrs(const struct sock *sk, struct mptcp_subflow_addrs *a)
1079{
1080	const struct inet_sock *inet = inet_sk(sk);
1081
1082	memset(a, 0, sizeof(*a));
1083
1084	if (sk->sk_family == AF_INET) {
1085		a->sin_local.sin_family = AF_INET;
1086		a->sin_local.sin_port = inet->inet_sport;
1087		a->sin_local.sin_addr.s_addr = inet->inet_rcv_saddr;
1088
1089		if (!a->sin_local.sin_addr.s_addr)
1090			a->sin_local.sin_addr.s_addr = inet->inet_saddr;
1091
1092		a->sin_remote.sin_family = AF_INET;
1093		a->sin_remote.sin_port = inet->inet_dport;
1094		a->sin_remote.sin_addr.s_addr = inet->inet_daddr;
1095#if IS_ENABLED(CONFIG_IPV6)
1096	} else if (sk->sk_family == AF_INET6) {
1097		const struct ipv6_pinfo *np = inet6_sk(sk);
1098
1099		if (WARN_ON_ONCE(!np))
1100			return;
1101
1102		a->sin6_local.sin6_family = AF_INET6;
1103		a->sin6_local.sin6_port = inet->inet_sport;
1104
1105		if (ipv6_addr_any(&sk->sk_v6_rcv_saddr))
1106			a->sin6_local.sin6_addr = np->saddr;
1107		else
1108			a->sin6_local.sin6_addr = sk->sk_v6_rcv_saddr;
1109
1110		a->sin6_remote.sin6_family = AF_INET6;
1111		a->sin6_remote.sin6_port = inet->inet_dport;
1112		a->sin6_remote.sin6_addr = sk->sk_v6_daddr;
1113#endif
1114	}
1115}
1116
1117static int mptcp_getsockopt_subflow_addrs(struct mptcp_sock *msk, char __user *optval,
1118					  int __user *optlen)
1119{
1120	struct mptcp_subflow_context *subflow;
1121	struct sock *sk = (struct sock *)msk;
1122	unsigned int sfcount = 0, copied = 0;
1123	struct mptcp_subflow_data sfd;
1124	char __user *addrptr;
1125	int len;
1126
1127	len = mptcp_get_subflow_data(&sfd, optval, optlen);
1128	if (len < 0)
1129		return len;
1130
1131	sfd.size_kernel = sizeof(struct mptcp_subflow_addrs);
1132	sfd.size_user = min_t(unsigned int, sfd.size_user,
1133			      sizeof(struct mptcp_subflow_addrs));
1134
1135	addrptr = optval + sfd.size_subflow_data;
1136
1137	lock_sock(sk);
1138
1139	mptcp_for_each_subflow(msk, subflow) {
1140		struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
1141
1142		++sfcount;
1143
1144		if (len && len >= sfd.size_user) {
1145			struct mptcp_subflow_addrs a;
1146
1147			mptcp_get_sub_addrs(ssk, &a);
1148
1149			if (copy_to_user(addrptr, &a, sfd.size_user)) {
1150				release_sock(sk);
1151				return -EFAULT;
1152			}
1153
1154			addrptr += sfd.size_user;
1155			copied += sfd.size_user;
1156			len -= sfd.size_user;
1157		}
1158	}
1159
1160	release_sock(sk);
1161
1162	sfd.num_subflows = sfcount;
1163
1164	if (mptcp_put_subflow_data(&sfd, optval, copied, optlen))
1165		return -EFAULT;
1166
1167	return 0;
1168}
1169
1170static int mptcp_get_full_info(struct mptcp_full_info *mfi,
1171			       char __user *optval,
1172			       int __user *optlen)
1173{
1174	int len;
1175
1176	BUILD_BUG_ON(offsetof(struct mptcp_full_info, mptcp_info) !=
1177		     MIN_FULL_INFO_OPTLEN_SIZE);
1178
1179	if (get_user(len, optlen))
1180		return -EFAULT;
1181
1182	if (len < MIN_FULL_INFO_OPTLEN_SIZE)
1183		return -EINVAL;
1184
1185	memset(mfi, 0, sizeof(*mfi));
1186	if (copy_from_user(mfi, optval, MIN_FULL_INFO_OPTLEN_SIZE))
1187		return -EFAULT;
1188
1189	if (mfi->size_tcpinfo_kernel ||
1190	    mfi->size_sfinfo_kernel ||
1191	    mfi->num_subflows)
1192		return -EINVAL;
1193
1194	if (mfi->size_sfinfo_user > INT_MAX ||
1195	    mfi->size_tcpinfo_user > INT_MAX)
1196		return -EINVAL;
1197
1198	return len - MIN_FULL_INFO_OPTLEN_SIZE;
1199}
1200
1201static int mptcp_put_full_info(struct mptcp_full_info *mfi,
1202			       char __user *optval,
1203			       u32 copylen,
1204			       int __user *optlen)
1205{
1206	copylen += MIN_FULL_INFO_OPTLEN_SIZE;
1207	if (put_user(copylen, optlen))
1208		return -EFAULT;
1209
1210	if (copy_to_user(optval, mfi, copylen))
1211		return -EFAULT;
1212	return 0;
1213}
1214
1215static int mptcp_getsockopt_full_info(struct mptcp_sock *msk, char __user *optval,
1216				      int __user *optlen)
1217{
1218	unsigned int sfcount = 0, copylen = 0;
1219	struct mptcp_subflow_context *subflow;
1220	struct sock *sk = (struct sock *)msk;
1221	void __user *tcpinfoptr, *sfinfoptr;
1222	struct mptcp_full_info mfi;
1223	int len;
1224
1225	len = mptcp_get_full_info(&mfi, optval, optlen);
1226	if (len < 0)
1227		return len;
1228
1229	/* don't bother filling the mptcp info if there is not enough
1230	 * user-space-provided storage
1231	 */
1232	if (len > 0) {
1233		mptcp_diag_fill_info(msk, &mfi.mptcp_info);
1234		copylen += min_t(unsigned int, len, sizeof(struct mptcp_info));
1235	}
1236
1237	mfi.size_tcpinfo_kernel = sizeof(struct tcp_info);
1238	mfi.size_tcpinfo_user = min_t(unsigned int, mfi.size_tcpinfo_user,
1239				      sizeof(struct tcp_info));
1240	sfinfoptr = u64_to_user_ptr(mfi.subflow_info);
1241	mfi.size_sfinfo_kernel = sizeof(struct mptcp_subflow_info);
1242	mfi.size_sfinfo_user = min_t(unsigned int, mfi.size_sfinfo_user,
1243				     sizeof(struct mptcp_subflow_info));
1244	tcpinfoptr = u64_to_user_ptr(mfi.tcp_info);
1245
1246	lock_sock(sk);
1247	mptcp_for_each_subflow(msk, subflow) {
1248		struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
1249		struct mptcp_subflow_info sfinfo;
1250		struct tcp_info tcp_info;
1251
1252		if (sfcount++ >= mfi.size_arrays_user)
1253			continue;
1254
1255		/* fetch addr/tcp_info only if the user space buffers
1256		 * are wide enough
1257		 */
1258		memset(&sfinfo, 0, sizeof(sfinfo));
1259		sfinfo.id = subflow->subflow_id;
1260		if (mfi.size_sfinfo_user >
1261		    offsetof(struct mptcp_subflow_info, addrs))
1262			mptcp_get_sub_addrs(ssk, &sfinfo.addrs);
1263		if (copy_to_user(sfinfoptr, &sfinfo, mfi.size_sfinfo_user))
1264			goto fail_release;
1265
1266		if (mfi.size_tcpinfo_user) {
1267			tcp_get_info(ssk, &tcp_info);
1268			if (copy_to_user(tcpinfoptr, &tcp_info,
1269					 mfi.size_tcpinfo_user))
1270				goto fail_release;
1271		}
1272
1273		tcpinfoptr += mfi.size_tcpinfo_user;
1274		sfinfoptr += mfi.size_sfinfo_user;
1275	}
1276	release_sock(sk);
1277
1278	mfi.num_subflows = sfcount;
1279	if (mptcp_put_full_info(&mfi, optval, copylen, optlen))
1280		return -EFAULT;
1281
1282	return 0;
1283
1284fail_release:
1285	release_sock(sk);
1286	return -EFAULT;
1287}
1288
1289static int mptcp_put_int_option(struct mptcp_sock *msk, char __user *optval,
1290				int __user *optlen, int val)
1291{
1292	int len;
1293
1294	if (get_user(len, optlen))
1295		return -EFAULT;
1296	if (len < 0)
1297		return -EINVAL;
1298
1299	if (len < sizeof(int) && len > 0 && val >= 0 && val <= 255) {
1300		unsigned char ucval = (unsigned char)val;
1301
1302		len = 1;
1303		if (put_user(len, optlen))
1304			return -EFAULT;
1305		if (copy_to_user(optval, &ucval, 1))
1306			return -EFAULT;
1307	} else {
1308		len = min_t(unsigned int, len, sizeof(int));
1309		if (put_user(len, optlen))
1310			return -EFAULT;
1311		if (copy_to_user(optval, &val, len))
1312			return -EFAULT;
1313	}
1314
1315	return 0;
1316}
1317
1318static int mptcp_getsockopt_sol_tcp(struct mptcp_sock *msk, int optname,
1319				    char __user *optval, int __user *optlen)
1320{
1321	switch (optname) {
1322	case TCP_ULP:
1323	case TCP_CONGESTION:
1324	case TCP_INFO:
1325	case TCP_CC_INFO:
1326	case TCP_DEFER_ACCEPT:
1327	case TCP_FASTOPEN:
1328	case TCP_FASTOPEN_CONNECT:
1329	case TCP_FASTOPEN_KEY:
1330	case TCP_FASTOPEN_NO_COOKIE:
1331		return mptcp_getsockopt_first_sf_only(msk, SOL_TCP, optname,
1332						      optval, optlen);
1333	case TCP_INQ:
1334		return mptcp_put_int_option(msk, optval, optlen, msk->recvmsg_inq);
1335	case TCP_CORK:
1336		return mptcp_put_int_option(msk, optval, optlen, msk->cork);
1337	case TCP_NODELAY:
1338		return mptcp_put_int_option(msk, optval, optlen, msk->nodelay);
1339	}
1340	return -EOPNOTSUPP;
1341}
1342
1343static int mptcp_getsockopt_v4(struct mptcp_sock *msk, int optname,
1344			       char __user *optval, int __user *optlen)
1345{
1346	struct sock *sk = (void *)msk;
1347
1348	switch (optname) {
1349	case IP_TOS:
1350		return mptcp_put_int_option(msk, optval, optlen, inet_sk(sk)->tos);
1351	}
1352
1353	return -EOPNOTSUPP;
1354}
1355
1356static int mptcp_getsockopt_sol_mptcp(struct mptcp_sock *msk, int optname,
1357				      char __user *optval, int __user *optlen)
1358{
1359	switch (optname) {
1360	case MPTCP_INFO:
1361		return mptcp_getsockopt_info(msk, optval, optlen);
1362	case MPTCP_FULL_INFO:
1363		return mptcp_getsockopt_full_info(msk, optval, optlen);
1364	case MPTCP_TCPINFO:
1365		return mptcp_getsockopt_tcpinfo(msk, optval, optlen);
1366	case MPTCP_SUBFLOW_ADDRS:
1367		return mptcp_getsockopt_subflow_addrs(msk, optval, optlen);
1368	}
1369
1370	return -EOPNOTSUPP;
1371}
1372
1373int mptcp_getsockopt(struct sock *sk, int level, int optname,
1374		     char __user *optval, int __user *option)
1375{
1376	struct mptcp_sock *msk = mptcp_sk(sk);
1377	struct sock *ssk;
1378
1379	pr_debug("msk=%p", msk);
1380
1381	/* @@ the meaning of setsockopt() when the socket is connected and
1382	 * there are multiple subflows is not yet defined. It is up to the
1383	 * MPTCP-level socket to configure the subflows until the subflow
1384	 * is in TCP fallback, when socket options are passed through
1385	 * to the one remaining subflow.
1386	 */
1387	lock_sock(sk);
1388	ssk = __mptcp_tcp_fallback(msk);
1389	release_sock(sk);
1390	if (ssk)
1391		return tcp_getsockopt(ssk, level, optname, optval, option);
1392
1393	if (level == SOL_IP)
1394		return mptcp_getsockopt_v4(msk, optname, optval, option);
1395	if (level == SOL_TCP)
1396		return mptcp_getsockopt_sol_tcp(msk, optname, optval, option);
1397	if (level == SOL_MPTCP)
1398		return mptcp_getsockopt_sol_mptcp(msk, optname, optval, option);
1399	return -EOPNOTSUPP;
1400}
1401
1402static void sync_socket_options(struct mptcp_sock *msk, struct sock *ssk)
1403{
1404	static const unsigned int tx_rx_locks = SOCK_RCVBUF_LOCK | SOCK_SNDBUF_LOCK;
1405	struct sock *sk = (struct sock *)msk;
1406
1407	if (ssk->sk_prot->keepalive) {
1408		if (sock_flag(sk, SOCK_KEEPOPEN))
1409			ssk->sk_prot->keepalive(ssk, 1);
1410		else
1411			ssk->sk_prot->keepalive(ssk, 0);
1412	}
1413
1414	ssk->sk_priority = sk->sk_priority;
1415	ssk->sk_bound_dev_if = sk->sk_bound_dev_if;
1416	ssk->sk_incoming_cpu = sk->sk_incoming_cpu;
1417	ssk->sk_ipv6only = sk->sk_ipv6only;
1418	__ip_sock_set_tos(ssk, inet_sk(sk)->tos);
1419
1420	if (sk->sk_userlocks & tx_rx_locks) {
1421		ssk->sk_userlocks |= sk->sk_userlocks & tx_rx_locks;
1422		if (sk->sk_userlocks & SOCK_SNDBUF_LOCK) {
1423			WRITE_ONCE(ssk->sk_sndbuf, sk->sk_sndbuf);
1424			mptcp_subflow_ctx(ssk)->cached_sndbuf = sk->sk_sndbuf;
1425		}
1426		if (sk->sk_userlocks & SOCK_RCVBUF_LOCK)
1427			WRITE_ONCE(ssk->sk_rcvbuf, sk->sk_rcvbuf);
1428	}
1429
1430	if (sock_flag(sk, SOCK_LINGER)) {
1431		ssk->sk_lingertime = sk->sk_lingertime;
1432		sock_set_flag(ssk, SOCK_LINGER);
1433	} else {
1434		sock_reset_flag(ssk, SOCK_LINGER);
1435	}
1436
1437	if (sk->sk_mark != ssk->sk_mark) {
1438		ssk->sk_mark = sk->sk_mark;
1439		sk_dst_reset(ssk);
1440	}
1441
1442	sock_valbool_flag(ssk, SOCK_DBG, sock_flag(sk, SOCK_DBG));
1443
1444	if (inet_csk(sk)->icsk_ca_ops != inet_csk(ssk)->icsk_ca_ops)
1445		tcp_set_congestion_control(ssk, msk->ca_name, false, true);
1446	__tcp_sock_set_cork(ssk, !!msk->cork);
1447	__tcp_sock_set_nodelay(ssk, !!msk->nodelay);
1448
1449	inet_assign_bit(TRANSPARENT, ssk, inet_test_bit(TRANSPARENT, sk));
1450	inet_assign_bit(FREEBIND, ssk, inet_test_bit(FREEBIND, sk));
1451}
1452
1453static void __mptcp_sockopt_sync(struct mptcp_sock *msk, struct sock *ssk)
1454{
1455	bool slow = lock_sock_fast(ssk);
1456
1457	sync_socket_options(msk, ssk);
1458
1459	unlock_sock_fast(ssk, slow);
1460}
1461
1462void mptcp_sockopt_sync(struct mptcp_sock *msk, struct sock *ssk)
1463{
1464	struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
1465
1466	msk_owned_by_me(msk);
1467
1468	if (READ_ONCE(subflow->setsockopt_seq) != msk->setsockopt_seq) {
1469		__mptcp_sockopt_sync(msk, ssk);
1470
1471		subflow->setsockopt_seq = msk->setsockopt_seq;
1472	}
1473}
1474
1475void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk)
1476{
1477	struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
1478
1479	msk_owned_by_me(msk);
1480
1481	if (READ_ONCE(subflow->setsockopt_seq) != msk->setsockopt_seq) {
1482		sync_socket_options(msk, ssk);
1483
1484		subflow->setsockopt_seq = msk->setsockopt_seq;
1485	}
1486}
1487