afs: use correct afs_call_type in yfs_fs_store_opaque_acl2
[sfrench/cifs-2.6.git] / net / rxrpc / local_object.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /* Local endpoint object management
3  *
4  * Copyright (C) 2016 Red Hat, Inc. All Rights Reserved.
5  * Written by David Howells (dhowells@redhat.com)
6  */
7
8 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
9
10 #include <linux/module.h>
11 #include <linux/net.h>
12 #include <linux/skbuff.h>
13 #include <linux/slab.h>
14 #include <linux/udp.h>
15 #include <linux/ip.h>
16 #include <linux/hashtable.h>
17 #include <net/sock.h>
18 #include <net/udp.h>
19 #include <net/af_rxrpc.h>
20 #include "ar-internal.h"
21
22 static void rxrpc_local_processor(struct work_struct *);
23 static void rxrpc_local_rcu(struct rcu_head *);
24
25 /*
26  * Compare a local to an address.  Return -ve, 0 or +ve to indicate less than,
27  * same or greater than.
28  *
29  * We explicitly don't compare the RxRPC service ID as we want to reject
30  * conflicting uses by differing services.  Further, we don't want to share
31  * addresses with different options (IPv6), so we don't compare those bits
32  * either.
33  */
34 static long rxrpc_local_cmp_key(const struct rxrpc_local *local,
35                                 const struct sockaddr_rxrpc *srx)
36 {
37         long diff;
38
39         diff = ((local->srx.transport_type - srx->transport_type) ?:
40                 (local->srx.transport_len - srx->transport_len) ?:
41                 (local->srx.transport.family - srx->transport.family));
42         if (diff != 0)
43                 return diff;
44
45         switch (srx->transport.family) {
46         case AF_INET:
47                 /* If the choice of UDP port is left up to the transport, then
48                  * the endpoint record doesn't match.
49                  */
50                 return ((u16 __force)local->srx.transport.sin.sin_port -
51                         (u16 __force)srx->transport.sin.sin_port) ?:
52                         memcmp(&local->srx.transport.sin.sin_addr,
53                                &srx->transport.sin.sin_addr,
54                                sizeof(struct in_addr));
55 #ifdef CONFIG_AF_RXRPC_IPV6
56         case AF_INET6:
57                 /* If the choice of UDP6 port is left up to the transport, then
58                  * the endpoint record doesn't match.
59                  */
60                 return ((u16 __force)local->srx.transport.sin6.sin6_port -
61                         (u16 __force)srx->transport.sin6.sin6_port) ?:
62                         memcmp(&local->srx.transport.sin6.sin6_addr,
63                                &srx->transport.sin6.sin6_addr,
64                                sizeof(struct in6_addr));
65 #endif
66         default:
67                 BUG();
68         }
69 }
70
71 /*
72  * Allocate a new local endpoint.
73  */
74 static struct rxrpc_local *rxrpc_alloc_local(struct rxrpc_net *rxnet,
75                                              const struct sockaddr_rxrpc *srx)
76 {
77         struct rxrpc_local *local;
78
79         local = kzalloc(sizeof(struct rxrpc_local), GFP_KERNEL);
80         if (local) {
81                 atomic_set(&local->usage, 1);
82                 local->rxnet = rxnet;
83                 INIT_LIST_HEAD(&local->link);
84                 INIT_WORK(&local->processor, rxrpc_local_processor);
85                 init_rwsem(&local->defrag_sem);
86                 skb_queue_head_init(&local->reject_queue);
87                 skb_queue_head_init(&local->event_queue);
88                 local->client_conns = RB_ROOT;
89                 spin_lock_init(&local->client_conns_lock);
90                 spin_lock_init(&local->lock);
91                 rwlock_init(&local->services_lock);
92                 local->debug_id = atomic_inc_return(&rxrpc_debug_id);
93                 memcpy(&local->srx, srx, sizeof(*srx));
94                 local->srx.srx_service = 0;
95                 trace_rxrpc_local(local, rxrpc_local_new, 1, NULL);
96         }
97
98         _leave(" = %p", local);
99         return local;
100 }
101
102 /*
103  * create the local socket
104  * - must be called with rxrpc_local_mutex locked
105  */
106 static int rxrpc_open_socket(struct rxrpc_local *local, struct net *net)
107 {
108         struct sock *usk;
109         int ret, opt;
110
111         _enter("%p{%d,%d}",
112                local, local->srx.transport_type, local->srx.transport.family);
113
114         /* create a socket to represent the local endpoint */
115         ret = sock_create_kern(net, local->srx.transport.family,
116                                local->srx.transport_type, 0, &local->socket);
117         if (ret < 0) {
118                 _leave(" = %d [socket]", ret);
119                 return ret;
120         }
121
122         /* set the socket up */
123         usk = local->socket->sk;
124         inet_sk(usk)->mc_loop = 0;
125
126         /* Enable CHECKSUM_UNNECESSARY to CHECKSUM_COMPLETE conversion */
127         inet_inc_convert_csum(usk);
128
129         rcu_assign_sk_user_data(usk, local);
130
131         udp_sk(usk)->encap_type = UDP_ENCAP_RXRPC;
132         udp_sk(usk)->encap_rcv = rxrpc_input_packet;
133         udp_sk(usk)->encap_destroy = NULL;
134         udp_sk(usk)->gro_receive = NULL;
135         udp_sk(usk)->gro_complete = NULL;
136
137         udp_encap_enable();
138 #if IS_ENABLED(CONFIG_AF_RXRPC_IPV6)
139         if (local->srx.transport.family == AF_INET6)
140                 udpv6_encap_enable();
141 #endif
142         usk->sk_error_report = rxrpc_error_report;
143
144         /* if a local address was supplied then bind it */
145         if (local->srx.transport_len > sizeof(sa_family_t)) {
146                 _debug("bind");
147                 ret = kernel_bind(local->socket,
148                                   (struct sockaddr *)&local->srx.transport,
149                                   local->srx.transport_len);
150                 if (ret < 0) {
151                         _debug("bind failed %d", ret);
152                         goto error;
153                 }
154         }
155
156         switch (local->srx.transport.family) {
157         case AF_INET6:
158                 /* we want to receive ICMPv6 errors */
159                 opt = 1;
160                 ret = kernel_setsockopt(local->socket, SOL_IPV6, IPV6_RECVERR,
161                                         (char *) &opt, sizeof(opt));
162                 if (ret < 0) {
163                         _debug("setsockopt failed");
164                         goto error;
165                 }
166
167                 /* we want to set the don't fragment bit */
168                 opt = IPV6_PMTUDISC_DO;
169                 ret = kernel_setsockopt(local->socket, SOL_IPV6, IPV6_MTU_DISCOVER,
170                                         (char *) &opt, sizeof(opt));
171                 if (ret < 0) {
172                         _debug("setsockopt failed");
173                         goto error;
174                 }
175
176                 /* Fall through and set IPv4 options too otherwise we don't get
177                  * errors from IPv4 packets sent through the IPv6 socket.
178                  */
179                 /* Fall through */
180         case AF_INET:
181                 /* we want to receive ICMP errors */
182                 opt = 1;
183                 ret = kernel_setsockopt(local->socket, SOL_IP, IP_RECVERR,
184                                         (char *) &opt, sizeof(opt));
185                 if (ret < 0) {
186                         _debug("setsockopt failed");
187                         goto error;
188                 }
189
190                 /* we want to set the don't fragment bit */
191                 opt = IP_PMTUDISC_DO;
192                 ret = kernel_setsockopt(local->socket, SOL_IP, IP_MTU_DISCOVER,
193                                         (char *) &opt, sizeof(opt));
194                 if (ret < 0) {
195                         _debug("setsockopt failed");
196                         goto error;
197                 }
198
199                 /* We want receive timestamps. */
200                 opt = 1;
201                 ret = kernel_setsockopt(local->socket, SOL_SOCKET, SO_TIMESTAMPNS_OLD,
202                                         (char *)&opt, sizeof(opt));
203                 if (ret < 0) {
204                         _debug("setsockopt failed");
205                         goto error;
206                 }
207                 break;
208
209         default:
210                 BUG();
211         }
212
213         _leave(" = 0");
214         return 0;
215
216 error:
217         kernel_sock_shutdown(local->socket, SHUT_RDWR);
218         local->socket->sk->sk_user_data = NULL;
219         sock_release(local->socket);
220         local->socket = NULL;
221
222         _leave(" = %d", ret);
223         return ret;
224 }
225
226 /*
227  * Look up or create a new local endpoint using the specified local address.
228  */
229 struct rxrpc_local *rxrpc_lookup_local(struct net *net,
230                                        const struct sockaddr_rxrpc *srx)
231 {
232         struct rxrpc_local *local;
233         struct rxrpc_net *rxnet = rxrpc_net(net);
234         struct list_head *cursor;
235         const char *age;
236         long diff;
237         int ret;
238
239         _enter("{%d,%d,%pISp}",
240                srx->transport_type, srx->transport.family, &srx->transport);
241
242         mutex_lock(&rxnet->local_mutex);
243
244         for (cursor = rxnet->local_endpoints.next;
245              cursor != &rxnet->local_endpoints;
246              cursor = cursor->next) {
247                 local = list_entry(cursor, struct rxrpc_local, link);
248
249                 diff = rxrpc_local_cmp_key(local, srx);
250                 if (diff < 0)
251                         continue;
252                 if (diff > 0)
253                         break;
254
255                 /* Services aren't allowed to share transport sockets, so
256                  * reject that here.  It is possible that the object is dying -
257                  * but it may also still have the local transport address that
258                  * we want bound.
259                  */
260                 if (srx->srx_service) {
261                         local = NULL;
262                         goto addr_in_use;
263                 }
264
265                 /* Found a match.  We replace a dying object.  Attempting to
266                  * bind the transport socket may still fail if we're attempting
267                  * to use a local address that the dying object is still using.
268                  */
269                 if (!rxrpc_get_local_maybe(local)) {
270                         cursor = cursor->next;
271                         list_del_init(&local->link);
272                         break;
273                 }
274
275                 age = "old";
276                 goto found;
277         }
278
279         local = rxrpc_alloc_local(rxnet, srx);
280         if (!local)
281                 goto nomem;
282
283         ret = rxrpc_open_socket(local, net);
284         if (ret < 0)
285                 goto sock_error;
286
287         list_add_tail(&local->link, cursor);
288         age = "new";
289
290 found:
291         mutex_unlock(&rxnet->local_mutex);
292
293         _net("LOCAL %s %d {%pISp}",
294              age, local->debug_id, &local->srx.transport);
295
296         _leave(" = %p", local);
297         return local;
298
299 nomem:
300         ret = -ENOMEM;
301 sock_error:
302         mutex_unlock(&rxnet->local_mutex);
303         if (local)
304                 call_rcu(&local->rcu, rxrpc_local_rcu);
305         _leave(" = %d", ret);
306         return ERR_PTR(ret);
307
308 addr_in_use:
309         mutex_unlock(&rxnet->local_mutex);
310         _leave(" = -EADDRINUSE");
311         return ERR_PTR(-EADDRINUSE);
312 }
313
314 /*
315  * Get a ref on a local endpoint.
316  */
317 struct rxrpc_local *rxrpc_get_local(struct rxrpc_local *local)
318 {
319         const void *here = __builtin_return_address(0);
320         int n;
321
322         n = atomic_inc_return(&local->usage);
323         trace_rxrpc_local(local, rxrpc_local_got, n, here);
324         return local;
325 }
326
327 /*
328  * Get a ref on a local endpoint unless its usage has already reached 0.
329  */
330 struct rxrpc_local *rxrpc_get_local_maybe(struct rxrpc_local *local)
331 {
332         const void *here = __builtin_return_address(0);
333
334         if (local) {
335                 int n = atomic_fetch_add_unless(&local->usage, 1, 0);
336                 if (n > 0)
337                         trace_rxrpc_local(local, rxrpc_local_got, n + 1, here);
338                 else
339                         local = NULL;
340         }
341         return local;
342 }
343
344 /*
345  * Queue a local endpoint.
346  */
347 void rxrpc_queue_local(struct rxrpc_local *local)
348 {
349         const void *here = __builtin_return_address(0);
350
351         if (rxrpc_queue_work(&local->processor))
352                 trace_rxrpc_local(local, rxrpc_local_queued,
353                                   atomic_read(&local->usage), here);
354 }
355
356 /*
357  * A local endpoint reached its end of life.
358  */
359 static void __rxrpc_put_local(struct rxrpc_local *local)
360 {
361         _enter("%d", local->debug_id);
362         rxrpc_queue_work(&local->processor);
363 }
364
365 /*
366  * Drop a ref on a local endpoint.
367  */
368 void rxrpc_put_local(struct rxrpc_local *local)
369 {
370         const void *here = __builtin_return_address(0);
371         int n;
372
373         if (local) {
374                 n = atomic_dec_return(&local->usage);
375                 trace_rxrpc_local(local, rxrpc_local_put, n, here);
376
377                 if (n == 0)
378                         __rxrpc_put_local(local);
379         }
380 }
381
382 /*
383  * Destroy a local endpoint's socket and then hand the record to RCU to dispose
384  * of.
385  *
386  * Closing the socket cannot be done from bottom half context or RCU callback
387  * context because it might sleep.
388  */
389 static void rxrpc_local_destroyer(struct rxrpc_local *local)
390 {
391         struct socket *socket = local->socket;
392         struct rxrpc_net *rxnet = local->rxnet;
393
394         _enter("%d", local->debug_id);
395
396         /* We can get a race between an incoming call packet queueing the
397          * processor again and the work processor starting the destruction
398          * process which will shut down the UDP socket.
399          */
400         if (local->dead) {
401                 _leave(" [already dead]");
402                 return;
403         }
404         local->dead = true;
405
406         mutex_lock(&rxnet->local_mutex);
407         list_del_init(&local->link);
408         mutex_unlock(&rxnet->local_mutex);
409
410         ASSERT(RB_EMPTY_ROOT(&local->client_conns));
411         ASSERT(!local->service);
412
413         if (socket) {
414                 local->socket = NULL;
415                 kernel_sock_shutdown(socket, SHUT_RDWR);
416                 socket->sk->sk_user_data = NULL;
417                 sock_release(socket);
418         }
419
420         /* At this point, there should be no more packets coming in to the
421          * local endpoint.
422          */
423         rxrpc_purge_queue(&local->reject_queue);
424         rxrpc_purge_queue(&local->event_queue);
425
426         _debug("rcu local %d", local->debug_id);
427         call_rcu(&local->rcu, rxrpc_local_rcu);
428 }
429
430 /*
431  * Process events on an endpoint
432  */
433 static void rxrpc_local_processor(struct work_struct *work)
434 {
435         struct rxrpc_local *local =
436                 container_of(work, struct rxrpc_local, processor);
437         bool again;
438
439         trace_rxrpc_local(local, rxrpc_local_processing,
440                           atomic_read(&local->usage), NULL);
441
442         do {
443                 again = false;
444                 if (atomic_read(&local->usage) == 0)
445                         return rxrpc_local_destroyer(local);
446
447                 if (!skb_queue_empty(&local->reject_queue)) {
448                         rxrpc_reject_packets(local);
449                         again = true;
450                 }
451
452                 if (!skb_queue_empty(&local->event_queue)) {
453                         rxrpc_process_local_events(local);
454                         again = true;
455                 }
456         } while (again);
457 }
458
459 /*
460  * Destroy a local endpoint after the RCU grace period expires.
461  */
462 static void rxrpc_local_rcu(struct rcu_head *rcu)
463 {
464         struct rxrpc_local *local = container_of(rcu, struct rxrpc_local, rcu);
465
466         _enter("%d", local->debug_id);
467
468         ASSERT(!work_pending(&local->processor));
469
470         _net("DESTROY LOCAL %d", local->debug_id);
471         kfree(local);
472         _leave("");
473 }
474
475 /*
476  * Verify the local endpoint list is empty by this point.
477  */
478 void rxrpc_destroy_all_locals(struct rxrpc_net *rxnet)
479 {
480         struct rxrpc_local *local;
481
482         _enter("");
483
484         flush_workqueue(rxrpc_workqueue);
485
486         if (!list_empty(&rxnet->local_endpoints)) {
487                 mutex_lock(&rxnet->local_mutex);
488                 list_for_each_entry(local, &rxnet->local_endpoints, link) {
489                         pr_err("AF_RXRPC: Leaked local %p {%d}\n",
490                                local, atomic_read(&local->usage));
491                 }
492                 mutex_unlock(&rxnet->local_mutex);
493                 BUG();
494         }
495 }