af_rxrpc.c 27 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /* AF_RXRPC implementation
  3. *
  4. * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
  5. * Written by David Howells (dhowells@redhat.com)
  6. */
  7. #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  8. #include <linux/module.h>
  9. #include <linux/kernel.h>
  10. #include <linux/net.h>
  11. #include <linux/slab.h>
  12. #include <linux/skbuff.h>
  13. #include <linux/random.h>
  14. #include <linux/poll.h>
  15. #include <linux/proc_fs.h>
  16. #include <linux/key-type.h>
  17. #include <net/net_namespace.h>
  18. #include <net/sock.h>
  19. #include <net/af_rxrpc.h>
  20. #define CREATE_TRACE_POINTS
  21. #include "ar-internal.h"
  22. MODULE_DESCRIPTION("RxRPC network protocol");
  23. MODULE_AUTHOR("Red Hat, Inc.");
  24. MODULE_LICENSE("GPL");
  25. MODULE_ALIAS_NETPROTO(PF_RXRPC);
  26. unsigned int rxrpc_debug; // = RXRPC_DEBUG_KPROTO;
  27. module_param_named(debug, rxrpc_debug, uint, 0644);
  28. MODULE_PARM_DESC(debug, "RxRPC debugging mask");
  29. static struct proto rxrpc_proto;
  30. static const struct proto_ops rxrpc_rpc_ops;
  31. /* current debugging ID */
  32. atomic_t rxrpc_debug_id;
  33. EXPORT_SYMBOL(rxrpc_debug_id);
  34. /* count of skbs currently in use */
  35. atomic_t rxrpc_n_rx_skbs;
  36. struct workqueue_struct *rxrpc_workqueue;
  37. static void rxrpc_sock_destructor(struct sock *);
  38. /*
  39. * see if an RxRPC socket is currently writable
  40. */
  41. static inline int rxrpc_writable(struct sock *sk)
  42. {
  43. return refcount_read(&sk->sk_wmem_alloc) < (size_t) sk->sk_sndbuf;
  44. }
  45. /*
  46. * wait for write bufferage to become available
  47. */
  48. static void rxrpc_write_space(struct sock *sk)
  49. {
  50. _enter("%p", sk);
  51. rcu_read_lock();
  52. if (rxrpc_writable(sk)) {
  53. struct socket_wq *wq = rcu_dereference(sk->sk_wq);
  54. if (skwq_has_sleeper(wq))
  55. wake_up_interruptible(&wq->wait);
  56. sk_wake_async_rcu(sk, SOCK_WAKE_SPACE, POLL_OUT);
  57. }
  58. rcu_read_unlock();
  59. }
  60. /*
  61. * validate an RxRPC address
  62. */
  63. static int rxrpc_validate_address(struct rxrpc_sock *rx,
  64. struct sockaddr_rxrpc *srx,
  65. int len)
  66. {
  67. unsigned int tail;
  68. if (len < sizeof(struct sockaddr_rxrpc))
  69. return -EINVAL;
  70. if (srx->srx_family != AF_RXRPC)
  71. return -EAFNOSUPPORT;
  72. if (srx->transport_type != SOCK_DGRAM)
  73. return -ESOCKTNOSUPPORT;
  74. len -= offsetof(struct sockaddr_rxrpc, transport);
  75. if (srx->transport_len < sizeof(sa_family_t) ||
  76. srx->transport_len > len)
  77. return -EINVAL;
  78. switch (srx->transport.family) {
  79. case AF_INET:
  80. if (rx->family != AF_INET &&
  81. rx->family != AF_INET6)
  82. return -EAFNOSUPPORT;
  83. if (srx->transport_len < sizeof(struct sockaddr_in))
  84. return -EINVAL;
  85. tail = offsetof(struct sockaddr_rxrpc, transport.sin.__pad);
  86. break;
  87. #ifdef CONFIG_AF_RXRPC_IPV6
  88. case AF_INET6:
  89. if (rx->family != AF_INET6)
  90. return -EAFNOSUPPORT;
  91. if (srx->transport_len < sizeof(struct sockaddr_in6))
  92. return -EINVAL;
  93. tail = offsetof(struct sockaddr_rxrpc, transport) +
  94. sizeof(struct sockaddr_in6);
  95. break;
  96. #endif
  97. default:
  98. return -EAFNOSUPPORT;
  99. }
  100. if (tail < len)
  101. memset((void *)srx + tail, 0, len - tail);
  102. _debug("INET: %pISp", &srx->transport);
  103. return 0;
  104. }
  105. /*
  106. * bind a local address to an RxRPC socket
  107. */
  108. static int rxrpc_bind(struct socket *sock, struct sockaddr_unsized *saddr, int len)
  109. {
  110. struct sockaddr_rxrpc *srx = (struct sockaddr_rxrpc *)saddr;
  111. struct rxrpc_local *local;
  112. struct rxrpc_sock *rx = rxrpc_sk(sock->sk);
  113. u16 service_id;
  114. int ret;
  115. _enter("%p,%p,%d", rx, saddr, len);
  116. ret = rxrpc_validate_address(rx, srx, len);
  117. if (ret < 0)
  118. goto error;
  119. service_id = srx->srx_service;
  120. lock_sock(&rx->sk);
  121. switch (rx->sk.sk_state) {
  122. case RXRPC_UNBOUND:
  123. rx->srx = *srx;
  124. local = rxrpc_lookup_local(sock_net(&rx->sk), &rx->srx);
  125. if (IS_ERR(local)) {
  126. ret = PTR_ERR(local);
  127. goto error_unlock;
  128. }
  129. if (service_id) {
  130. write_lock(&local->services_lock);
  131. if (local->service)
  132. goto service_in_use;
  133. rx->local = local;
  134. local->service = rx;
  135. write_unlock(&local->services_lock);
  136. rx->sk.sk_state = RXRPC_SERVER_BOUND;
  137. } else {
  138. rx->local = local;
  139. rx->sk.sk_state = RXRPC_CLIENT_BOUND;
  140. }
  141. break;
  142. case RXRPC_SERVER_BOUND:
  143. ret = -EINVAL;
  144. if (service_id == 0)
  145. goto error_unlock;
  146. ret = -EADDRINUSE;
  147. if (service_id == rx->srx.srx_service)
  148. goto error_unlock;
  149. ret = -EINVAL;
  150. srx->srx_service = rx->srx.srx_service;
  151. if (memcmp(srx, &rx->srx, sizeof(*srx)) != 0)
  152. goto error_unlock;
  153. rx->second_service = service_id;
  154. rx->sk.sk_state = RXRPC_SERVER_BOUND2;
  155. break;
  156. default:
  157. ret = -EINVAL;
  158. goto error_unlock;
  159. }
  160. release_sock(&rx->sk);
  161. _leave(" = 0");
  162. return 0;
  163. service_in_use:
  164. write_unlock(&local->services_lock);
  165. rxrpc_unuse_local(local, rxrpc_local_unuse_bind);
  166. rxrpc_put_local(local, rxrpc_local_put_bind);
  167. ret = -EADDRINUSE;
  168. error_unlock:
  169. release_sock(&rx->sk);
  170. error:
  171. _leave(" = %d", ret);
  172. return ret;
  173. }
  174. /*
  175. * set the number of pending calls permitted on a listening socket
  176. */
  177. static int rxrpc_listen(struct socket *sock, int backlog)
  178. {
  179. struct sock *sk = sock->sk;
  180. struct rxrpc_sock *rx = rxrpc_sk(sk);
  181. unsigned int max, old;
  182. int ret;
  183. _enter("%p,%d", rx, backlog);
  184. lock_sock(&rx->sk);
  185. switch (rx->sk.sk_state) {
  186. case RXRPC_UNBOUND:
  187. ret = -EADDRNOTAVAIL;
  188. break;
  189. case RXRPC_SERVER_BOUND:
  190. case RXRPC_SERVER_BOUND2:
  191. ASSERT(rx->local != NULL);
  192. max = READ_ONCE(rxrpc_max_backlog);
  193. ret = -EINVAL;
  194. if (backlog == INT_MAX)
  195. backlog = max;
  196. else if (backlog < 0 || backlog > max)
  197. break;
  198. old = sk->sk_max_ack_backlog;
  199. sk->sk_max_ack_backlog = backlog;
  200. ret = rxrpc_service_prealloc(rx, GFP_KERNEL);
  201. if (ret == 0)
  202. rx->sk.sk_state = RXRPC_SERVER_LISTENING;
  203. else
  204. sk->sk_max_ack_backlog = old;
  205. break;
  206. case RXRPC_SERVER_LISTENING:
  207. if (backlog == 0) {
  208. rx->sk.sk_state = RXRPC_SERVER_LISTEN_DISABLED;
  209. sk->sk_max_ack_backlog = 0;
  210. rxrpc_discard_prealloc(rx);
  211. ret = 0;
  212. break;
  213. }
  214. fallthrough;
  215. default:
  216. ret = -EBUSY;
  217. break;
  218. }
  219. release_sock(&rx->sk);
  220. _leave(" = %d", ret);
  221. return ret;
  222. }
  223. /**
  224. * rxrpc_kernel_lookup_peer - Obtain remote transport endpoint for an address
  225. * @sock: The socket through which it will be accessed
  226. * @srx: The network address
  227. * @gfp: Allocation flags
  228. *
  229. * Lookup or create a remote transport endpoint record for the specified
  230. * address.
  231. *
  232. * Return: The peer record found with a reference or a negative error code if
  233. * the address is invalid or unsupported.
  234. */
  235. struct rxrpc_peer *rxrpc_kernel_lookup_peer(struct socket *sock,
  236. struct sockaddr_rxrpc *srx, gfp_t gfp)
  237. {
  238. struct rxrpc_peer *peer;
  239. struct rxrpc_sock *rx = rxrpc_sk(sock->sk);
  240. int ret;
  241. ret = rxrpc_validate_address(rx, srx, sizeof(*srx));
  242. if (ret < 0)
  243. return ERR_PTR(ret);
  244. peer = rxrpc_lookup_peer(rx->local, srx, gfp);
  245. return peer ?: ERR_PTR(-ENOMEM);
  246. }
  247. EXPORT_SYMBOL(rxrpc_kernel_lookup_peer);
  248. /**
  249. * rxrpc_kernel_get_peer - Get a reference on a peer
  250. * @peer: The peer to get a reference on (may be NULL).
  251. *
  252. * Get a reference for a remote peer record (if not NULL).
  253. *
  254. * Return: The @peer argument.
  255. */
  256. struct rxrpc_peer *rxrpc_kernel_get_peer(struct rxrpc_peer *peer)
  257. {
  258. return peer ? rxrpc_get_peer(peer, rxrpc_peer_get_application) : NULL;
  259. }
  260. EXPORT_SYMBOL(rxrpc_kernel_get_peer);
  261. /**
  262. * rxrpc_kernel_put_peer - Allow a kernel app to drop a peer reference
  263. * @peer: The peer to drop a ref on
  264. *
  265. * Drop a reference on a peer record.
  266. */
  267. void rxrpc_kernel_put_peer(struct rxrpc_peer *peer)
  268. {
  269. rxrpc_put_peer(peer, rxrpc_peer_put_application);
  270. }
  271. EXPORT_SYMBOL(rxrpc_kernel_put_peer);
  272. /**
  273. * rxrpc_kernel_begin_call - Allow a kernel service to begin a call
  274. * @sock: The socket on which to make the call
  275. * @peer: The peer to contact
  276. * @key: The security context to use (defaults to socket setting)
  277. * @user_call_ID: The ID to use
  278. * @tx_total_len: Total length of data to transmit during the call (or -1)
  279. * @hard_timeout: The maximum lifespan of the call in sec
  280. * @gfp: The allocation constraints
  281. * @notify_rx: Where to send notifications instead of socket queue
  282. * @service_id: The ID of the service to contact
  283. * @upgrade: Request service upgrade for call
  284. * @interruptibility: The call is interruptible, or can be canceled.
  285. * @debug_id: The debug ID for tracing to be assigned to the call
  286. *
  287. * Allow a kernel service to begin a call on the nominated socket. This just
  288. * sets up all the internal tracking structures and allocates connection and
  289. * call IDs as appropriate.
  290. *
  291. * The default socket destination address and security may be overridden by
  292. * supplying @srx and @key.
  293. *
  294. * Return: The new call or an error code.
  295. */
  296. struct rxrpc_call *rxrpc_kernel_begin_call(struct socket *sock,
  297. struct rxrpc_peer *peer,
  298. struct key *key,
  299. unsigned long user_call_ID,
  300. s64 tx_total_len,
  301. u32 hard_timeout,
  302. gfp_t gfp,
  303. rxrpc_notify_rx_t notify_rx,
  304. u16 service_id,
  305. bool upgrade,
  306. enum rxrpc_interruptibility interruptibility,
  307. unsigned int debug_id)
  308. {
  309. struct rxrpc_conn_parameters cp;
  310. struct rxrpc_call_params p;
  311. struct rxrpc_call *call;
  312. struct rxrpc_sock *rx = rxrpc_sk(sock->sk);
  313. _enter(",,%x,%lx", key_serial(key), user_call_ID);
  314. if (WARN_ON_ONCE(peer->local != rx->local))
  315. return ERR_PTR(-EIO);
  316. lock_sock(&rx->sk);
  317. if (!key)
  318. key = rx->key;
  319. if (key && !key->payload.data[0])
  320. key = NULL; /* a no-security key */
  321. memset(&p, 0, sizeof(p));
  322. p.user_call_ID = user_call_ID;
  323. p.tx_total_len = tx_total_len;
  324. p.interruptibility = interruptibility;
  325. p.kernel = true;
  326. p.timeouts.hard = hard_timeout;
  327. memset(&cp, 0, sizeof(cp));
  328. cp.local = rx->local;
  329. cp.peer = peer;
  330. cp.key = key;
  331. cp.security_level = rx->min_sec_level;
  332. cp.exclusive = false;
  333. cp.upgrade = upgrade;
  334. cp.service_id = service_id;
  335. call = rxrpc_new_client_call(rx, &cp, &p, gfp, debug_id);
  336. /* The socket has been unlocked. */
  337. if (!IS_ERR(call)) {
  338. call->notify_rx = notify_rx;
  339. mutex_unlock(&call->user_mutex);
  340. }
  341. _leave(" = %p", call);
  342. return call;
  343. }
  344. EXPORT_SYMBOL(rxrpc_kernel_begin_call);
  345. /*
  346. * Dummy function used to stop the notifier talking to recvmsg().
  347. */
  348. static void rxrpc_dummy_notify_rx(struct sock *sk, struct rxrpc_call *rxcall,
  349. unsigned long call_user_ID)
  350. {
  351. }
  352. /**
  353. * rxrpc_kernel_shutdown_call - Allow a kernel service to shut down a call it was using
  354. * @sock: The socket the call is on
  355. * @call: The call to end
  356. *
  357. * Allow a kernel service to shut down a call it was using. The call must be
  358. * complete before this is called (the call should be aborted if necessary).
  359. */
  360. void rxrpc_kernel_shutdown_call(struct socket *sock, struct rxrpc_call *call)
  361. {
  362. _enter("%d{%d}", call->debug_id, refcount_read(&call->ref));
  363. mutex_lock(&call->user_mutex);
  364. if (!test_bit(RXRPC_CALL_RELEASED, &call->flags)) {
  365. rxrpc_release_call(rxrpc_sk(sock->sk), call);
  366. /* Make sure we're not going to call back into a kernel service */
  367. if (call->notify_rx) {
  368. spin_lock_irq(&call->notify_lock);
  369. call->notify_rx = rxrpc_dummy_notify_rx;
  370. spin_unlock_irq(&call->notify_lock);
  371. }
  372. }
  373. mutex_unlock(&call->user_mutex);
  374. }
  375. EXPORT_SYMBOL(rxrpc_kernel_shutdown_call);
  376. /**
  377. * rxrpc_kernel_put_call - Release a reference to a call
  378. * @sock: The socket the call is on
  379. * @call: The call to put
  380. *
  381. * Drop the application's ref on an rxrpc call.
  382. */
  383. void rxrpc_kernel_put_call(struct socket *sock, struct rxrpc_call *call)
  384. {
  385. rxrpc_put_call(call, rxrpc_call_put_kernel);
  386. }
  387. EXPORT_SYMBOL(rxrpc_kernel_put_call);
  388. /**
  389. * rxrpc_kernel_check_life - Check to see whether a call is still alive
  390. * @sock: The socket the call is on
  391. * @call: The call to check
  392. *
  393. * Allow a kernel service to find out whether a call is still alive - whether
  394. * it has completed successfully and all received data has been consumed.
  395. *
  396. * Return: %true if the call is still ongoing and %false if it has completed.
  397. */
  398. bool rxrpc_kernel_check_life(const struct socket *sock,
  399. const struct rxrpc_call *call)
  400. {
  401. if (!rxrpc_call_is_complete(call))
  402. return true;
  403. if (call->completion != RXRPC_CALL_SUCCEEDED)
  404. return false;
  405. return !skb_queue_empty(&call->recvmsg_queue);
  406. }
  407. EXPORT_SYMBOL(rxrpc_kernel_check_life);
  408. /**
  409. * rxrpc_kernel_set_notifications - Set table of callback operations
  410. * @sock: The socket to install table upon
  411. * @app_ops: Callback operation table to set
  412. *
  413. * Allow a kernel service to set a table of event notifications on a socket.
  414. */
  415. void rxrpc_kernel_set_notifications(struct socket *sock,
  416. const struct rxrpc_kernel_ops *app_ops)
  417. {
  418. struct rxrpc_sock *rx = rxrpc_sk(sock->sk);
  419. rx->app_ops = app_ops;
  420. }
  421. EXPORT_SYMBOL(rxrpc_kernel_set_notifications);
  422. /*
  423. * connect an RxRPC socket
  424. * - this just targets it at a specific destination; no actual connection
  425. * negotiation takes place
  426. */
  427. static int rxrpc_connect(struct socket *sock, struct sockaddr_unsized *addr,
  428. int addr_len, int flags)
  429. {
  430. struct sockaddr_rxrpc *srx = (struct sockaddr_rxrpc *)addr;
  431. struct rxrpc_sock *rx = rxrpc_sk(sock->sk);
  432. int ret;
  433. _enter("%p,%p,%d,%d", rx, addr, addr_len, flags);
  434. ret = rxrpc_validate_address(rx, srx, addr_len);
  435. if (ret < 0) {
  436. _leave(" = %d [bad addr]", ret);
  437. return ret;
  438. }
  439. lock_sock(&rx->sk);
  440. ret = -EISCONN;
  441. if (test_bit(RXRPC_SOCK_CONNECTED, &rx->flags))
  442. goto error;
  443. switch (rx->sk.sk_state) {
  444. case RXRPC_UNBOUND:
  445. rx->sk.sk_state = RXRPC_CLIENT_UNBOUND;
  446. break;
  447. case RXRPC_CLIENT_UNBOUND:
  448. case RXRPC_CLIENT_BOUND:
  449. break;
  450. default:
  451. ret = -EBUSY;
  452. goto error;
  453. }
  454. rx->connect_srx = *srx;
  455. set_bit(RXRPC_SOCK_CONNECTED, &rx->flags);
  456. ret = 0;
  457. error:
  458. release_sock(&rx->sk);
  459. return ret;
  460. }
  461. /*
  462. * send a message through an RxRPC socket
  463. * - in a client this does a number of things:
  464. * - finds/sets up a connection for the security specified (if any)
  465. * - initiates a call (ID in control data)
  466. * - ends the request phase of a call (if MSG_MORE is not set)
  467. * - sends a call data packet
  468. * - may send an abort (abort code in control data)
  469. */
  470. static int rxrpc_sendmsg(struct socket *sock, struct msghdr *m, size_t len)
  471. {
  472. struct rxrpc_local *local;
  473. struct rxrpc_sock *rx = rxrpc_sk(sock->sk);
  474. int ret;
  475. _enter(",{%d},,%zu", rx->sk.sk_state, len);
  476. if (m->msg_flags & MSG_OOB)
  477. return -EOPNOTSUPP;
  478. if (m->msg_name) {
  479. ret = rxrpc_validate_address(rx, m->msg_name, m->msg_namelen);
  480. if (ret < 0) {
  481. _leave(" = %d [bad addr]", ret);
  482. return ret;
  483. }
  484. }
  485. lock_sock(&rx->sk);
  486. switch (rx->sk.sk_state) {
  487. case RXRPC_UNBOUND:
  488. case RXRPC_CLIENT_UNBOUND:
  489. rx->srx.srx_family = AF_RXRPC;
  490. rx->srx.srx_service = 0;
  491. rx->srx.transport_type = SOCK_DGRAM;
  492. rx->srx.transport.family = rx->family;
  493. switch (rx->family) {
  494. case AF_INET:
  495. rx->srx.transport_len = sizeof(struct sockaddr_in);
  496. break;
  497. #ifdef CONFIG_AF_RXRPC_IPV6
  498. case AF_INET6:
  499. rx->srx.transport_len = sizeof(struct sockaddr_in6);
  500. break;
  501. #endif
  502. default:
  503. ret = -EAFNOSUPPORT;
  504. goto error_unlock;
  505. }
  506. local = rxrpc_lookup_local(sock_net(sock->sk), &rx->srx);
  507. if (IS_ERR(local)) {
  508. ret = PTR_ERR(local);
  509. goto error_unlock;
  510. }
  511. rx->local = local;
  512. rx->sk.sk_state = RXRPC_CLIENT_BOUND;
  513. fallthrough;
  514. case RXRPC_CLIENT_BOUND:
  515. if (!m->msg_name &&
  516. test_bit(RXRPC_SOCK_CONNECTED, &rx->flags)) {
  517. m->msg_name = &rx->connect_srx;
  518. m->msg_namelen = sizeof(rx->connect_srx);
  519. }
  520. fallthrough;
  521. case RXRPC_SERVER_BOUND:
  522. case RXRPC_SERVER_LISTENING:
  523. if (m->msg_flags & MSG_OOB)
  524. ret = rxrpc_sendmsg_oob(rx, m, len);
  525. else
  526. ret = rxrpc_do_sendmsg(rx, m, len);
  527. /* The socket has been unlocked */
  528. goto out;
  529. default:
  530. ret = -EINVAL;
  531. goto error_unlock;
  532. }
  533. error_unlock:
  534. release_sock(&rx->sk);
  535. out:
  536. _leave(" = %d", ret);
  537. return ret;
  538. }
  539. int rxrpc_sock_set_min_security_level(struct sock *sk, unsigned int val)
  540. {
  541. if (sk->sk_state != RXRPC_UNBOUND)
  542. return -EISCONN;
  543. if (val > RXRPC_SECURITY_MAX)
  544. return -EINVAL;
  545. lock_sock(sk);
  546. rxrpc_sk(sk)->min_sec_level = val;
  547. release_sock(sk);
  548. return 0;
  549. }
  550. EXPORT_SYMBOL(rxrpc_sock_set_min_security_level);
  551. /*
  552. * set RxRPC socket options
  553. */
  554. static int rxrpc_setsockopt(struct socket *sock, int level, int optname,
  555. sockptr_t optval, unsigned int optlen)
  556. {
  557. struct rxrpc_sock *rx = rxrpc_sk(sock->sk);
  558. unsigned int min_sec_level, val;
  559. u16 service_upgrade[2];
  560. int ret;
  561. _enter(",%d,%d,,%d", level, optname, optlen);
  562. lock_sock(&rx->sk);
  563. ret = -EOPNOTSUPP;
  564. if (level == SOL_RXRPC) {
  565. switch (optname) {
  566. case RXRPC_EXCLUSIVE_CONNECTION:
  567. ret = -EINVAL;
  568. if (optlen != 0)
  569. goto error;
  570. ret = -EISCONN;
  571. if (rx->sk.sk_state != RXRPC_UNBOUND)
  572. goto error;
  573. rx->exclusive = true;
  574. goto success;
  575. case RXRPC_SECURITY_KEY:
  576. ret = -EISCONN;
  577. if (rx->sk.sk_state != RXRPC_UNBOUND)
  578. goto error;
  579. ret = rxrpc_request_key(rx, optval, optlen);
  580. goto error;
  581. case RXRPC_SECURITY_KEYRING:
  582. ret = -EISCONN;
  583. if (rx->sk.sk_state != RXRPC_UNBOUND)
  584. goto error;
  585. ret = rxrpc_server_keyring(rx, optval, optlen);
  586. goto error;
  587. case RXRPC_MIN_SECURITY_LEVEL:
  588. ret = -EINVAL;
  589. if (optlen != sizeof(unsigned int))
  590. goto error;
  591. ret = -EISCONN;
  592. if (rx->sk.sk_state != RXRPC_UNBOUND)
  593. goto error;
  594. ret = copy_safe_from_sockptr(&min_sec_level,
  595. sizeof(min_sec_level),
  596. optval, optlen);
  597. if (ret)
  598. goto error;
  599. ret = -EINVAL;
  600. if (min_sec_level > RXRPC_SECURITY_MAX)
  601. goto error;
  602. rx->min_sec_level = min_sec_level;
  603. goto success;
  604. case RXRPC_UPGRADEABLE_SERVICE:
  605. ret = -EINVAL;
  606. if (optlen != sizeof(service_upgrade) ||
  607. rx->service_upgrade.from != 0)
  608. goto error;
  609. ret = -EISCONN;
  610. if (rx->sk.sk_state != RXRPC_SERVER_BOUND2)
  611. goto error;
  612. ret = -EFAULT;
  613. if (copy_from_sockptr(service_upgrade, optval,
  614. sizeof(service_upgrade)) != 0)
  615. goto error;
  616. ret = -EINVAL;
  617. if ((service_upgrade[0] != rx->srx.srx_service ||
  618. service_upgrade[1] != rx->second_service) &&
  619. (service_upgrade[0] != rx->second_service ||
  620. service_upgrade[1] != rx->srx.srx_service))
  621. goto error;
  622. rx->service_upgrade.from = service_upgrade[0];
  623. rx->service_upgrade.to = service_upgrade[1];
  624. goto success;
  625. case RXRPC_MANAGE_RESPONSE:
  626. ret = -EINVAL;
  627. if (optlen != sizeof(unsigned int))
  628. goto error;
  629. ret = -EISCONN;
  630. if (rx->sk.sk_state != RXRPC_UNBOUND)
  631. goto error;
  632. ret = copy_safe_from_sockptr(&val, sizeof(val),
  633. optval, optlen);
  634. if (ret)
  635. goto error;
  636. ret = -EINVAL;
  637. if (val > 1)
  638. goto error;
  639. if (val)
  640. set_bit(RXRPC_SOCK_MANAGE_RESPONSE, &rx->flags);
  641. else
  642. clear_bit(RXRPC_SOCK_MANAGE_RESPONSE, &rx->flags);
  643. goto success;
  644. default:
  645. break;
  646. }
  647. }
  648. success:
  649. ret = 0;
  650. error:
  651. release_sock(&rx->sk);
  652. return ret;
  653. }
  654. /*
  655. * Get socket options.
  656. */
  657. static int rxrpc_getsockopt(struct socket *sock, int level, int optname,
  658. char __user *optval, int __user *_optlen)
  659. {
  660. int optlen;
  661. if (level != SOL_RXRPC)
  662. return -EOPNOTSUPP;
  663. if (get_user(optlen, _optlen))
  664. return -EFAULT;
  665. switch (optname) {
  666. case RXRPC_SUPPORTED_CMSG:
  667. if (optlen < sizeof(int))
  668. return -ETOOSMALL;
  669. if (put_user(RXRPC__SUPPORTED - 1, (int __user *)optval) ||
  670. put_user(sizeof(int), _optlen))
  671. return -EFAULT;
  672. return 0;
  673. default:
  674. return -EOPNOTSUPP;
  675. }
  676. }
  677. /*
  678. * permit an RxRPC socket to be polled
  679. */
  680. static __poll_t rxrpc_poll(struct file *file, struct socket *sock,
  681. poll_table *wait)
  682. {
  683. struct sock *sk = sock->sk;
  684. struct rxrpc_sock *rx = rxrpc_sk(sk);
  685. __poll_t mask;
  686. sock_poll_wait(file, sock, wait);
  687. mask = 0;
  688. /* the socket is readable if there are any messages waiting on the Rx
  689. * queue */
  690. if (!list_empty(&rx->recvmsg_q))
  691. mask |= EPOLLIN | EPOLLRDNORM;
  692. /* the socket is writable if there is space to add new data to the
  693. * socket; there is no guarantee that any particular call in progress
  694. * on the socket may have space in the Tx ACK window */
  695. if (rxrpc_writable(sk))
  696. mask |= EPOLLOUT | EPOLLWRNORM;
  697. return mask;
  698. }
  699. /*
  700. * create an RxRPC socket
  701. */
  702. static int rxrpc_create(struct net *net, struct socket *sock, int protocol,
  703. int kern)
  704. {
  705. struct rxrpc_net *rxnet;
  706. struct rxrpc_sock *rx;
  707. struct sock *sk;
  708. _enter("%p,%d", sock, protocol);
  709. /* we support transport protocol UDP/UDP6 only */
  710. if (protocol != PF_INET &&
  711. IS_ENABLED(CONFIG_AF_RXRPC_IPV6) && protocol != PF_INET6)
  712. return -EPROTONOSUPPORT;
  713. if (sock->type != SOCK_DGRAM)
  714. return -ESOCKTNOSUPPORT;
  715. sock->ops = &rxrpc_rpc_ops;
  716. sock->state = SS_UNCONNECTED;
  717. sk = sk_alloc(net, PF_RXRPC, GFP_KERNEL, &rxrpc_proto, kern);
  718. if (!sk)
  719. return -ENOMEM;
  720. sock_init_data(sock, sk);
  721. sock_set_flag(sk, SOCK_RCU_FREE);
  722. sk->sk_state = RXRPC_UNBOUND;
  723. sk->sk_write_space = rxrpc_write_space;
  724. sk->sk_max_ack_backlog = 0;
  725. sk->sk_destruct = rxrpc_sock_destructor;
  726. rx = rxrpc_sk(sk);
  727. rx->family = protocol;
  728. rx->calls = RB_ROOT;
  729. spin_lock_init(&rx->incoming_lock);
  730. skb_queue_head_init(&rx->recvmsg_oobq);
  731. rx->pending_oobq = RB_ROOT;
  732. INIT_LIST_HEAD(&rx->sock_calls);
  733. INIT_LIST_HEAD(&rx->to_be_accepted);
  734. INIT_LIST_HEAD(&rx->recvmsg_q);
  735. spin_lock_init(&rx->recvmsg_lock);
  736. rwlock_init(&rx->call_lock);
  737. memset(&rx->srx, 0, sizeof(rx->srx));
  738. rxnet = rxrpc_net(sock_net(&rx->sk));
  739. timer_reduce(&rxnet->peer_keepalive_timer, jiffies + 1);
  740. _leave(" = 0 [%p]", rx);
  741. return 0;
  742. }
  743. /*
  744. * Kill all the calls on a socket and shut it down.
  745. */
  746. static int rxrpc_shutdown(struct socket *sock, int flags)
  747. {
  748. struct sock *sk = sock->sk;
  749. struct rxrpc_sock *rx = rxrpc_sk(sk);
  750. int ret = 0;
  751. _enter("%p,%d", sk, flags);
  752. if (flags != SHUT_RDWR)
  753. return -EOPNOTSUPP;
  754. if (sk->sk_state == RXRPC_CLOSE)
  755. return -ESHUTDOWN;
  756. lock_sock(sk);
  757. if (sk->sk_state < RXRPC_CLOSE) {
  758. spin_lock_irq(&rx->recvmsg_lock);
  759. sk->sk_state = RXRPC_CLOSE;
  760. sk->sk_shutdown = SHUTDOWN_MASK;
  761. spin_unlock_irq(&rx->recvmsg_lock);
  762. } else {
  763. ret = -ESHUTDOWN;
  764. }
  765. rxrpc_discard_prealloc(rx);
  766. release_sock(sk);
  767. return ret;
  768. }
  769. /*
  770. * Purge the out-of-band queue.
  771. */
  772. static void rxrpc_purge_oob_queue(struct sock *sk)
  773. {
  774. struct rxrpc_sock *rx = rxrpc_sk(sk);
  775. struct sk_buff *skb;
  776. while ((skb = skb_dequeue(&rx->recvmsg_oobq)))
  777. rxrpc_kernel_free_oob(skb);
  778. while (!RB_EMPTY_ROOT(&rx->pending_oobq)) {
  779. skb = rb_entry(rx->pending_oobq.rb_node, struct sk_buff, rbnode);
  780. rb_erase(&skb->rbnode, &rx->pending_oobq);
  781. rxrpc_kernel_free_oob(skb);
  782. }
  783. }
  784. /*
  785. * RxRPC socket destructor
  786. */
  787. static void rxrpc_sock_destructor(struct sock *sk)
  788. {
  789. _enter("%p", sk);
  790. rxrpc_purge_oob_queue(sk);
  791. rxrpc_purge_queue(&sk->sk_receive_queue);
  792. WARN_ON(refcount_read(&sk->sk_wmem_alloc));
  793. WARN_ON(!sk_unhashed(sk));
  794. WARN_ON(sk->sk_socket);
  795. if (!sock_flag(sk, SOCK_DEAD)) {
  796. printk("Attempt to release alive rxrpc socket: %p\n", sk);
  797. return;
  798. }
  799. }
  800. /*
  801. * release an RxRPC socket
  802. */
  803. static int rxrpc_release_sock(struct sock *sk)
  804. {
  805. struct rxrpc_sock *rx = rxrpc_sk(sk);
  806. _enter("%p{%d,%d}", sk, sk->sk_state, refcount_read(&sk->sk_refcnt));
  807. /* declare the socket closed for business */
  808. sock_orphan(sk);
  809. sk->sk_shutdown = SHUTDOWN_MASK;
  810. /* We want to kill off all connections from a service socket
  811. * as fast as possible because we can't share these; client
  812. * sockets, on the other hand, can share an endpoint.
  813. */
  814. switch (sk->sk_state) {
  815. case RXRPC_SERVER_BOUND:
  816. case RXRPC_SERVER_BOUND2:
  817. case RXRPC_SERVER_LISTENING:
  818. case RXRPC_SERVER_LISTEN_DISABLED:
  819. rx->local->service_closed = true;
  820. break;
  821. }
  822. spin_lock_irq(&rx->recvmsg_lock);
  823. sk->sk_state = RXRPC_CLOSE;
  824. spin_unlock_irq(&rx->recvmsg_lock);
  825. if (rx->local && rx->local->service == rx) {
  826. write_lock(&rx->local->services_lock);
  827. rx->local->service = NULL;
  828. write_unlock(&rx->local->services_lock);
  829. }
  830. /* try to flush out this socket */
  831. rxrpc_discard_prealloc(rx);
  832. rxrpc_release_calls_on_socket(rx);
  833. flush_workqueue(rxrpc_workqueue);
  834. rxrpc_purge_oob_queue(sk);
  835. rxrpc_purge_queue(&sk->sk_receive_queue);
  836. rxrpc_unuse_local(rx->local, rxrpc_local_unuse_release_sock);
  837. rxrpc_put_local(rx->local, rxrpc_local_put_release_sock);
  838. rx->local = NULL;
  839. key_put(rx->key);
  840. rx->key = NULL;
  841. key_put(rx->securities);
  842. rx->securities = NULL;
  843. sock_put(sk);
  844. _leave(" = 0");
  845. return 0;
  846. }
  847. /*
  848. * release an RxRPC BSD socket on close() or equivalent
  849. */
  850. static int rxrpc_release(struct socket *sock)
  851. {
  852. struct sock *sk = sock->sk;
  853. _enter("%p{%p}", sock, sk);
  854. if (!sk)
  855. return 0;
  856. sock->sk = NULL;
  857. return rxrpc_release_sock(sk);
  858. }
  859. /*
  860. * RxRPC network protocol
  861. */
  862. static const struct proto_ops rxrpc_rpc_ops = {
  863. .family = PF_RXRPC,
  864. .owner = THIS_MODULE,
  865. .release = rxrpc_release,
  866. .bind = rxrpc_bind,
  867. .connect = rxrpc_connect,
  868. .socketpair = sock_no_socketpair,
  869. .accept = sock_no_accept,
  870. .getname = sock_no_getname,
  871. .poll = rxrpc_poll,
  872. .ioctl = sock_no_ioctl,
  873. .listen = rxrpc_listen,
  874. .shutdown = rxrpc_shutdown,
  875. .setsockopt = rxrpc_setsockopt,
  876. .getsockopt = rxrpc_getsockopt,
  877. .sendmsg = rxrpc_sendmsg,
  878. .recvmsg = rxrpc_recvmsg,
  879. .mmap = sock_no_mmap,
  880. };
  881. static struct proto rxrpc_proto = {
  882. .name = "RXRPC",
  883. .owner = THIS_MODULE,
  884. .obj_size = sizeof(struct rxrpc_sock),
  885. .max_header = sizeof(struct rxrpc_wire_header),
  886. };
  887. static const struct net_proto_family rxrpc_family_ops = {
  888. .family = PF_RXRPC,
  889. .create = rxrpc_create,
  890. .owner = THIS_MODULE,
  891. };
  892. /*
  893. * initialise and register the RxRPC protocol
  894. */
  895. static int __init af_rxrpc_init(void)
  896. {
  897. int ret = -1;
  898. BUILD_BUG_ON(sizeof(struct rxrpc_skb_priv) > sizeof_field(struct sk_buff, cb));
  899. ret = -ENOMEM;
  900. rxrpc_gen_version_string();
  901. rxrpc_call_jar = kmem_cache_create(
  902. "rxrpc_call_jar", sizeof(struct rxrpc_call), 0,
  903. SLAB_HWCACHE_ALIGN, NULL);
  904. if (!rxrpc_call_jar) {
  905. pr_notice("Failed to allocate call jar\n");
  906. goto error_call_jar;
  907. }
  908. rxrpc_workqueue = alloc_ordered_workqueue("krxrpcd", WQ_HIGHPRI | WQ_MEM_RECLAIM);
  909. if (!rxrpc_workqueue) {
  910. pr_notice("Failed to allocate work queue\n");
  911. goto error_work_queue;
  912. }
  913. ret = rxrpc_init_security();
  914. if (ret < 0) {
  915. pr_crit("Cannot initialise security\n");
  916. goto error_security;
  917. }
  918. ret = register_pernet_device(&rxrpc_net_ops);
  919. if (ret)
  920. goto error_pernet;
  921. ret = proto_register(&rxrpc_proto, 1);
  922. if (ret < 0) {
  923. pr_crit("Cannot register protocol\n");
  924. goto error_proto;
  925. }
  926. ret = sock_register(&rxrpc_family_ops);
  927. if (ret < 0) {
  928. pr_crit("Cannot register socket family\n");
  929. goto error_sock;
  930. }
  931. ret = register_key_type(&key_type_rxrpc);
  932. if (ret < 0) {
  933. pr_crit("Cannot register client key type\n");
  934. goto error_key_type;
  935. }
  936. ret = register_key_type(&key_type_rxrpc_s);
  937. if (ret < 0) {
  938. pr_crit("Cannot register server key type\n");
  939. goto error_key_type_s;
  940. }
  941. ret = rxrpc_sysctl_init();
  942. if (ret < 0) {
  943. pr_crit("Cannot register sysctls\n");
  944. goto error_sysctls;
  945. }
  946. return 0;
  947. error_sysctls:
  948. unregister_key_type(&key_type_rxrpc_s);
  949. error_key_type_s:
  950. unregister_key_type(&key_type_rxrpc);
  951. error_key_type:
  952. sock_unregister(PF_RXRPC);
  953. error_sock:
  954. proto_unregister(&rxrpc_proto);
  955. error_proto:
  956. unregister_pernet_device(&rxrpc_net_ops);
  957. error_pernet:
  958. rxrpc_exit_security();
  959. error_security:
  960. destroy_workqueue(rxrpc_workqueue);
  961. error_work_queue:
  962. kmem_cache_destroy(rxrpc_call_jar);
  963. error_call_jar:
  964. return ret;
  965. }
  966. /*
  967. * unregister the RxRPC protocol
  968. */
  969. static void __exit af_rxrpc_exit(void)
  970. {
  971. _enter("");
  972. rxrpc_sysctl_exit();
  973. unregister_key_type(&key_type_rxrpc_s);
  974. unregister_key_type(&key_type_rxrpc);
  975. sock_unregister(PF_RXRPC);
  976. proto_unregister(&rxrpc_proto);
  977. unregister_pernet_device(&rxrpc_net_ops);
  978. ASSERTCMP(atomic_read(&rxrpc_n_rx_skbs), ==, 0);
  979. /* Make sure the local and peer records pinned by any dying connections
  980. * are released.
  981. */
  982. rcu_barrier();
  983. destroy_workqueue(rxrpc_workqueue);
  984. rxrpc_exit_security();
  985. kmem_cache_destroy(rxrpc_call_jar);
  986. _leave("");
  987. }
  988. module_init(af_rxrpc_init);
  989. module_exit(af_rxrpc_exit);