GNU Linux-libre 5.4.207-gnu1
[releases.git] / net / qrtr / qrtr.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2015, Sony Mobile Communications Inc.
4  * Copyright (c) 2013, The Linux Foundation. All rights reserved.
5  */
6 #include <linux/module.h>
7 #include <linux/netlink.h>
8 #include <linux/qrtr.h>
9 #include <linux/termios.h>      /* For TIOCINQ/OUTQ */
10 #include <linux/numa.h>
11
12 #include <net/sock.h>
13
14 #include "qrtr.h"
15
16 #define QRTR_PROTO_VER_1 1
17 #define QRTR_PROTO_VER_2 3
18
19 /* auto-bind range */
20 #define QRTR_MIN_EPH_SOCKET 0x4000
21 #define QRTR_MAX_EPH_SOCKET 0x7fff
22
23 /**
24  * struct qrtr_hdr_v1 - (I|R)PCrouter packet header version 1
25  * @version: protocol version
26  * @type: packet type; one of QRTR_TYPE_*
27  * @src_node_id: source node
28  * @src_port_id: source port
29  * @confirm_rx: boolean; whether a resume-tx packet should be send in reply
30  * @size: length of packet, excluding this header
31  * @dst_node_id: destination node
32  * @dst_port_id: destination port
33  */
34 struct qrtr_hdr_v1 {
35         __le32 version;
36         __le32 type;
37         __le32 src_node_id;
38         __le32 src_port_id;
39         __le32 confirm_rx;
40         __le32 size;
41         __le32 dst_node_id;
42         __le32 dst_port_id;
43 } __packed;
44
45 /**
46  * struct qrtr_hdr_v2 - (I|R)PCrouter packet header later versions
47  * @version: protocol version
48  * @type: packet type; one of QRTR_TYPE_*
49  * @flags: bitmask of QRTR_FLAGS_*
50  * @optlen: length of optional header data
51  * @size: length of packet, excluding this header and optlen
52  * @src_node_id: source node
53  * @src_port_id: source port
54  * @dst_node_id: destination node
55  * @dst_port_id: destination port
56  */
57 struct qrtr_hdr_v2 {
58         u8 version;
59         u8 type;
60         u8 flags;
61         u8 optlen;
62         __le32 size;
63         __le16 src_node_id;
64         __le16 src_port_id;
65         __le16 dst_node_id;
66         __le16 dst_port_id;
67 };
68
69 #define QRTR_FLAGS_CONFIRM_RX   BIT(0)
70
71 struct qrtr_cb {
72         u32 src_node;
73         u32 src_port;
74         u32 dst_node;
75         u32 dst_port;
76
77         u8 type;
78         u8 confirm_rx;
79 };
80
81 #define QRTR_HDR_MAX_SIZE max_t(size_t, sizeof(struct qrtr_hdr_v1), \
82                                         sizeof(struct qrtr_hdr_v2))
83
84 struct qrtr_sock {
85         /* WARNING: sk must be the first member */
86         struct sock sk;
87         struct sockaddr_qrtr us;
88         struct sockaddr_qrtr peer;
89 };
90
91 static inline struct qrtr_sock *qrtr_sk(struct sock *sk)
92 {
93         BUILD_BUG_ON(offsetof(struct qrtr_sock, sk) != 0);
94         return container_of(sk, struct qrtr_sock, sk);
95 }
96
97 static unsigned int qrtr_local_nid = NUMA_NO_NODE;
98
99 /* for node ids */
100 static RADIX_TREE(qrtr_nodes, GFP_KERNEL);
101 /* broadcast list */
102 static LIST_HEAD(qrtr_all_nodes);
103 /* lock for qrtr_nodes, qrtr_all_nodes and node reference */
104 static DEFINE_MUTEX(qrtr_node_lock);
105
106 /* local port allocation management */
107 static DEFINE_IDR(qrtr_ports);
108 static DEFINE_MUTEX(qrtr_port_lock);
109
110 /**
111  * struct qrtr_node - endpoint node
112  * @ep_lock: lock for endpoint management and callbacks
113  * @ep: endpoint
114  * @ref: reference count for node
115  * @nid: node id
116  * @rx_queue: receive queue
117  * @work: scheduled work struct for recv work
118  * @item: list item for broadcast list
119  */
120 struct qrtr_node {
121         struct mutex ep_lock;
122         struct qrtr_endpoint *ep;
123         struct kref ref;
124         unsigned int nid;
125
126         struct sk_buff_head rx_queue;
127         struct work_struct work;
128         struct list_head item;
129 };
130
131 static int qrtr_local_enqueue(struct qrtr_node *node, struct sk_buff *skb,
132                               int type, struct sockaddr_qrtr *from,
133                               struct sockaddr_qrtr *to);
134 static int qrtr_bcast_enqueue(struct qrtr_node *node, struct sk_buff *skb,
135                               int type, struct sockaddr_qrtr *from,
136                               struct sockaddr_qrtr *to);
137
138 /* Release node resources and free the node.
139  *
140  * Do not call directly, use qrtr_node_release.  To be used with
141  * kref_put_mutex.  As such, the node mutex is expected to be locked on call.
142  */
143 static void __qrtr_node_release(struct kref *kref)
144 {
145         struct qrtr_node *node = container_of(kref, struct qrtr_node, ref);
146
147         if (node->nid != QRTR_EP_NID_AUTO)
148                 radix_tree_delete(&qrtr_nodes, node->nid);
149
150         list_del(&node->item);
151         mutex_unlock(&qrtr_node_lock);
152
153         cancel_work_sync(&node->work);
154         skb_queue_purge(&node->rx_queue);
155         kfree(node);
156 }
157
158 /* Increment reference to node. */
159 static struct qrtr_node *qrtr_node_acquire(struct qrtr_node *node)
160 {
161         if (node)
162                 kref_get(&node->ref);
163         return node;
164 }
165
166 /* Decrement reference to node and release as necessary. */
167 static void qrtr_node_release(struct qrtr_node *node)
168 {
169         if (!node)
170                 return;
171         kref_put_mutex(&node->ref, __qrtr_node_release, &qrtr_node_lock);
172 }
173
174 /* Pass an outgoing packet socket buffer to the endpoint driver. */
175 static int qrtr_node_enqueue(struct qrtr_node *node, struct sk_buff *skb,
176                              int type, struct sockaddr_qrtr *from,
177                              struct sockaddr_qrtr *to)
178 {
179         struct qrtr_hdr_v1 *hdr;
180         size_t len = skb->len;
181         int rc;
182
183         hdr = skb_push(skb, sizeof(*hdr));
184         hdr->version = cpu_to_le32(QRTR_PROTO_VER_1);
185         hdr->type = cpu_to_le32(type);
186         hdr->src_node_id = cpu_to_le32(from->sq_node);
187         hdr->src_port_id = cpu_to_le32(from->sq_port);
188         if (to->sq_port == QRTR_PORT_CTRL) {
189                 hdr->dst_node_id = cpu_to_le32(node->nid);
190                 hdr->dst_port_id = cpu_to_le32(QRTR_PORT_CTRL);
191         } else {
192                 hdr->dst_node_id = cpu_to_le32(to->sq_node);
193                 hdr->dst_port_id = cpu_to_le32(to->sq_port);
194         }
195
196         hdr->size = cpu_to_le32(len);
197         hdr->confirm_rx = 0;
198
199         rc = skb_put_padto(skb, ALIGN(len, 4) + sizeof(*hdr));
200
201         if (!rc) {
202                 mutex_lock(&node->ep_lock);
203                 rc = -ENODEV;
204                 if (node->ep)
205                         rc = node->ep->xmit(node->ep, skb);
206                 else
207                         kfree_skb(skb);
208                 mutex_unlock(&node->ep_lock);
209         }
210         return rc;
211 }
212
213 /* Lookup node by id.
214  *
215  * callers must release with qrtr_node_release()
216  */
217 static struct qrtr_node *qrtr_node_lookup(unsigned int nid)
218 {
219         struct qrtr_node *node;
220
221         mutex_lock(&qrtr_node_lock);
222         node = radix_tree_lookup(&qrtr_nodes, nid);
223         node = qrtr_node_acquire(node);
224         mutex_unlock(&qrtr_node_lock);
225
226         return node;
227 }
228
229 /* Assign node id to node.
230  *
231  * This is mostly useful for automatic node id assignment, based on
232  * the source id in the incoming packet.
233  */
234 static void qrtr_node_assign(struct qrtr_node *node, unsigned int nid)
235 {
236         if (node->nid != QRTR_EP_NID_AUTO || nid == QRTR_EP_NID_AUTO)
237                 return;
238
239         mutex_lock(&qrtr_node_lock);
240         radix_tree_insert(&qrtr_nodes, nid, node);
241         node->nid = nid;
242         mutex_unlock(&qrtr_node_lock);
243 }
244
245 /**
246  * qrtr_endpoint_post() - post incoming data
247  * @ep: endpoint handle
248  * @data: data pointer
249  * @len: size of data in bytes
250  *
251  * Return: 0 on success; negative error code on failure
252  */
253 int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len)
254 {
255         struct qrtr_node *node = ep->node;
256         const struct qrtr_hdr_v1 *v1;
257         const struct qrtr_hdr_v2 *v2;
258         struct sk_buff *skb;
259         struct qrtr_cb *cb;
260         size_t size;
261         unsigned int ver;
262         size_t hdrlen;
263
264         if (len == 0 || len & 3)
265                 return -EINVAL;
266
267         skb = __netdev_alloc_skb(NULL, len, GFP_ATOMIC | __GFP_NOWARN);
268         if (!skb)
269                 return -ENOMEM;
270
271         cb = (struct qrtr_cb *)skb->cb;
272
273         /* Version field in v1 is little endian, so this works for both cases */
274         ver = *(u8*)data;
275
276         switch (ver) {
277         case QRTR_PROTO_VER_1:
278                 if (len < sizeof(*v1))
279                         goto err;
280                 v1 = data;
281                 hdrlen = sizeof(*v1);
282
283                 cb->type = le32_to_cpu(v1->type);
284                 cb->src_node = le32_to_cpu(v1->src_node_id);
285                 cb->src_port = le32_to_cpu(v1->src_port_id);
286                 cb->confirm_rx = !!v1->confirm_rx;
287                 cb->dst_node = le32_to_cpu(v1->dst_node_id);
288                 cb->dst_port = le32_to_cpu(v1->dst_port_id);
289
290                 size = le32_to_cpu(v1->size);
291                 break;
292         case QRTR_PROTO_VER_2:
293                 if (len < sizeof(*v2))
294                         goto err;
295                 v2 = data;
296                 hdrlen = sizeof(*v2) + v2->optlen;
297
298                 cb->type = v2->type;
299                 cb->confirm_rx = !!(v2->flags & QRTR_FLAGS_CONFIRM_RX);
300                 cb->src_node = le16_to_cpu(v2->src_node_id);
301                 cb->src_port = le16_to_cpu(v2->src_port_id);
302                 cb->dst_node = le16_to_cpu(v2->dst_node_id);
303                 cb->dst_port = le16_to_cpu(v2->dst_port_id);
304
305                 if (cb->src_port == (u16)QRTR_PORT_CTRL)
306                         cb->src_port = QRTR_PORT_CTRL;
307                 if (cb->dst_port == (u16)QRTR_PORT_CTRL)
308                         cb->dst_port = QRTR_PORT_CTRL;
309
310                 size = le32_to_cpu(v2->size);
311                 break;
312         default:
313                 pr_err("qrtr: Invalid version %d\n", ver);
314                 goto err;
315         }
316
317         if (!size || len != ALIGN(size, 4) + hdrlen)
318                 goto err;
319
320         if (cb->dst_port != QRTR_PORT_CTRL && cb->type != QRTR_TYPE_DATA)
321                 goto err;
322
323         skb_put_data(skb, data + hdrlen, size);
324
325         skb_queue_tail(&node->rx_queue, skb);
326         schedule_work(&node->work);
327
328         return 0;
329
330 err:
331         kfree_skb(skb);
332         return -EINVAL;
333
334 }
335 EXPORT_SYMBOL_GPL(qrtr_endpoint_post);
336
337 /**
338  * qrtr_alloc_ctrl_packet() - allocate control packet skb
339  * @pkt: reference to qrtr_ctrl_pkt pointer
340  *
341  * Returns newly allocated sk_buff, or NULL on failure
342  *
343  * This function allocates a sk_buff large enough to carry a qrtr_ctrl_pkt and
344  * on success returns a reference to the control packet in @pkt.
345  */
346 static struct sk_buff *qrtr_alloc_ctrl_packet(struct qrtr_ctrl_pkt **pkt)
347 {
348         const int pkt_len = sizeof(struct qrtr_ctrl_pkt);
349         struct sk_buff *skb;
350
351         skb = alloc_skb(QRTR_HDR_MAX_SIZE + pkt_len, GFP_KERNEL);
352         if (!skb)
353                 return NULL;
354
355         skb_reserve(skb, QRTR_HDR_MAX_SIZE);
356         *pkt = skb_put_zero(skb, pkt_len);
357
358         return skb;
359 }
360
361 static struct qrtr_sock *qrtr_port_lookup(int port);
362 static void qrtr_port_put(struct qrtr_sock *ipc);
363
364 /* Handle and route a received packet.
365  *
366  * This will auto-reply with resume-tx packet as necessary.
367  */
368 static void qrtr_node_rx_work(struct work_struct *work)
369 {
370         struct qrtr_node *node = container_of(work, struct qrtr_node, work);
371         struct qrtr_ctrl_pkt *pkt;
372         struct sockaddr_qrtr dst;
373         struct sockaddr_qrtr src;
374         struct sk_buff *skb;
375
376         while ((skb = skb_dequeue(&node->rx_queue)) != NULL) {
377                 struct qrtr_sock *ipc;
378                 struct qrtr_cb *cb;
379                 int confirm;
380
381                 cb = (struct qrtr_cb *)skb->cb;
382                 src.sq_node = cb->src_node;
383                 src.sq_port = cb->src_port;
384                 dst.sq_node = cb->dst_node;
385                 dst.sq_port = cb->dst_port;
386                 confirm = !!cb->confirm_rx;
387
388                 qrtr_node_assign(node, cb->src_node);
389
390                 ipc = qrtr_port_lookup(cb->dst_port);
391                 if (!ipc) {
392                         kfree_skb(skb);
393                 } else {
394                         if (sock_queue_rcv_skb(&ipc->sk, skb))
395                                 kfree_skb(skb);
396
397                         qrtr_port_put(ipc);
398                 }
399
400                 if (confirm) {
401                         skb = qrtr_alloc_ctrl_packet(&pkt);
402                         if (!skb)
403                                 break;
404
405                         pkt->cmd = cpu_to_le32(QRTR_TYPE_RESUME_TX);
406                         pkt->client.node = cpu_to_le32(dst.sq_node);
407                         pkt->client.port = cpu_to_le32(dst.sq_port);
408
409                         if (qrtr_node_enqueue(node, skb, QRTR_TYPE_RESUME_TX,
410                                               &dst, &src))
411                                 break;
412                 }
413         }
414 }
415
416 /**
417  * qrtr_endpoint_register() - register a new endpoint
418  * @ep: endpoint to register
419  * @nid: desired node id; may be QRTR_EP_NID_AUTO for auto-assignment
420  * Return: 0 on success; negative error code on failure
421  *
422  * The specified endpoint must have the xmit function pointer set on call.
423  */
424 int qrtr_endpoint_register(struct qrtr_endpoint *ep, unsigned int nid)
425 {
426         struct qrtr_node *node;
427
428         if (!ep || !ep->xmit)
429                 return -EINVAL;
430
431         node = kzalloc(sizeof(*node), GFP_KERNEL);
432         if (!node)
433                 return -ENOMEM;
434
435         INIT_WORK(&node->work, qrtr_node_rx_work);
436         kref_init(&node->ref);
437         mutex_init(&node->ep_lock);
438         skb_queue_head_init(&node->rx_queue);
439         node->nid = QRTR_EP_NID_AUTO;
440         node->ep = ep;
441
442         qrtr_node_assign(node, nid);
443
444         mutex_lock(&qrtr_node_lock);
445         list_add(&node->item, &qrtr_all_nodes);
446         mutex_unlock(&qrtr_node_lock);
447         ep->node = node;
448
449         return 0;
450 }
451 EXPORT_SYMBOL_GPL(qrtr_endpoint_register);
452
453 /**
454  * qrtr_endpoint_unregister - unregister endpoint
455  * @ep: endpoint to unregister
456  */
457 void qrtr_endpoint_unregister(struct qrtr_endpoint *ep)
458 {
459         struct qrtr_node *node = ep->node;
460         struct sockaddr_qrtr src = {AF_QIPCRTR, node->nid, QRTR_PORT_CTRL};
461         struct sockaddr_qrtr dst = {AF_QIPCRTR, qrtr_local_nid, QRTR_PORT_CTRL};
462         struct qrtr_ctrl_pkt *pkt;
463         struct sk_buff *skb;
464
465         mutex_lock(&node->ep_lock);
466         node->ep = NULL;
467         mutex_unlock(&node->ep_lock);
468
469         /* Notify the local controller about the event */
470         skb = qrtr_alloc_ctrl_packet(&pkt);
471         if (skb) {
472                 pkt->cmd = cpu_to_le32(QRTR_TYPE_BYE);
473                 qrtr_local_enqueue(NULL, skb, QRTR_TYPE_BYE, &src, &dst);
474         }
475
476         qrtr_node_release(node);
477         ep->node = NULL;
478 }
479 EXPORT_SYMBOL_GPL(qrtr_endpoint_unregister);
480
481 /* Lookup socket by port.
482  *
483  * Callers must release with qrtr_port_put()
484  */
485 static struct qrtr_sock *qrtr_port_lookup(int port)
486 {
487         struct qrtr_sock *ipc;
488
489         if (port == QRTR_PORT_CTRL)
490                 port = 0;
491
492         mutex_lock(&qrtr_port_lock);
493         ipc = idr_find(&qrtr_ports, port);
494         if (ipc)
495                 sock_hold(&ipc->sk);
496         mutex_unlock(&qrtr_port_lock);
497
498         return ipc;
499 }
500
501 /* Release acquired socket. */
502 static void qrtr_port_put(struct qrtr_sock *ipc)
503 {
504         sock_put(&ipc->sk);
505 }
506
507 /* Remove port assignment. */
508 static void qrtr_port_remove(struct qrtr_sock *ipc)
509 {
510         struct qrtr_ctrl_pkt *pkt;
511         struct sk_buff *skb;
512         int port = ipc->us.sq_port;
513         struct sockaddr_qrtr to;
514
515         to.sq_family = AF_QIPCRTR;
516         to.sq_node = QRTR_NODE_BCAST;
517         to.sq_port = QRTR_PORT_CTRL;
518
519         skb = qrtr_alloc_ctrl_packet(&pkt);
520         if (skb) {
521                 pkt->cmd = cpu_to_le32(QRTR_TYPE_DEL_CLIENT);
522                 pkt->client.node = cpu_to_le32(ipc->us.sq_node);
523                 pkt->client.port = cpu_to_le32(ipc->us.sq_port);
524
525                 skb_set_owner_w(skb, &ipc->sk);
526                 qrtr_bcast_enqueue(NULL, skb, QRTR_TYPE_DEL_CLIENT, &ipc->us,
527                                    &to);
528         }
529
530         if (port == QRTR_PORT_CTRL)
531                 port = 0;
532
533         __sock_put(&ipc->sk);
534
535         mutex_lock(&qrtr_port_lock);
536         idr_remove(&qrtr_ports, port);
537         mutex_unlock(&qrtr_port_lock);
538 }
539
540 /* Assign port number to socket.
541  *
542  * Specify port in the integer pointed to by port, and it will be adjusted
543  * on return as necesssary.
544  *
545  * Port may be:
546  *   0: Assign ephemeral port in [QRTR_MIN_EPH_SOCKET, QRTR_MAX_EPH_SOCKET]
547  *   <QRTR_MIN_EPH_SOCKET: Specified; requires CAP_NET_ADMIN
548  *   >QRTR_MIN_EPH_SOCKET: Specified; available to all
549  */
550 static int qrtr_port_assign(struct qrtr_sock *ipc, int *port)
551 {
552         u32 min_port;
553         int rc;
554
555         mutex_lock(&qrtr_port_lock);
556         if (!*port) {
557                 min_port = QRTR_MIN_EPH_SOCKET;
558                 rc = idr_alloc_u32(&qrtr_ports, ipc, &min_port, QRTR_MAX_EPH_SOCKET, GFP_ATOMIC);
559                 if (!rc)
560                         *port = min_port;
561         } else if (*port < QRTR_MIN_EPH_SOCKET && !capable(CAP_NET_ADMIN)) {
562                 rc = -EACCES;
563         } else if (*port == QRTR_PORT_CTRL) {
564                 min_port = 0;
565                 rc = idr_alloc_u32(&qrtr_ports, ipc, &min_port, 0, GFP_ATOMIC);
566         } else {
567                 min_port = *port;
568                 rc = idr_alloc_u32(&qrtr_ports, ipc, &min_port, *port, GFP_ATOMIC);
569                 if (!rc)
570                         *port = min_port;
571         }
572         mutex_unlock(&qrtr_port_lock);
573
574         if (rc == -ENOSPC)
575                 return -EADDRINUSE;
576         else if (rc < 0)
577                 return rc;
578
579         sock_hold(&ipc->sk);
580
581         return 0;
582 }
583
584 /* Reset all non-control ports */
585 static void qrtr_reset_ports(void)
586 {
587         struct qrtr_sock *ipc;
588         int id;
589
590         mutex_lock(&qrtr_port_lock);
591         idr_for_each_entry(&qrtr_ports, ipc, id) {
592                 /* Don't reset control port */
593                 if (id == 0)
594                         continue;
595
596                 sock_hold(&ipc->sk);
597                 ipc->sk.sk_err = ENETRESET;
598                 ipc->sk.sk_error_report(&ipc->sk);
599                 sock_put(&ipc->sk);
600         }
601         mutex_unlock(&qrtr_port_lock);
602 }
603
604 /* Bind socket to address.
605  *
606  * Socket should be locked upon call.
607  */
608 static int __qrtr_bind(struct socket *sock,
609                        const struct sockaddr_qrtr *addr, int zapped)
610 {
611         struct qrtr_sock *ipc = qrtr_sk(sock->sk);
612         struct sock *sk = sock->sk;
613         int port;
614         int rc;
615
616         /* rebinding ok */
617         if (!zapped && addr->sq_port == ipc->us.sq_port)
618                 return 0;
619
620         port = addr->sq_port;
621         rc = qrtr_port_assign(ipc, &port);
622         if (rc)
623                 return rc;
624
625         /* unbind previous, if any */
626         if (!zapped)
627                 qrtr_port_remove(ipc);
628         ipc->us.sq_port = port;
629
630         sock_reset_flag(sk, SOCK_ZAPPED);
631
632         /* Notify all open ports about the new controller */
633         if (port == QRTR_PORT_CTRL)
634                 qrtr_reset_ports();
635
636         return 0;
637 }
638
639 /* Auto bind to an ephemeral port. */
640 static int qrtr_autobind(struct socket *sock)
641 {
642         struct sock *sk = sock->sk;
643         struct sockaddr_qrtr addr;
644
645         if (!sock_flag(sk, SOCK_ZAPPED))
646                 return 0;
647
648         addr.sq_family = AF_QIPCRTR;
649         addr.sq_node = qrtr_local_nid;
650         addr.sq_port = 0;
651
652         return __qrtr_bind(sock, &addr, 1);
653 }
654
655 /* Bind socket to specified sockaddr. */
656 static int qrtr_bind(struct socket *sock, struct sockaddr *saddr, int len)
657 {
658         DECLARE_SOCKADDR(struct sockaddr_qrtr *, addr, saddr);
659         struct qrtr_sock *ipc = qrtr_sk(sock->sk);
660         struct sock *sk = sock->sk;
661         int rc;
662
663         if (len < sizeof(*addr) || addr->sq_family != AF_QIPCRTR)
664                 return -EINVAL;
665
666         if (addr->sq_node != ipc->us.sq_node)
667                 return -EINVAL;
668
669         lock_sock(sk);
670         rc = __qrtr_bind(sock, addr, sock_flag(sk, SOCK_ZAPPED));
671         release_sock(sk);
672
673         return rc;
674 }
675
676 /* Queue packet to local peer socket. */
677 static int qrtr_local_enqueue(struct qrtr_node *node, struct sk_buff *skb,
678                               int type, struct sockaddr_qrtr *from,
679                               struct sockaddr_qrtr *to)
680 {
681         struct qrtr_sock *ipc;
682         struct qrtr_cb *cb;
683
684         ipc = qrtr_port_lookup(to->sq_port);
685         if (!ipc || &ipc->sk == skb->sk) { /* do not send to self */
686                 kfree_skb(skb);
687                 return -ENODEV;
688         }
689
690         cb = (struct qrtr_cb *)skb->cb;
691         cb->src_node = from->sq_node;
692         cb->src_port = from->sq_port;
693
694         if (sock_queue_rcv_skb(&ipc->sk, skb)) {
695                 qrtr_port_put(ipc);
696                 kfree_skb(skb);
697                 return -ENOSPC;
698         }
699
700         qrtr_port_put(ipc);
701
702         return 0;
703 }
704
705 /* Queue packet for broadcast. */
706 static int qrtr_bcast_enqueue(struct qrtr_node *node, struct sk_buff *skb,
707                               int type, struct sockaddr_qrtr *from,
708                               struct sockaddr_qrtr *to)
709 {
710         struct sk_buff *skbn;
711
712         mutex_lock(&qrtr_node_lock);
713         list_for_each_entry(node, &qrtr_all_nodes, item) {
714                 skbn = skb_clone(skb, GFP_KERNEL);
715                 if (!skbn)
716                         break;
717                 skb_set_owner_w(skbn, skb->sk);
718                 qrtr_node_enqueue(node, skbn, type, from, to);
719         }
720         mutex_unlock(&qrtr_node_lock);
721
722         qrtr_local_enqueue(NULL, skb, type, from, to);
723
724         return 0;
725 }
726
727 static int qrtr_sendmsg(struct socket *sock, struct msghdr *msg, size_t len)
728 {
729         DECLARE_SOCKADDR(struct sockaddr_qrtr *, addr, msg->msg_name);
730         int (*enqueue_fn)(struct qrtr_node *, struct sk_buff *, int,
731                           struct sockaddr_qrtr *, struct sockaddr_qrtr *);
732         __le32 qrtr_type = cpu_to_le32(QRTR_TYPE_DATA);
733         struct qrtr_sock *ipc = qrtr_sk(sock->sk);
734         struct sock *sk = sock->sk;
735         struct qrtr_node *node;
736         struct sk_buff *skb;
737         size_t plen;
738         u32 type;
739         int rc;
740
741         if (msg->msg_flags & ~(MSG_DONTWAIT))
742                 return -EINVAL;
743
744         if (len > 65535)
745                 return -EMSGSIZE;
746
747         lock_sock(sk);
748
749         if (addr) {
750                 if (msg->msg_namelen < sizeof(*addr)) {
751                         release_sock(sk);
752                         return -EINVAL;
753                 }
754
755                 if (addr->sq_family != AF_QIPCRTR) {
756                         release_sock(sk);
757                         return -EINVAL;
758                 }
759
760                 rc = qrtr_autobind(sock);
761                 if (rc) {
762                         release_sock(sk);
763                         return rc;
764                 }
765         } else if (sk->sk_state == TCP_ESTABLISHED) {
766                 addr = &ipc->peer;
767         } else {
768                 release_sock(sk);
769                 return -ENOTCONN;
770         }
771
772         node = NULL;
773         if (addr->sq_node == QRTR_NODE_BCAST) {
774                 if (addr->sq_port != QRTR_PORT_CTRL &&
775                     qrtr_local_nid != QRTR_NODE_BCAST) {
776                         release_sock(sk);
777                         return -ENOTCONN;
778                 }
779                 enqueue_fn = qrtr_bcast_enqueue;
780         } else if (addr->sq_node == ipc->us.sq_node) {
781                 enqueue_fn = qrtr_local_enqueue;
782         } else {
783                 node = qrtr_node_lookup(addr->sq_node);
784                 if (!node) {
785                         release_sock(sk);
786                         return -ECONNRESET;
787                 }
788                 enqueue_fn = qrtr_node_enqueue;
789         }
790
791         plen = (len + 3) & ~3;
792         skb = sock_alloc_send_skb(sk, plen + QRTR_HDR_MAX_SIZE,
793                                   msg->msg_flags & MSG_DONTWAIT, &rc);
794         if (!skb) {
795                 rc = -ENOMEM;
796                 goto out_node;
797         }
798
799         skb_reserve(skb, QRTR_HDR_MAX_SIZE);
800
801         rc = memcpy_from_msg(skb_put(skb, len), msg, len);
802         if (rc) {
803                 kfree_skb(skb);
804                 goto out_node;
805         }
806
807         if (ipc->us.sq_port == QRTR_PORT_CTRL) {
808                 if (len < 4) {
809                         rc = -EINVAL;
810                         kfree_skb(skb);
811                         goto out_node;
812                 }
813
814                 /* control messages already require the type as 'command' */
815                 skb_copy_bits(skb, 0, &qrtr_type, 4);
816         }
817
818         type = le32_to_cpu(qrtr_type);
819         rc = enqueue_fn(node, skb, type, &ipc->us, addr);
820         if (rc >= 0)
821                 rc = len;
822
823 out_node:
824         qrtr_node_release(node);
825         release_sock(sk);
826
827         return rc;
828 }
829
830 static int qrtr_recvmsg(struct socket *sock, struct msghdr *msg,
831                         size_t size, int flags)
832 {
833         DECLARE_SOCKADDR(struct sockaddr_qrtr *, addr, msg->msg_name);
834         struct sock *sk = sock->sk;
835         struct sk_buff *skb;
836         struct qrtr_cb *cb;
837         int copied, rc;
838
839         lock_sock(sk);
840
841         if (sock_flag(sk, SOCK_ZAPPED)) {
842                 release_sock(sk);
843                 return -EADDRNOTAVAIL;
844         }
845
846         skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
847                                 flags & MSG_DONTWAIT, &rc);
848         if (!skb) {
849                 release_sock(sk);
850                 return rc;
851         }
852
853         copied = skb->len;
854         if (copied > size) {
855                 copied = size;
856                 msg->msg_flags |= MSG_TRUNC;
857         }
858
859         rc = skb_copy_datagram_msg(skb, 0, msg, copied);
860         if (rc < 0)
861                 goto out;
862         rc = copied;
863
864         if (addr) {
865                 /* There is an anonymous 2-byte hole after sq_family,
866                  * make sure to clear it.
867                  */
868                 memset(addr, 0, sizeof(*addr));
869
870                 cb = (struct qrtr_cb *)skb->cb;
871                 addr->sq_family = AF_QIPCRTR;
872                 addr->sq_node = cb->src_node;
873                 addr->sq_port = cb->src_port;
874                 msg->msg_namelen = sizeof(*addr);
875         }
876
877 out:
878         skb_free_datagram(sk, skb);
879         release_sock(sk);
880
881         return rc;
882 }
883
884 static int qrtr_connect(struct socket *sock, struct sockaddr *saddr,
885                         int len, int flags)
886 {
887         DECLARE_SOCKADDR(struct sockaddr_qrtr *, addr, saddr);
888         struct qrtr_sock *ipc = qrtr_sk(sock->sk);
889         struct sock *sk = sock->sk;
890         int rc;
891
892         if (len < sizeof(*addr) || addr->sq_family != AF_QIPCRTR)
893                 return -EINVAL;
894
895         lock_sock(sk);
896
897         sk->sk_state = TCP_CLOSE;
898         sock->state = SS_UNCONNECTED;
899
900         rc = qrtr_autobind(sock);
901         if (rc) {
902                 release_sock(sk);
903                 return rc;
904         }
905
906         ipc->peer = *addr;
907         sock->state = SS_CONNECTED;
908         sk->sk_state = TCP_ESTABLISHED;
909
910         release_sock(sk);
911
912         return 0;
913 }
914
915 static int qrtr_getname(struct socket *sock, struct sockaddr *saddr,
916                         int peer)
917 {
918         struct qrtr_sock *ipc = qrtr_sk(sock->sk);
919         struct sockaddr_qrtr qaddr;
920         struct sock *sk = sock->sk;
921
922         lock_sock(sk);
923         if (peer) {
924                 if (sk->sk_state != TCP_ESTABLISHED) {
925                         release_sock(sk);
926                         return -ENOTCONN;
927                 }
928
929                 qaddr = ipc->peer;
930         } else {
931                 qaddr = ipc->us;
932         }
933         release_sock(sk);
934
935         qaddr.sq_family = AF_QIPCRTR;
936
937         memcpy(saddr, &qaddr, sizeof(qaddr));
938
939         return sizeof(qaddr);
940 }
941
942 static int qrtr_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
943 {
944         void __user *argp = (void __user *)arg;
945         struct qrtr_sock *ipc = qrtr_sk(sock->sk);
946         struct sock *sk = sock->sk;
947         struct sockaddr_qrtr *sq;
948         struct sk_buff *skb;
949         struct ifreq ifr;
950         long len = 0;
951         int rc = 0;
952
953         lock_sock(sk);
954
955         switch (cmd) {
956         case TIOCOUTQ:
957                 len = sk->sk_sndbuf - sk_wmem_alloc_get(sk);
958                 if (len < 0)
959                         len = 0;
960                 rc = put_user(len, (int __user *)argp);
961                 break;
962         case TIOCINQ:
963                 skb = skb_peek(&sk->sk_receive_queue);
964                 if (skb)
965                         len = skb->len;
966                 rc = put_user(len, (int __user *)argp);
967                 break;
968         case SIOCGIFADDR:
969                 if (copy_from_user(&ifr, argp, sizeof(ifr))) {
970                         rc = -EFAULT;
971                         break;
972                 }
973
974                 sq = (struct sockaddr_qrtr *)&ifr.ifr_addr;
975                 *sq = ipc->us;
976                 if (copy_to_user(argp, &ifr, sizeof(ifr))) {
977                         rc = -EFAULT;
978                         break;
979                 }
980                 break;
981         case SIOCADDRT:
982         case SIOCDELRT:
983         case SIOCSIFADDR:
984         case SIOCGIFDSTADDR:
985         case SIOCSIFDSTADDR:
986         case SIOCGIFBRDADDR:
987         case SIOCSIFBRDADDR:
988         case SIOCGIFNETMASK:
989         case SIOCSIFNETMASK:
990                 rc = -EINVAL;
991                 break;
992         default:
993                 rc = -ENOIOCTLCMD;
994                 break;
995         }
996
997         release_sock(sk);
998
999         return rc;
1000 }
1001
1002 static int qrtr_release(struct socket *sock)
1003 {
1004         struct sock *sk = sock->sk;
1005         struct qrtr_sock *ipc;
1006
1007         if (!sk)
1008                 return 0;
1009
1010         lock_sock(sk);
1011
1012         ipc = qrtr_sk(sk);
1013         sk->sk_shutdown = SHUTDOWN_MASK;
1014         if (!sock_flag(sk, SOCK_DEAD))
1015                 sk->sk_state_change(sk);
1016
1017         sock_set_flag(sk, SOCK_DEAD);
1018         sock_orphan(sk);
1019         sock->sk = NULL;
1020
1021         if (!sock_flag(sk, SOCK_ZAPPED))
1022                 qrtr_port_remove(ipc);
1023
1024         skb_queue_purge(&sk->sk_receive_queue);
1025
1026         release_sock(sk);
1027         sock_put(sk);
1028
1029         return 0;
1030 }
1031
1032 static const struct proto_ops qrtr_proto_ops = {
1033         .owner          = THIS_MODULE,
1034         .family         = AF_QIPCRTR,
1035         .bind           = qrtr_bind,
1036         .connect        = qrtr_connect,
1037         .socketpair     = sock_no_socketpair,
1038         .accept         = sock_no_accept,
1039         .listen         = sock_no_listen,
1040         .sendmsg        = qrtr_sendmsg,
1041         .recvmsg        = qrtr_recvmsg,
1042         .getname        = qrtr_getname,
1043         .ioctl          = qrtr_ioctl,
1044         .gettstamp      = sock_gettstamp,
1045         .poll           = datagram_poll,
1046         .shutdown       = sock_no_shutdown,
1047         .setsockopt     = sock_no_setsockopt,
1048         .getsockopt     = sock_no_getsockopt,
1049         .release        = qrtr_release,
1050         .mmap           = sock_no_mmap,
1051         .sendpage       = sock_no_sendpage,
1052 };
1053
1054 static struct proto qrtr_proto = {
1055         .name           = "QIPCRTR",
1056         .owner          = THIS_MODULE,
1057         .obj_size       = sizeof(struct qrtr_sock),
1058 };
1059
1060 static int qrtr_create(struct net *net, struct socket *sock,
1061                        int protocol, int kern)
1062 {
1063         struct qrtr_sock *ipc;
1064         struct sock *sk;
1065
1066         if (sock->type != SOCK_DGRAM)
1067                 return -EPROTOTYPE;
1068
1069         sk = sk_alloc(net, AF_QIPCRTR, GFP_KERNEL, &qrtr_proto, kern);
1070         if (!sk)
1071                 return -ENOMEM;
1072
1073         sock_set_flag(sk, SOCK_ZAPPED);
1074
1075         sock_init_data(sock, sk);
1076         sock->ops = &qrtr_proto_ops;
1077
1078         ipc = qrtr_sk(sk);
1079         ipc->us.sq_family = AF_QIPCRTR;
1080         ipc->us.sq_node = qrtr_local_nid;
1081         ipc->us.sq_port = 0;
1082
1083         return 0;
1084 }
1085
1086 static const struct nla_policy qrtr_policy[IFA_MAX + 1] = {
1087         [IFA_LOCAL] = { .type = NLA_U32 },
1088 };
1089
1090 static int qrtr_addr_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
1091                           struct netlink_ext_ack *extack)
1092 {
1093         struct nlattr *tb[IFA_MAX + 1];
1094         struct ifaddrmsg *ifm;
1095         int rc;
1096
1097         if (!netlink_capable(skb, CAP_NET_ADMIN))
1098                 return -EPERM;
1099
1100         if (!netlink_capable(skb, CAP_SYS_ADMIN))
1101                 return -EPERM;
1102
1103         ASSERT_RTNL();
1104
1105         rc = nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFA_MAX,
1106                                     qrtr_policy, extack);
1107         if (rc < 0)
1108                 return rc;
1109
1110         ifm = nlmsg_data(nlh);
1111         if (!tb[IFA_LOCAL])
1112                 return -EINVAL;
1113
1114         qrtr_local_nid = nla_get_u32(tb[IFA_LOCAL]);
1115         return 0;
1116 }
1117
1118 static const struct net_proto_family qrtr_family = {
1119         .owner  = THIS_MODULE,
1120         .family = AF_QIPCRTR,
1121         .create = qrtr_create,
1122 };
1123
1124 static int __init qrtr_proto_init(void)
1125 {
1126         int rc;
1127
1128         rc = proto_register(&qrtr_proto, 1);
1129         if (rc)
1130                 return rc;
1131
1132         rc = sock_register(&qrtr_family);
1133         if (rc) {
1134                 proto_unregister(&qrtr_proto);
1135                 return rc;
1136         }
1137
1138         rc = rtnl_register_module(THIS_MODULE, PF_QIPCRTR, RTM_NEWADDR, qrtr_addr_doit, NULL, 0);
1139         if (rc) {
1140                 sock_unregister(qrtr_family.family);
1141                 proto_unregister(&qrtr_proto);
1142         }
1143
1144         return rc;
1145 }
1146 postcore_initcall(qrtr_proto_init);
1147
1148 static void __exit qrtr_proto_fini(void)
1149 {
1150         rtnl_unregister(PF_QIPCRTR, RTM_NEWADDR);
1151         sock_unregister(qrtr_family.family);
1152         proto_unregister(&qrtr_proto);
1153 }
1154 module_exit(qrtr_proto_fini);
1155
1156 MODULE_DESCRIPTION("Qualcomm IPC-router driver");
1157 MODULE_LICENSE("GPL v2");
1158 MODULE_ALIAS_NETPROTO(PF_QIPCRTR);