sockopt.c 41 KB

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