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