]> Pileus Git - ~andy/linux/blob - net/netlink/af_netlink.c
Merge branch 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelv...
[~andy/linux] / net / netlink / af_netlink.c
1 /*
2  * NETLINK      Kernel-user communication protocol.
3  *
4  *              Authors:        Alan Cox <alan@lxorguk.ukuu.org.uk>
5  *                              Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
6  *                              Patrick McHardy <kaber@trash.net>
7  *
8  *              This program is free software; you can redistribute it and/or
9  *              modify it under the terms of the GNU General Public License
10  *              as published by the Free Software Foundation; either version
11  *              2 of the License, or (at your option) any later version.
12  *
13  * Tue Jun 26 14:36:48 MEST 2001 Herbert "herp" Rosmanith
14  *                               added netlink_proto_exit
15  * Tue Jan 22 18:32:44 BRST 2002 Arnaldo C. de Melo <acme@conectiva.com.br>
16  *                               use nlk_sk, as sk->protinfo is on a diet 8)
17  * Fri Jul 22 19:51:12 MEST 2005 Harald Welte <laforge@gnumonks.org>
18  *                               - inc module use count of module that owns
19  *                                 the kernel socket in case userspace opens
20  *                                 socket of same protocol
21  *                               - remove all module support, since netlink is
22  *                                 mandatory if CONFIG_NET=y these days
23  */
24
25 #include <linux/module.h>
26
27 #include <linux/capability.h>
28 #include <linux/kernel.h>
29 #include <linux/init.h>
30 #include <linux/signal.h>
31 #include <linux/sched.h>
32 #include <linux/errno.h>
33 #include <linux/string.h>
34 #include <linux/stat.h>
35 #include <linux/socket.h>
36 #include <linux/un.h>
37 #include <linux/fcntl.h>
38 #include <linux/termios.h>
39 #include <linux/sockios.h>
40 #include <linux/net.h>
41 #include <linux/fs.h>
42 #include <linux/slab.h>
43 #include <asm/uaccess.h>
44 #include <linux/skbuff.h>
45 #include <linux/netdevice.h>
46 #include <linux/rtnetlink.h>
47 #include <linux/proc_fs.h>
48 #include <linux/seq_file.h>
49 #include <linux/notifier.h>
50 #include <linux/security.h>
51 #include <linux/jhash.h>
52 #include <linux/jiffies.h>
53 #include <linux/random.h>
54 #include <linux/bitops.h>
55 #include <linux/mm.h>
56 #include <linux/types.h>
57 #include <linux/audit.h>
58 #include <linux/mutex.h>
59 #include <linux/vmalloc.h>
60 #include <linux/if_arp.h>
61 #include <asm/cacheflush.h>
62
63 #include <net/net_namespace.h>
64 #include <net/sock.h>
65 #include <net/scm.h>
66 #include <net/netlink.h>
67
68 #include "af_netlink.h"
69
70 struct listeners {
71         struct rcu_head         rcu;
72         unsigned long           masks[0];
73 };
74
75 /* state bits */
76 #define NETLINK_CONGESTED       0x0
77
78 /* flags */
79 #define NETLINK_KERNEL_SOCKET   0x1
80 #define NETLINK_RECV_PKTINFO    0x2
81 #define NETLINK_BROADCAST_SEND_ERROR    0x4
82 #define NETLINK_RECV_NO_ENOBUFS 0x8
83
84 static inline int netlink_is_kernel(struct sock *sk)
85 {
86         return nlk_sk(sk)->flags & NETLINK_KERNEL_SOCKET;
87 }
88
89 struct netlink_table *nl_table;
90 EXPORT_SYMBOL_GPL(nl_table);
91
92 static DECLARE_WAIT_QUEUE_HEAD(nl_table_wait);
93
94 static int netlink_dump(struct sock *sk);
95 static void netlink_skb_destructor(struct sk_buff *skb);
96
97 DEFINE_RWLOCK(nl_table_lock);
98 EXPORT_SYMBOL_GPL(nl_table_lock);
99 static atomic_t nl_table_users = ATOMIC_INIT(0);
100
101 #define nl_deref_protected(X) rcu_dereference_protected(X, lockdep_is_held(&nl_table_lock));
102
103 static ATOMIC_NOTIFIER_HEAD(netlink_chain);
104
105 static DEFINE_SPINLOCK(netlink_tap_lock);
106 static struct list_head netlink_tap_all __read_mostly;
107
108 static inline u32 netlink_group_mask(u32 group)
109 {
110         return group ? 1 << (group - 1) : 0;
111 }
112
113 static inline struct hlist_head *nl_portid_hashfn(struct nl_portid_hash *hash, u32 portid)
114 {
115         return &hash->table[jhash_1word(portid, hash->rnd) & hash->mask];
116 }
117
118 int netlink_add_tap(struct netlink_tap *nt)
119 {
120         if (unlikely(nt->dev->type != ARPHRD_NETLINK))
121                 return -EINVAL;
122
123         spin_lock(&netlink_tap_lock);
124         list_add_rcu(&nt->list, &netlink_tap_all);
125         spin_unlock(&netlink_tap_lock);
126
127         if (nt->module)
128                 __module_get(nt->module);
129
130         return 0;
131 }
132 EXPORT_SYMBOL_GPL(netlink_add_tap);
133
134 int __netlink_remove_tap(struct netlink_tap *nt)
135 {
136         bool found = false;
137         struct netlink_tap *tmp;
138
139         spin_lock(&netlink_tap_lock);
140
141         list_for_each_entry(tmp, &netlink_tap_all, list) {
142                 if (nt == tmp) {
143                         list_del_rcu(&nt->list);
144                         found = true;
145                         goto out;
146                 }
147         }
148
149         pr_warn("__netlink_remove_tap: %p not found\n", nt);
150 out:
151         spin_unlock(&netlink_tap_lock);
152
153         if (found && nt->module)
154                 module_put(nt->module);
155
156         return found ? 0 : -ENODEV;
157 }
158 EXPORT_SYMBOL_GPL(__netlink_remove_tap);
159
160 int netlink_remove_tap(struct netlink_tap *nt)
161 {
162         int ret;
163
164         ret = __netlink_remove_tap(nt);
165         synchronize_net();
166
167         return ret;
168 }
169 EXPORT_SYMBOL_GPL(netlink_remove_tap);
170
171 static int __netlink_deliver_tap_skb(struct sk_buff *skb,
172                                      struct net_device *dev)
173 {
174         struct sk_buff *nskb;
175         int ret = -ENOMEM;
176
177         dev_hold(dev);
178         nskb = skb_clone(skb, GFP_ATOMIC);
179         if (nskb) {
180                 nskb->dev = dev;
181                 ret = dev_queue_xmit(nskb);
182                 if (unlikely(ret > 0))
183                         ret = net_xmit_errno(ret);
184         }
185
186         dev_put(dev);
187         return ret;
188 }
189
190 static void __netlink_deliver_tap(struct sk_buff *skb)
191 {
192         int ret;
193         struct netlink_tap *tmp;
194
195         list_for_each_entry_rcu(tmp, &netlink_tap_all, list) {
196                 ret = __netlink_deliver_tap_skb(skb, tmp->dev);
197                 if (unlikely(ret))
198                         break;
199         }
200 }
201
202 static void netlink_deliver_tap(struct sk_buff *skb)
203 {
204         rcu_read_lock();
205
206         if (unlikely(!list_empty(&netlink_tap_all)))
207                 __netlink_deliver_tap(skb);
208
209         rcu_read_unlock();
210 }
211
212 static void netlink_overrun(struct sock *sk)
213 {
214         struct netlink_sock *nlk = nlk_sk(sk);
215
216         if (!(nlk->flags & NETLINK_RECV_NO_ENOBUFS)) {
217                 if (!test_and_set_bit(NETLINK_CONGESTED, &nlk_sk(sk)->state)) {
218                         sk->sk_err = ENOBUFS;
219                         sk->sk_error_report(sk);
220                 }
221         }
222         atomic_inc(&sk->sk_drops);
223 }
224
225 static void netlink_rcv_wake(struct sock *sk)
226 {
227         struct netlink_sock *nlk = nlk_sk(sk);
228
229         if (skb_queue_empty(&sk->sk_receive_queue))
230                 clear_bit(NETLINK_CONGESTED, &nlk->state);
231         if (!test_bit(NETLINK_CONGESTED, &nlk->state))
232                 wake_up_interruptible(&nlk->wait);
233 }
234
235 #ifdef CONFIG_NETLINK_MMAP
236 static bool netlink_skb_is_mmaped(const struct sk_buff *skb)
237 {
238         return NETLINK_CB(skb).flags & NETLINK_SKB_MMAPED;
239 }
240
241 static bool netlink_rx_is_mmaped(struct sock *sk)
242 {
243         return nlk_sk(sk)->rx_ring.pg_vec != NULL;
244 }
245
246 static bool netlink_tx_is_mmaped(struct sock *sk)
247 {
248         return nlk_sk(sk)->tx_ring.pg_vec != NULL;
249 }
250
251 static __pure struct page *pgvec_to_page(const void *addr)
252 {
253         if (is_vmalloc_addr(addr))
254                 return vmalloc_to_page(addr);
255         else
256                 return virt_to_page(addr);
257 }
258
259 static void free_pg_vec(void **pg_vec, unsigned int order, unsigned int len)
260 {
261         unsigned int i;
262
263         for (i = 0; i < len; i++) {
264                 if (pg_vec[i] != NULL) {
265                         if (is_vmalloc_addr(pg_vec[i]))
266                                 vfree(pg_vec[i]);
267                         else
268                                 free_pages((unsigned long)pg_vec[i], order);
269                 }
270         }
271         kfree(pg_vec);
272 }
273
274 static void *alloc_one_pg_vec_page(unsigned long order)
275 {
276         void *buffer;
277         gfp_t gfp_flags = GFP_KERNEL | __GFP_COMP | __GFP_ZERO |
278                           __GFP_NOWARN | __GFP_NORETRY;
279
280         buffer = (void *)__get_free_pages(gfp_flags, order);
281         if (buffer != NULL)
282                 return buffer;
283
284         buffer = vzalloc((1 << order) * PAGE_SIZE);
285         if (buffer != NULL)
286                 return buffer;
287
288         gfp_flags &= ~__GFP_NORETRY;
289         return (void *)__get_free_pages(gfp_flags, order);
290 }
291
292 static void **alloc_pg_vec(struct netlink_sock *nlk,
293                            struct nl_mmap_req *req, unsigned int order)
294 {
295         unsigned int block_nr = req->nm_block_nr;
296         unsigned int i;
297         void **pg_vec;
298
299         pg_vec = kcalloc(block_nr, sizeof(void *), GFP_KERNEL);
300         if (pg_vec == NULL)
301                 return NULL;
302
303         for (i = 0; i < block_nr; i++) {
304                 pg_vec[i] = alloc_one_pg_vec_page(order);
305                 if (pg_vec[i] == NULL)
306                         goto err1;
307         }
308
309         return pg_vec;
310 err1:
311         free_pg_vec(pg_vec, order, block_nr);
312         return NULL;
313 }
314
315 static int netlink_set_ring(struct sock *sk, struct nl_mmap_req *req,
316                             bool closing, bool tx_ring)
317 {
318         struct netlink_sock *nlk = nlk_sk(sk);
319         struct netlink_ring *ring;
320         struct sk_buff_head *queue;
321         void **pg_vec = NULL;
322         unsigned int order = 0;
323         int err;
324
325         ring  = tx_ring ? &nlk->tx_ring : &nlk->rx_ring;
326         queue = tx_ring ? &sk->sk_write_queue : &sk->sk_receive_queue;
327
328         if (!closing) {
329                 if (atomic_read(&nlk->mapped))
330                         return -EBUSY;
331                 if (atomic_read(&ring->pending))
332                         return -EBUSY;
333         }
334
335         if (req->nm_block_nr) {
336                 if (ring->pg_vec != NULL)
337                         return -EBUSY;
338
339                 if ((int)req->nm_block_size <= 0)
340                         return -EINVAL;
341                 if (!IS_ALIGNED(req->nm_block_size, PAGE_SIZE))
342                         return -EINVAL;
343                 if (req->nm_frame_size < NL_MMAP_HDRLEN)
344                         return -EINVAL;
345                 if (!IS_ALIGNED(req->nm_frame_size, NL_MMAP_MSG_ALIGNMENT))
346                         return -EINVAL;
347
348                 ring->frames_per_block = req->nm_block_size /
349                                          req->nm_frame_size;
350                 if (ring->frames_per_block == 0)
351                         return -EINVAL;
352                 if (ring->frames_per_block * req->nm_block_nr !=
353                     req->nm_frame_nr)
354                         return -EINVAL;
355
356                 order = get_order(req->nm_block_size);
357                 pg_vec = alloc_pg_vec(nlk, req, order);
358                 if (pg_vec == NULL)
359                         return -ENOMEM;
360         } else {
361                 if (req->nm_frame_nr)
362                         return -EINVAL;
363         }
364
365         err = -EBUSY;
366         mutex_lock(&nlk->pg_vec_lock);
367         if (closing || atomic_read(&nlk->mapped) == 0) {
368                 err = 0;
369                 spin_lock_bh(&queue->lock);
370
371                 ring->frame_max         = req->nm_frame_nr - 1;
372                 ring->head              = 0;
373                 ring->frame_size        = req->nm_frame_size;
374                 ring->pg_vec_pages      = req->nm_block_size / PAGE_SIZE;
375
376                 swap(ring->pg_vec_len, req->nm_block_nr);
377                 swap(ring->pg_vec_order, order);
378                 swap(ring->pg_vec, pg_vec);
379
380                 __skb_queue_purge(queue);
381                 spin_unlock_bh(&queue->lock);
382
383                 WARN_ON(atomic_read(&nlk->mapped));
384         }
385         mutex_unlock(&nlk->pg_vec_lock);
386
387         if (pg_vec)
388                 free_pg_vec(pg_vec, order, req->nm_block_nr);
389         return err;
390 }
391
392 static void netlink_mm_open(struct vm_area_struct *vma)
393 {
394         struct file *file = vma->vm_file;
395         struct socket *sock = file->private_data;
396         struct sock *sk = sock->sk;
397
398         if (sk)
399                 atomic_inc(&nlk_sk(sk)->mapped);
400 }
401
402 static void netlink_mm_close(struct vm_area_struct *vma)
403 {
404         struct file *file = vma->vm_file;
405         struct socket *sock = file->private_data;
406         struct sock *sk = sock->sk;
407
408         if (sk)
409                 atomic_dec(&nlk_sk(sk)->mapped);
410 }
411
412 static const struct vm_operations_struct netlink_mmap_ops = {
413         .open   = netlink_mm_open,
414         .close  = netlink_mm_close,
415 };
416
417 static int netlink_mmap(struct file *file, struct socket *sock,
418                         struct vm_area_struct *vma)
419 {
420         struct sock *sk = sock->sk;
421         struct netlink_sock *nlk = nlk_sk(sk);
422         struct netlink_ring *ring;
423         unsigned long start, size, expected;
424         unsigned int i;
425         int err = -EINVAL;
426
427         if (vma->vm_pgoff)
428                 return -EINVAL;
429
430         mutex_lock(&nlk->pg_vec_lock);
431
432         expected = 0;
433         for (ring = &nlk->rx_ring; ring <= &nlk->tx_ring; ring++) {
434                 if (ring->pg_vec == NULL)
435                         continue;
436                 expected += ring->pg_vec_len * ring->pg_vec_pages * PAGE_SIZE;
437         }
438
439         if (expected == 0)
440                 goto out;
441
442         size = vma->vm_end - vma->vm_start;
443         if (size != expected)
444                 goto out;
445
446         start = vma->vm_start;
447         for (ring = &nlk->rx_ring; ring <= &nlk->tx_ring; ring++) {
448                 if (ring->pg_vec == NULL)
449                         continue;
450
451                 for (i = 0; i < ring->pg_vec_len; i++) {
452                         struct page *page;
453                         void *kaddr = ring->pg_vec[i];
454                         unsigned int pg_num;
455
456                         for (pg_num = 0; pg_num < ring->pg_vec_pages; pg_num++) {
457                                 page = pgvec_to_page(kaddr);
458                                 err = vm_insert_page(vma, start, page);
459                                 if (err < 0)
460                                         goto out;
461                                 start += PAGE_SIZE;
462                                 kaddr += PAGE_SIZE;
463                         }
464                 }
465         }
466
467         atomic_inc(&nlk->mapped);
468         vma->vm_ops = &netlink_mmap_ops;
469         err = 0;
470 out:
471         mutex_unlock(&nlk->pg_vec_lock);
472         return err;
473 }
474
475 static void netlink_frame_flush_dcache(const struct nl_mmap_hdr *hdr)
476 {
477 #if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE == 1
478         struct page *p_start, *p_end;
479
480         /* First page is flushed through netlink_{get,set}_status */
481         p_start = pgvec_to_page(hdr + PAGE_SIZE);
482         p_end   = pgvec_to_page((void *)hdr + NL_MMAP_HDRLEN + hdr->nm_len - 1);
483         while (p_start <= p_end) {
484                 flush_dcache_page(p_start);
485                 p_start++;
486         }
487 #endif
488 }
489
490 static enum nl_mmap_status netlink_get_status(const struct nl_mmap_hdr *hdr)
491 {
492         smp_rmb();
493         flush_dcache_page(pgvec_to_page(hdr));
494         return hdr->nm_status;
495 }
496
497 static void netlink_set_status(struct nl_mmap_hdr *hdr,
498                                enum nl_mmap_status status)
499 {
500         hdr->nm_status = status;
501         flush_dcache_page(pgvec_to_page(hdr));
502         smp_wmb();
503 }
504
505 static struct nl_mmap_hdr *
506 __netlink_lookup_frame(const struct netlink_ring *ring, unsigned int pos)
507 {
508         unsigned int pg_vec_pos, frame_off;
509
510         pg_vec_pos = pos / ring->frames_per_block;
511         frame_off  = pos % ring->frames_per_block;
512
513         return ring->pg_vec[pg_vec_pos] + (frame_off * ring->frame_size);
514 }
515
516 static struct nl_mmap_hdr *
517 netlink_lookup_frame(const struct netlink_ring *ring, unsigned int pos,
518                      enum nl_mmap_status status)
519 {
520         struct nl_mmap_hdr *hdr;
521
522         hdr = __netlink_lookup_frame(ring, pos);
523         if (netlink_get_status(hdr) != status)
524                 return NULL;
525
526         return hdr;
527 }
528
529 static struct nl_mmap_hdr *
530 netlink_current_frame(const struct netlink_ring *ring,
531                       enum nl_mmap_status status)
532 {
533         return netlink_lookup_frame(ring, ring->head, status);
534 }
535
536 static struct nl_mmap_hdr *
537 netlink_previous_frame(const struct netlink_ring *ring,
538                        enum nl_mmap_status status)
539 {
540         unsigned int prev;
541
542         prev = ring->head ? ring->head - 1 : ring->frame_max;
543         return netlink_lookup_frame(ring, prev, status);
544 }
545
546 static void netlink_increment_head(struct netlink_ring *ring)
547 {
548         ring->head = ring->head != ring->frame_max ? ring->head + 1 : 0;
549 }
550
551 static void netlink_forward_ring(struct netlink_ring *ring)
552 {
553         unsigned int head = ring->head, pos = head;
554         const struct nl_mmap_hdr *hdr;
555
556         do {
557                 hdr = __netlink_lookup_frame(ring, pos);
558                 if (hdr->nm_status == NL_MMAP_STATUS_UNUSED)
559                         break;
560                 if (hdr->nm_status != NL_MMAP_STATUS_SKIP)
561                         break;
562                 netlink_increment_head(ring);
563         } while (ring->head != head);
564 }
565
566 static bool netlink_dump_space(struct netlink_sock *nlk)
567 {
568         struct netlink_ring *ring = &nlk->rx_ring;
569         struct nl_mmap_hdr *hdr;
570         unsigned int n;
571
572         hdr = netlink_current_frame(ring, NL_MMAP_STATUS_UNUSED);
573         if (hdr == NULL)
574                 return false;
575
576         n = ring->head + ring->frame_max / 2;
577         if (n > ring->frame_max)
578                 n -= ring->frame_max;
579
580         hdr = __netlink_lookup_frame(ring, n);
581
582         return hdr->nm_status == NL_MMAP_STATUS_UNUSED;
583 }
584
585 static unsigned int netlink_poll(struct file *file, struct socket *sock,
586                                  poll_table *wait)
587 {
588         struct sock *sk = sock->sk;
589         struct netlink_sock *nlk = nlk_sk(sk);
590         unsigned int mask;
591         int err;
592
593         if (nlk->rx_ring.pg_vec != NULL) {
594                 /* Memory mapped sockets don't call recvmsg(), so flow control
595                  * for dumps is performed here. A dump is allowed to continue
596                  * if at least half the ring is unused.
597                  */
598                 while (nlk->cb_running && netlink_dump_space(nlk)) {
599                         err = netlink_dump(sk);
600                         if (err < 0) {
601                                 sk->sk_err = err;
602                                 sk->sk_error_report(sk);
603                                 break;
604                         }
605                 }
606                 netlink_rcv_wake(sk);
607         }
608
609         mask = datagram_poll(file, sock, wait);
610
611         spin_lock_bh(&sk->sk_receive_queue.lock);
612         if (nlk->rx_ring.pg_vec) {
613                 netlink_forward_ring(&nlk->rx_ring);
614                 if (!netlink_previous_frame(&nlk->rx_ring, NL_MMAP_STATUS_UNUSED))
615                         mask |= POLLIN | POLLRDNORM;
616         }
617         spin_unlock_bh(&sk->sk_receive_queue.lock);
618
619         spin_lock_bh(&sk->sk_write_queue.lock);
620         if (nlk->tx_ring.pg_vec) {
621                 if (netlink_current_frame(&nlk->tx_ring, NL_MMAP_STATUS_UNUSED))
622                         mask |= POLLOUT | POLLWRNORM;
623         }
624         spin_unlock_bh(&sk->sk_write_queue.lock);
625
626         return mask;
627 }
628
629 static struct nl_mmap_hdr *netlink_mmap_hdr(struct sk_buff *skb)
630 {
631         return (struct nl_mmap_hdr *)(skb->head - NL_MMAP_HDRLEN);
632 }
633
634 static void netlink_ring_setup_skb(struct sk_buff *skb, struct sock *sk,
635                                    struct netlink_ring *ring,
636                                    struct nl_mmap_hdr *hdr)
637 {
638         unsigned int size;
639         void *data;
640
641         size = ring->frame_size - NL_MMAP_HDRLEN;
642         data = (void *)hdr + NL_MMAP_HDRLEN;
643
644         skb->head       = data;
645         skb->data       = data;
646         skb_reset_tail_pointer(skb);
647         skb->end        = skb->tail + size;
648         skb->len        = 0;
649
650         skb->destructor = netlink_skb_destructor;
651         NETLINK_CB(skb).flags |= NETLINK_SKB_MMAPED;
652         NETLINK_CB(skb).sk = sk;
653 }
654
655 static int netlink_mmap_sendmsg(struct sock *sk, struct msghdr *msg,
656                                 u32 dst_portid, u32 dst_group,
657                                 struct sock_iocb *siocb)
658 {
659         struct netlink_sock *nlk = nlk_sk(sk);
660         struct netlink_ring *ring;
661         struct nl_mmap_hdr *hdr;
662         struct sk_buff *skb;
663         unsigned int maxlen;
664         bool excl = true;
665         int err = 0, len = 0;
666
667         /* Netlink messages are validated by the receiver before processing.
668          * In order to avoid userspace changing the contents of the message
669          * after validation, the socket and the ring may only be used by a
670          * single process, otherwise we fall back to copying.
671          */
672         if (atomic_long_read(&sk->sk_socket->file->f_count) > 2 ||
673             atomic_read(&nlk->mapped) > 1)
674                 excl = false;
675
676         mutex_lock(&nlk->pg_vec_lock);
677
678         ring   = &nlk->tx_ring;
679         maxlen = ring->frame_size - NL_MMAP_HDRLEN;
680
681         do {
682                 hdr = netlink_current_frame(ring, NL_MMAP_STATUS_VALID);
683                 if (hdr == NULL) {
684                         if (!(msg->msg_flags & MSG_DONTWAIT) &&
685                             atomic_read(&nlk->tx_ring.pending))
686                                 schedule();
687                         continue;
688                 }
689                 if (hdr->nm_len > maxlen) {
690                         err = -EINVAL;
691                         goto out;
692                 }
693
694                 netlink_frame_flush_dcache(hdr);
695
696                 if (likely(dst_portid == 0 && dst_group == 0 && excl)) {
697                         skb = alloc_skb_head(GFP_KERNEL);
698                         if (skb == NULL) {
699                                 err = -ENOBUFS;
700                                 goto out;
701                         }
702                         sock_hold(sk);
703                         netlink_ring_setup_skb(skb, sk, ring, hdr);
704                         NETLINK_CB(skb).flags |= NETLINK_SKB_TX;
705                         __skb_put(skb, hdr->nm_len);
706                         netlink_set_status(hdr, NL_MMAP_STATUS_RESERVED);
707                         atomic_inc(&ring->pending);
708                 } else {
709                         skb = alloc_skb(hdr->nm_len, GFP_KERNEL);
710                         if (skb == NULL) {
711                                 err = -ENOBUFS;
712                                 goto out;
713                         }
714                         __skb_put(skb, hdr->nm_len);
715                         memcpy(skb->data, (void *)hdr + NL_MMAP_HDRLEN, hdr->nm_len);
716                         netlink_set_status(hdr, NL_MMAP_STATUS_UNUSED);
717                 }
718
719                 netlink_increment_head(ring);
720
721                 NETLINK_CB(skb).portid    = nlk->portid;
722                 NETLINK_CB(skb).dst_group = dst_group;
723                 NETLINK_CB(skb).creds     = siocb->scm->creds;
724
725                 err = security_netlink_send(sk, skb);
726                 if (err) {
727                         kfree_skb(skb);
728                         goto out;
729                 }
730
731                 if (unlikely(dst_group)) {
732                         atomic_inc(&skb->users);
733                         netlink_broadcast(sk, skb, dst_portid, dst_group,
734                                           GFP_KERNEL);
735                 }
736                 err = netlink_unicast(sk, skb, dst_portid,
737                                       msg->msg_flags & MSG_DONTWAIT);
738                 if (err < 0)
739                         goto out;
740                 len += err;
741
742         } while (hdr != NULL ||
743                  (!(msg->msg_flags & MSG_DONTWAIT) &&
744                   atomic_read(&nlk->tx_ring.pending)));
745
746         if (len > 0)
747                 err = len;
748 out:
749         mutex_unlock(&nlk->pg_vec_lock);
750         return err;
751 }
752
753 static void netlink_queue_mmaped_skb(struct sock *sk, struct sk_buff *skb)
754 {
755         struct nl_mmap_hdr *hdr;
756
757         hdr = netlink_mmap_hdr(skb);
758         hdr->nm_len     = skb->len;
759         hdr->nm_group   = NETLINK_CB(skb).dst_group;
760         hdr->nm_pid     = NETLINK_CB(skb).creds.pid;
761         hdr->nm_uid     = from_kuid(sk_user_ns(sk), NETLINK_CB(skb).creds.uid);
762         hdr->nm_gid     = from_kgid(sk_user_ns(sk), NETLINK_CB(skb).creds.gid);
763         netlink_frame_flush_dcache(hdr);
764         netlink_set_status(hdr, NL_MMAP_STATUS_VALID);
765
766         NETLINK_CB(skb).flags |= NETLINK_SKB_DELIVERED;
767         kfree_skb(skb);
768 }
769
770 static void netlink_ring_set_copied(struct sock *sk, struct sk_buff *skb)
771 {
772         struct netlink_sock *nlk = nlk_sk(sk);
773         struct netlink_ring *ring = &nlk->rx_ring;
774         struct nl_mmap_hdr *hdr;
775
776         spin_lock_bh(&sk->sk_receive_queue.lock);
777         hdr = netlink_current_frame(ring, NL_MMAP_STATUS_UNUSED);
778         if (hdr == NULL) {
779                 spin_unlock_bh(&sk->sk_receive_queue.lock);
780                 kfree_skb(skb);
781                 netlink_overrun(sk);
782                 return;
783         }
784         netlink_increment_head(ring);
785         __skb_queue_tail(&sk->sk_receive_queue, skb);
786         spin_unlock_bh(&sk->sk_receive_queue.lock);
787
788         hdr->nm_len     = skb->len;
789         hdr->nm_group   = NETLINK_CB(skb).dst_group;
790         hdr->nm_pid     = NETLINK_CB(skb).creds.pid;
791         hdr->nm_uid     = from_kuid(sk_user_ns(sk), NETLINK_CB(skb).creds.uid);
792         hdr->nm_gid     = from_kgid(sk_user_ns(sk), NETLINK_CB(skb).creds.gid);
793         netlink_set_status(hdr, NL_MMAP_STATUS_COPY);
794 }
795
796 #else /* CONFIG_NETLINK_MMAP */
797 #define netlink_skb_is_mmaped(skb)      false
798 #define netlink_rx_is_mmaped(sk)        false
799 #define netlink_tx_is_mmaped(sk)        false
800 #define netlink_mmap                    sock_no_mmap
801 #define netlink_poll                    datagram_poll
802 #define netlink_mmap_sendmsg(sk, msg, dst_portid, dst_group, siocb)     0
803 #endif /* CONFIG_NETLINK_MMAP */
804
805 static void netlink_skb_destructor(struct sk_buff *skb)
806 {
807 #ifdef CONFIG_NETLINK_MMAP
808         struct nl_mmap_hdr *hdr;
809         struct netlink_ring *ring;
810         struct sock *sk;
811
812         /* If a packet from the kernel to userspace was freed because of an
813          * error without being delivered to userspace, the kernel must reset
814          * the status. In the direction userspace to kernel, the status is
815          * always reset here after the packet was processed and freed.
816          */
817         if (netlink_skb_is_mmaped(skb)) {
818                 hdr = netlink_mmap_hdr(skb);
819                 sk = NETLINK_CB(skb).sk;
820
821                 if (NETLINK_CB(skb).flags & NETLINK_SKB_TX) {
822                         netlink_set_status(hdr, NL_MMAP_STATUS_UNUSED);
823                         ring = &nlk_sk(sk)->tx_ring;
824                 } else {
825                         if (!(NETLINK_CB(skb).flags & NETLINK_SKB_DELIVERED)) {
826                                 hdr->nm_len = 0;
827                                 netlink_set_status(hdr, NL_MMAP_STATUS_VALID);
828                         }
829                         ring = &nlk_sk(sk)->rx_ring;
830                 }
831
832                 WARN_ON(atomic_read(&ring->pending) == 0);
833                 atomic_dec(&ring->pending);
834                 sock_put(sk);
835
836                 skb->head = NULL;
837         }
838 #endif
839         if (is_vmalloc_addr(skb->head)) {
840                 if (!skb->cloned ||
841                     !atomic_dec_return(&(skb_shinfo(skb)->dataref)))
842                         vfree(skb->head);
843
844                 skb->head = NULL;
845         }
846         if (skb->sk != NULL)
847                 sock_rfree(skb);
848 }
849
850 static void netlink_skb_set_owner_r(struct sk_buff *skb, struct sock *sk)
851 {
852         WARN_ON(skb->sk != NULL);
853         skb->sk = sk;
854         skb->destructor = netlink_skb_destructor;
855         atomic_add(skb->truesize, &sk->sk_rmem_alloc);
856         sk_mem_charge(sk, skb->truesize);
857 }
858
859 static void netlink_sock_destruct(struct sock *sk)
860 {
861         struct netlink_sock *nlk = nlk_sk(sk);
862
863         if (nlk->cb_running) {
864                 if (nlk->cb.done)
865                         nlk->cb.done(&nlk->cb);
866
867                 module_put(nlk->cb.module);
868                 kfree_skb(nlk->cb.skb);
869         }
870
871         skb_queue_purge(&sk->sk_receive_queue);
872 #ifdef CONFIG_NETLINK_MMAP
873         if (1) {
874                 struct nl_mmap_req req;
875
876                 memset(&req, 0, sizeof(req));
877                 if (nlk->rx_ring.pg_vec)
878                         netlink_set_ring(sk, &req, true, false);
879                 memset(&req, 0, sizeof(req));
880                 if (nlk->tx_ring.pg_vec)
881                         netlink_set_ring(sk, &req, true, true);
882         }
883 #endif /* CONFIG_NETLINK_MMAP */
884
885         if (!sock_flag(sk, SOCK_DEAD)) {
886                 printk(KERN_ERR "Freeing alive netlink socket %p\n", sk);
887                 return;
888         }
889
890         WARN_ON(atomic_read(&sk->sk_rmem_alloc));
891         WARN_ON(atomic_read(&sk->sk_wmem_alloc));
892         WARN_ON(nlk_sk(sk)->groups);
893 }
894
895 /* This lock without WQ_FLAG_EXCLUSIVE is good on UP and it is _very_ bad on
896  * SMP. Look, when several writers sleep and reader wakes them up, all but one
897  * immediately hit write lock and grab all the cpus. Exclusive sleep solves
898  * this, _but_ remember, it adds useless work on UP machines.
899  */
900
901 void netlink_table_grab(void)
902         __acquires(nl_table_lock)
903 {
904         might_sleep();
905
906         write_lock_irq(&nl_table_lock);
907
908         if (atomic_read(&nl_table_users)) {
909                 DECLARE_WAITQUEUE(wait, current);
910
911                 add_wait_queue_exclusive(&nl_table_wait, &wait);
912                 for (;;) {
913                         set_current_state(TASK_UNINTERRUPTIBLE);
914                         if (atomic_read(&nl_table_users) == 0)
915                                 break;
916                         write_unlock_irq(&nl_table_lock);
917                         schedule();
918                         write_lock_irq(&nl_table_lock);
919                 }
920
921                 __set_current_state(TASK_RUNNING);
922                 remove_wait_queue(&nl_table_wait, &wait);
923         }
924 }
925
926 void netlink_table_ungrab(void)
927         __releases(nl_table_lock)
928 {
929         write_unlock_irq(&nl_table_lock);
930         wake_up(&nl_table_wait);
931 }
932
933 static inline void
934 netlink_lock_table(void)
935 {
936         /* read_lock() synchronizes us to netlink_table_grab */
937
938         read_lock(&nl_table_lock);
939         atomic_inc(&nl_table_users);
940         read_unlock(&nl_table_lock);
941 }
942
943 static inline void
944 netlink_unlock_table(void)
945 {
946         if (atomic_dec_and_test(&nl_table_users))
947                 wake_up(&nl_table_wait);
948 }
949
950 static bool netlink_compare(struct net *net, struct sock *sk)
951 {
952         return net_eq(sock_net(sk), net);
953 }
954
955 static struct sock *netlink_lookup(struct net *net, int protocol, u32 portid)
956 {
957         struct netlink_table *table = &nl_table[protocol];
958         struct nl_portid_hash *hash = &table->hash;
959         struct hlist_head *head;
960         struct sock *sk;
961
962         read_lock(&nl_table_lock);
963         head = nl_portid_hashfn(hash, portid);
964         sk_for_each(sk, head) {
965                 if (table->compare(net, sk) &&
966                     (nlk_sk(sk)->portid == portid)) {
967                         sock_hold(sk);
968                         goto found;
969                 }
970         }
971         sk = NULL;
972 found:
973         read_unlock(&nl_table_lock);
974         return sk;
975 }
976
977 static struct hlist_head *nl_portid_hash_zalloc(size_t size)
978 {
979         if (size <= PAGE_SIZE)
980                 return kzalloc(size, GFP_ATOMIC);
981         else
982                 return (struct hlist_head *)
983                         __get_free_pages(GFP_ATOMIC | __GFP_ZERO,
984                                          get_order(size));
985 }
986
987 static void nl_portid_hash_free(struct hlist_head *table, size_t size)
988 {
989         if (size <= PAGE_SIZE)
990                 kfree(table);
991         else
992                 free_pages((unsigned long)table, get_order(size));
993 }
994
995 static int nl_portid_hash_rehash(struct nl_portid_hash *hash, int grow)
996 {
997         unsigned int omask, mask, shift;
998         size_t osize, size;
999         struct hlist_head *otable, *table;
1000         int i;
1001
1002         omask = mask = hash->mask;
1003         osize = size = (mask + 1) * sizeof(*table);
1004         shift = hash->shift;
1005
1006         if (grow) {
1007                 if (++shift > hash->max_shift)
1008                         return 0;
1009                 mask = mask * 2 + 1;
1010                 size *= 2;
1011         }
1012
1013         table = nl_portid_hash_zalloc(size);
1014         if (!table)
1015                 return 0;
1016
1017         otable = hash->table;
1018         hash->table = table;
1019         hash->mask = mask;
1020         hash->shift = shift;
1021         get_random_bytes(&hash->rnd, sizeof(hash->rnd));
1022
1023         for (i = 0; i <= omask; i++) {
1024                 struct sock *sk;
1025                 struct hlist_node *tmp;
1026
1027                 sk_for_each_safe(sk, tmp, &otable[i])
1028                         __sk_add_node(sk, nl_portid_hashfn(hash, nlk_sk(sk)->portid));
1029         }
1030
1031         nl_portid_hash_free(otable, osize);
1032         hash->rehash_time = jiffies + 10 * 60 * HZ;
1033         return 1;
1034 }
1035
1036 static inline int nl_portid_hash_dilute(struct nl_portid_hash *hash, int len)
1037 {
1038         int avg = hash->entries >> hash->shift;
1039
1040         if (unlikely(avg > 1) && nl_portid_hash_rehash(hash, 1))
1041                 return 1;
1042
1043         if (unlikely(len > avg) && time_after(jiffies, hash->rehash_time)) {
1044                 nl_portid_hash_rehash(hash, 0);
1045                 return 1;
1046         }
1047
1048         return 0;
1049 }
1050
1051 static const struct proto_ops netlink_ops;
1052
1053 static void
1054 netlink_update_listeners(struct sock *sk)
1055 {
1056         struct netlink_table *tbl = &nl_table[sk->sk_protocol];
1057         unsigned long mask;
1058         unsigned int i;
1059         struct listeners *listeners;
1060
1061         listeners = nl_deref_protected(tbl->listeners);
1062         if (!listeners)
1063                 return;
1064
1065         for (i = 0; i < NLGRPLONGS(tbl->groups); i++) {
1066                 mask = 0;
1067                 sk_for_each_bound(sk, &tbl->mc_list) {
1068                         if (i < NLGRPLONGS(nlk_sk(sk)->ngroups))
1069                                 mask |= nlk_sk(sk)->groups[i];
1070                 }
1071                 listeners->masks[i] = mask;
1072         }
1073         /* this function is only called with the netlink table "grabbed", which
1074          * makes sure updates are visible before bind or setsockopt return. */
1075 }
1076
1077 static int netlink_insert(struct sock *sk, struct net *net, u32 portid)
1078 {
1079         struct netlink_table *table = &nl_table[sk->sk_protocol];
1080         struct nl_portid_hash *hash = &table->hash;
1081         struct hlist_head *head;
1082         int err = -EADDRINUSE;
1083         struct sock *osk;
1084         int len;
1085
1086         netlink_table_grab();
1087         head = nl_portid_hashfn(hash, portid);
1088         len = 0;
1089         sk_for_each(osk, head) {
1090                 if (table->compare(net, osk) &&
1091                     (nlk_sk(osk)->portid == portid))
1092                         break;
1093                 len++;
1094         }
1095         if (osk)
1096                 goto err;
1097
1098         err = -EBUSY;
1099         if (nlk_sk(sk)->portid)
1100                 goto err;
1101
1102         err = -ENOMEM;
1103         if (BITS_PER_LONG > 32 && unlikely(hash->entries >= UINT_MAX))
1104                 goto err;
1105
1106         if (len && nl_portid_hash_dilute(hash, len))
1107                 head = nl_portid_hashfn(hash, portid);
1108         hash->entries++;
1109         nlk_sk(sk)->portid = portid;
1110         sk_add_node(sk, head);
1111         err = 0;
1112
1113 err:
1114         netlink_table_ungrab();
1115         return err;
1116 }
1117
1118 static void netlink_remove(struct sock *sk)
1119 {
1120         netlink_table_grab();
1121         if (sk_del_node_init(sk))
1122                 nl_table[sk->sk_protocol].hash.entries--;
1123         if (nlk_sk(sk)->subscriptions)
1124                 __sk_del_bind_node(sk);
1125         netlink_table_ungrab();
1126 }
1127
1128 static struct proto netlink_proto = {
1129         .name     = "NETLINK",
1130         .owner    = THIS_MODULE,
1131         .obj_size = sizeof(struct netlink_sock),
1132 };
1133
1134 static int __netlink_create(struct net *net, struct socket *sock,
1135                             struct mutex *cb_mutex, int protocol)
1136 {
1137         struct sock *sk;
1138         struct netlink_sock *nlk;
1139
1140         sock->ops = &netlink_ops;
1141
1142         sk = sk_alloc(net, PF_NETLINK, GFP_KERNEL, &netlink_proto);
1143         if (!sk)
1144                 return -ENOMEM;
1145
1146         sock_init_data(sock, sk);
1147
1148         nlk = nlk_sk(sk);
1149         if (cb_mutex) {
1150                 nlk->cb_mutex = cb_mutex;
1151         } else {
1152                 nlk->cb_mutex = &nlk->cb_def_mutex;
1153                 mutex_init(nlk->cb_mutex);
1154         }
1155         init_waitqueue_head(&nlk->wait);
1156 #ifdef CONFIG_NETLINK_MMAP
1157         mutex_init(&nlk->pg_vec_lock);
1158 #endif
1159
1160         sk->sk_destruct = netlink_sock_destruct;
1161         sk->sk_protocol = protocol;
1162         return 0;
1163 }
1164
1165 static int netlink_create(struct net *net, struct socket *sock, int protocol,
1166                           int kern)
1167 {
1168         struct module *module = NULL;
1169         struct mutex *cb_mutex;
1170         struct netlink_sock *nlk;
1171         void (*bind)(int group);
1172         int err = 0;
1173
1174         sock->state = SS_UNCONNECTED;
1175
1176         if (sock->type != SOCK_RAW && sock->type != SOCK_DGRAM)
1177                 return -ESOCKTNOSUPPORT;
1178
1179         if (protocol < 0 || protocol >= MAX_LINKS)
1180                 return -EPROTONOSUPPORT;
1181
1182         netlink_lock_table();
1183 #ifdef CONFIG_MODULES
1184         if (!nl_table[protocol].registered) {
1185                 netlink_unlock_table();
1186                 request_module("net-pf-%d-proto-%d", PF_NETLINK, protocol);
1187                 netlink_lock_table();
1188         }
1189 #endif
1190         if (nl_table[protocol].registered &&
1191             try_module_get(nl_table[protocol].module))
1192                 module = nl_table[protocol].module;
1193         else
1194                 err = -EPROTONOSUPPORT;
1195         cb_mutex = nl_table[protocol].cb_mutex;
1196         bind = nl_table[protocol].bind;
1197         netlink_unlock_table();
1198
1199         if (err < 0)
1200                 goto out;
1201
1202         err = __netlink_create(net, sock, cb_mutex, protocol);
1203         if (err < 0)
1204                 goto out_module;
1205
1206         local_bh_disable();
1207         sock_prot_inuse_add(net, &netlink_proto, 1);
1208         local_bh_enable();
1209
1210         nlk = nlk_sk(sock->sk);
1211         nlk->module = module;
1212         nlk->netlink_bind = bind;
1213 out:
1214         return err;
1215
1216 out_module:
1217         module_put(module);
1218         goto out;
1219 }
1220
1221 static int netlink_release(struct socket *sock)
1222 {
1223         struct sock *sk = sock->sk;
1224         struct netlink_sock *nlk;
1225
1226         if (!sk)
1227                 return 0;
1228
1229         netlink_remove(sk);
1230         sock_orphan(sk);
1231         nlk = nlk_sk(sk);
1232
1233         /*
1234          * OK. Socket is unlinked, any packets that arrive now
1235          * will be purged.
1236          */
1237
1238         sock->sk = NULL;
1239         wake_up_interruptible_all(&nlk->wait);
1240
1241         skb_queue_purge(&sk->sk_write_queue);
1242
1243         if (nlk->portid) {
1244                 struct netlink_notify n = {
1245                                                 .net = sock_net(sk),
1246                                                 .protocol = sk->sk_protocol,
1247                                                 .portid = nlk->portid,
1248                                           };
1249                 atomic_notifier_call_chain(&netlink_chain,
1250                                 NETLINK_URELEASE, &n);
1251         }
1252
1253         module_put(nlk->module);
1254
1255         netlink_table_grab();
1256         if (netlink_is_kernel(sk)) {
1257                 BUG_ON(nl_table[sk->sk_protocol].registered == 0);
1258                 if (--nl_table[sk->sk_protocol].registered == 0) {
1259                         struct listeners *old;
1260
1261                         old = nl_deref_protected(nl_table[sk->sk_protocol].listeners);
1262                         RCU_INIT_POINTER(nl_table[sk->sk_protocol].listeners, NULL);
1263                         kfree_rcu(old, rcu);
1264                         nl_table[sk->sk_protocol].module = NULL;
1265                         nl_table[sk->sk_protocol].bind = NULL;
1266                         nl_table[sk->sk_protocol].flags = 0;
1267                         nl_table[sk->sk_protocol].registered = 0;
1268                 }
1269         } else if (nlk->subscriptions) {
1270                 netlink_update_listeners(sk);
1271         }
1272         netlink_table_ungrab();
1273
1274         kfree(nlk->groups);
1275         nlk->groups = NULL;
1276
1277         local_bh_disable();
1278         sock_prot_inuse_add(sock_net(sk), &netlink_proto, -1);
1279         local_bh_enable();
1280         sock_put(sk);
1281         return 0;
1282 }
1283
1284 static int netlink_autobind(struct socket *sock)
1285 {
1286         struct sock *sk = sock->sk;
1287         struct net *net = sock_net(sk);
1288         struct netlink_table *table = &nl_table[sk->sk_protocol];
1289         struct nl_portid_hash *hash = &table->hash;
1290         struct hlist_head *head;
1291         struct sock *osk;
1292         s32 portid = task_tgid_vnr(current);
1293         int err;
1294         static s32 rover = -4097;
1295
1296 retry:
1297         cond_resched();
1298         netlink_table_grab();
1299         head = nl_portid_hashfn(hash, portid);
1300         sk_for_each(osk, head) {
1301                 if (!table->compare(net, osk))
1302                         continue;
1303                 if (nlk_sk(osk)->portid == portid) {
1304                         /* Bind collision, search negative portid values. */
1305                         portid = rover--;
1306                         if (rover > -4097)
1307                                 rover = -4097;
1308                         netlink_table_ungrab();
1309                         goto retry;
1310                 }
1311         }
1312         netlink_table_ungrab();
1313
1314         err = netlink_insert(sk, net, portid);
1315         if (err == -EADDRINUSE)
1316                 goto retry;
1317
1318         /* If 2 threads race to autobind, that is fine.  */
1319         if (err == -EBUSY)
1320                 err = 0;
1321
1322         return err;
1323 }
1324
1325 static inline int netlink_capable(const struct socket *sock, unsigned int flag)
1326 {
1327         return (nl_table[sock->sk->sk_protocol].flags & flag) ||
1328                 ns_capable(sock_net(sock->sk)->user_ns, CAP_NET_ADMIN);
1329 }
1330
1331 static void
1332 netlink_update_subscriptions(struct sock *sk, unsigned int subscriptions)
1333 {
1334         struct netlink_sock *nlk = nlk_sk(sk);
1335
1336         if (nlk->subscriptions && !subscriptions)
1337                 __sk_del_bind_node(sk);
1338         else if (!nlk->subscriptions && subscriptions)
1339                 sk_add_bind_node(sk, &nl_table[sk->sk_protocol].mc_list);
1340         nlk->subscriptions = subscriptions;
1341 }
1342
1343 static int netlink_realloc_groups(struct sock *sk)
1344 {
1345         struct netlink_sock *nlk = nlk_sk(sk);
1346         unsigned int groups;
1347         unsigned long *new_groups;
1348         int err = 0;
1349
1350         netlink_table_grab();
1351
1352         groups = nl_table[sk->sk_protocol].groups;
1353         if (!nl_table[sk->sk_protocol].registered) {
1354                 err = -ENOENT;
1355                 goto out_unlock;
1356         }
1357
1358         if (nlk->ngroups >= groups)
1359                 goto out_unlock;
1360
1361         new_groups = krealloc(nlk->groups, NLGRPSZ(groups), GFP_ATOMIC);
1362         if (new_groups == NULL) {
1363                 err = -ENOMEM;
1364                 goto out_unlock;
1365         }
1366         memset((char *)new_groups + NLGRPSZ(nlk->ngroups), 0,
1367                NLGRPSZ(groups) - NLGRPSZ(nlk->ngroups));
1368
1369         nlk->groups = new_groups;
1370         nlk->ngroups = groups;
1371  out_unlock:
1372         netlink_table_ungrab();
1373         return err;
1374 }
1375
1376 static int netlink_bind(struct socket *sock, struct sockaddr *addr,
1377                         int addr_len)
1378 {
1379         struct sock *sk = sock->sk;
1380         struct net *net = sock_net(sk);
1381         struct netlink_sock *nlk = nlk_sk(sk);
1382         struct sockaddr_nl *nladdr = (struct sockaddr_nl *)addr;
1383         int err;
1384
1385         if (addr_len < sizeof(struct sockaddr_nl))
1386                 return -EINVAL;
1387
1388         if (nladdr->nl_family != AF_NETLINK)
1389                 return -EINVAL;
1390
1391         /* Only superuser is allowed to listen multicasts */
1392         if (nladdr->nl_groups) {
1393                 if (!netlink_capable(sock, NL_CFG_F_NONROOT_RECV))
1394                         return -EPERM;
1395                 err = netlink_realloc_groups(sk);
1396                 if (err)
1397                         return err;
1398         }
1399
1400         if (nlk->portid) {
1401                 if (nladdr->nl_pid != nlk->portid)
1402                         return -EINVAL;
1403         } else {
1404                 err = nladdr->nl_pid ?
1405                         netlink_insert(sk, net, nladdr->nl_pid) :
1406                         netlink_autobind(sock);
1407                 if (err)
1408                         return err;
1409         }
1410
1411         if (!nladdr->nl_groups && (nlk->groups == NULL || !(u32)nlk->groups[0]))
1412                 return 0;
1413
1414         netlink_table_grab();
1415         netlink_update_subscriptions(sk, nlk->subscriptions +
1416                                          hweight32(nladdr->nl_groups) -
1417                                          hweight32(nlk->groups[0]));
1418         nlk->groups[0] = (nlk->groups[0] & ~0xffffffffUL) | nladdr->nl_groups;
1419         netlink_update_listeners(sk);
1420         netlink_table_ungrab();
1421
1422         if (nlk->netlink_bind && nlk->groups[0]) {
1423                 int i;
1424
1425                 for (i=0; i<nlk->ngroups; i++) {
1426                         if (test_bit(i, nlk->groups))
1427                                 nlk->netlink_bind(i);
1428                 }
1429         }
1430
1431         return 0;
1432 }
1433
1434 static int netlink_connect(struct socket *sock, struct sockaddr *addr,
1435                            int alen, int flags)
1436 {
1437         int err = 0;
1438         struct sock *sk = sock->sk;
1439         struct netlink_sock *nlk = nlk_sk(sk);
1440         struct sockaddr_nl *nladdr = (struct sockaddr_nl *)addr;
1441
1442         if (alen < sizeof(addr->sa_family))
1443                 return -EINVAL;
1444
1445         if (addr->sa_family == AF_UNSPEC) {
1446                 sk->sk_state    = NETLINK_UNCONNECTED;
1447                 nlk->dst_portid = 0;
1448                 nlk->dst_group  = 0;
1449                 return 0;
1450         }
1451         if (addr->sa_family != AF_NETLINK)
1452                 return -EINVAL;
1453
1454         /* Only superuser is allowed to send multicasts */
1455         if (nladdr->nl_groups && !netlink_capable(sock, NL_CFG_F_NONROOT_SEND))
1456                 return -EPERM;
1457
1458         if (!nlk->portid)
1459                 err = netlink_autobind(sock);
1460
1461         if (err == 0) {
1462                 sk->sk_state    = NETLINK_CONNECTED;
1463                 nlk->dst_portid = nladdr->nl_pid;
1464                 nlk->dst_group  = ffs(nladdr->nl_groups);
1465         }
1466
1467         return err;
1468 }
1469
1470 static int netlink_getname(struct socket *sock, struct sockaddr *addr,
1471                            int *addr_len, int peer)
1472 {
1473         struct sock *sk = sock->sk;
1474         struct netlink_sock *nlk = nlk_sk(sk);
1475         DECLARE_SOCKADDR(struct sockaddr_nl *, nladdr, addr);
1476
1477         nladdr->nl_family = AF_NETLINK;
1478         nladdr->nl_pad = 0;
1479         *addr_len = sizeof(*nladdr);
1480
1481         if (peer) {
1482                 nladdr->nl_pid = nlk->dst_portid;
1483                 nladdr->nl_groups = netlink_group_mask(nlk->dst_group);
1484         } else {
1485                 nladdr->nl_pid = nlk->portid;
1486                 nladdr->nl_groups = nlk->groups ? nlk->groups[0] : 0;
1487         }
1488         return 0;
1489 }
1490
1491 static struct sock *netlink_getsockbyportid(struct sock *ssk, u32 portid)
1492 {
1493         struct sock *sock;
1494         struct netlink_sock *nlk;
1495
1496         sock = netlink_lookup(sock_net(ssk), ssk->sk_protocol, portid);
1497         if (!sock)
1498                 return ERR_PTR(-ECONNREFUSED);
1499
1500         /* Don't bother queuing skb if kernel socket has no input function */
1501         nlk = nlk_sk(sock);
1502         if (sock->sk_state == NETLINK_CONNECTED &&
1503             nlk->dst_portid != nlk_sk(ssk)->portid) {
1504                 sock_put(sock);
1505                 return ERR_PTR(-ECONNREFUSED);
1506         }
1507         return sock;
1508 }
1509
1510 struct sock *netlink_getsockbyfilp(struct file *filp)
1511 {
1512         struct inode *inode = file_inode(filp);
1513         struct sock *sock;
1514
1515         if (!S_ISSOCK(inode->i_mode))
1516                 return ERR_PTR(-ENOTSOCK);
1517
1518         sock = SOCKET_I(inode)->sk;
1519         if (sock->sk_family != AF_NETLINK)
1520                 return ERR_PTR(-EINVAL);
1521
1522         sock_hold(sock);
1523         return sock;
1524 }
1525
1526 static struct sk_buff *netlink_alloc_large_skb(unsigned int size,
1527                                                int broadcast)
1528 {
1529         struct sk_buff *skb;
1530         void *data;
1531
1532         if (size <= NLMSG_GOODSIZE || broadcast)
1533                 return alloc_skb(size, GFP_KERNEL);
1534
1535         size = SKB_DATA_ALIGN(size) +
1536                SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
1537
1538         data = vmalloc(size);
1539         if (data == NULL)
1540                 return NULL;
1541
1542         skb = build_skb(data, size);
1543         if (skb == NULL)
1544                 vfree(data);
1545         else {
1546                 skb->head_frag = 0;
1547                 skb->destructor = netlink_skb_destructor;
1548         }
1549
1550         return skb;
1551 }
1552
1553 /*
1554  * Attach a skb to a netlink socket.
1555  * The caller must hold a reference to the destination socket. On error, the
1556  * reference is dropped. The skb is not send to the destination, just all
1557  * all error checks are performed and memory in the queue is reserved.
1558  * Return values:
1559  * < 0: error. skb freed, reference to sock dropped.
1560  * 0: continue
1561  * 1: repeat lookup - reference dropped while waiting for socket memory.
1562  */
1563 int netlink_attachskb(struct sock *sk, struct sk_buff *skb,
1564                       long *timeo, struct sock *ssk)
1565 {
1566         struct netlink_sock *nlk;
1567
1568         nlk = nlk_sk(sk);
1569
1570         if ((atomic_read(&sk->sk_rmem_alloc) > sk->sk_rcvbuf ||
1571              test_bit(NETLINK_CONGESTED, &nlk->state)) &&
1572             !netlink_skb_is_mmaped(skb)) {
1573                 DECLARE_WAITQUEUE(wait, current);
1574                 if (!*timeo) {
1575                         if (!ssk || netlink_is_kernel(ssk))
1576                                 netlink_overrun(sk);
1577                         sock_put(sk);
1578                         kfree_skb(skb);
1579                         return -EAGAIN;
1580                 }
1581
1582                 __set_current_state(TASK_INTERRUPTIBLE);
1583                 add_wait_queue(&nlk->wait, &wait);
1584
1585                 if ((atomic_read(&sk->sk_rmem_alloc) > sk->sk_rcvbuf ||
1586                      test_bit(NETLINK_CONGESTED, &nlk->state)) &&
1587                     !sock_flag(sk, SOCK_DEAD))
1588                         *timeo = schedule_timeout(*timeo);
1589
1590                 __set_current_state(TASK_RUNNING);
1591                 remove_wait_queue(&nlk->wait, &wait);
1592                 sock_put(sk);
1593
1594                 if (signal_pending(current)) {
1595                         kfree_skb(skb);
1596                         return sock_intr_errno(*timeo);
1597                 }
1598                 return 1;
1599         }
1600         netlink_skb_set_owner_r(skb, sk);
1601         return 0;
1602 }
1603
1604 static int __netlink_sendskb(struct sock *sk, struct sk_buff *skb)
1605 {
1606         int len = skb->len;
1607
1608         netlink_deliver_tap(skb);
1609
1610 #ifdef CONFIG_NETLINK_MMAP
1611         if (netlink_skb_is_mmaped(skb))
1612                 netlink_queue_mmaped_skb(sk, skb);
1613         else if (netlink_rx_is_mmaped(sk))
1614                 netlink_ring_set_copied(sk, skb);
1615         else
1616 #endif /* CONFIG_NETLINK_MMAP */
1617                 skb_queue_tail(&sk->sk_receive_queue, skb);
1618         sk->sk_data_ready(sk, len);
1619         return len;
1620 }
1621
1622 int netlink_sendskb(struct sock *sk, struct sk_buff *skb)
1623 {
1624         int len = __netlink_sendskb(sk, skb);
1625
1626         sock_put(sk);
1627         return len;
1628 }
1629
1630 void netlink_detachskb(struct sock *sk, struct sk_buff *skb)
1631 {
1632         kfree_skb(skb);
1633         sock_put(sk);
1634 }
1635
1636 static struct sk_buff *netlink_trim(struct sk_buff *skb, gfp_t allocation)
1637 {
1638         int delta;
1639
1640         WARN_ON(skb->sk != NULL);
1641         if (netlink_skb_is_mmaped(skb))
1642                 return skb;
1643
1644         delta = skb->end - skb->tail;
1645         if (is_vmalloc_addr(skb->head) || delta * 2 < skb->truesize)
1646                 return skb;
1647
1648         if (skb_shared(skb)) {
1649                 struct sk_buff *nskb = skb_clone(skb, allocation);
1650                 if (!nskb)
1651                         return skb;
1652                 consume_skb(skb);
1653                 skb = nskb;
1654         }
1655
1656         if (!pskb_expand_head(skb, 0, -delta, allocation))
1657                 skb->truesize -= delta;
1658
1659         return skb;
1660 }
1661
1662 static int netlink_unicast_kernel(struct sock *sk, struct sk_buff *skb,
1663                                   struct sock *ssk)
1664 {
1665         int ret;
1666         struct netlink_sock *nlk = nlk_sk(sk);
1667
1668         ret = -ECONNREFUSED;
1669         if (nlk->netlink_rcv != NULL) {
1670                 /* We could do a netlink_deliver_tap(skb) here as well
1671                  * but since this is intended for the kernel only, we
1672                  * should rather let it stay under the hood.
1673                  */
1674
1675                 ret = skb->len;
1676                 netlink_skb_set_owner_r(skb, sk);
1677                 NETLINK_CB(skb).sk = ssk;
1678                 nlk->netlink_rcv(skb);
1679                 consume_skb(skb);
1680         } else {
1681                 kfree_skb(skb);
1682         }
1683         sock_put(sk);
1684         return ret;
1685 }
1686
1687 int netlink_unicast(struct sock *ssk, struct sk_buff *skb,
1688                     u32 portid, int nonblock)
1689 {
1690         struct sock *sk;
1691         int err;
1692         long timeo;
1693
1694         skb = netlink_trim(skb, gfp_any());
1695
1696         timeo = sock_sndtimeo(ssk, nonblock);
1697 retry:
1698         sk = netlink_getsockbyportid(ssk, portid);
1699         if (IS_ERR(sk)) {
1700                 kfree_skb(skb);
1701                 return PTR_ERR(sk);
1702         }
1703         if (netlink_is_kernel(sk))
1704                 return netlink_unicast_kernel(sk, skb, ssk);
1705
1706         if (sk_filter(sk, skb)) {
1707                 err = skb->len;
1708                 kfree_skb(skb);
1709                 sock_put(sk);
1710                 return err;
1711         }
1712
1713         err = netlink_attachskb(sk, skb, &timeo, ssk);
1714         if (err == 1)
1715                 goto retry;
1716         if (err)
1717                 return err;
1718
1719         return netlink_sendskb(sk, skb);
1720 }
1721 EXPORT_SYMBOL(netlink_unicast);
1722
1723 struct sk_buff *netlink_alloc_skb(struct sock *ssk, unsigned int size,
1724                                   u32 dst_portid, gfp_t gfp_mask)
1725 {
1726 #ifdef CONFIG_NETLINK_MMAP
1727         struct sock *sk = NULL;
1728         struct sk_buff *skb;
1729         struct netlink_ring *ring;
1730         struct nl_mmap_hdr *hdr;
1731         unsigned int maxlen;
1732
1733         sk = netlink_getsockbyportid(ssk, dst_portid);
1734         if (IS_ERR(sk))
1735                 goto out;
1736
1737         ring = &nlk_sk(sk)->rx_ring;
1738         /* fast-path without atomic ops for common case: non-mmaped receiver */
1739         if (ring->pg_vec == NULL)
1740                 goto out_put;
1741
1742         skb = alloc_skb_head(gfp_mask);
1743         if (skb == NULL)
1744                 goto err1;
1745
1746         spin_lock_bh(&sk->sk_receive_queue.lock);
1747         /* check again under lock */
1748         if (ring->pg_vec == NULL)
1749                 goto out_free;
1750
1751         maxlen = ring->frame_size - NL_MMAP_HDRLEN;
1752         if (maxlen < size)
1753                 goto out_free;
1754
1755         netlink_forward_ring(ring);
1756         hdr = netlink_current_frame(ring, NL_MMAP_STATUS_UNUSED);
1757         if (hdr == NULL)
1758                 goto err2;
1759         netlink_ring_setup_skb(skb, sk, ring, hdr);
1760         netlink_set_status(hdr, NL_MMAP_STATUS_RESERVED);
1761         atomic_inc(&ring->pending);
1762         netlink_increment_head(ring);
1763
1764         spin_unlock_bh(&sk->sk_receive_queue.lock);
1765         return skb;
1766
1767 err2:
1768         kfree_skb(skb);
1769         spin_unlock_bh(&sk->sk_receive_queue.lock);
1770         netlink_overrun(sk);
1771 err1:
1772         sock_put(sk);
1773         return NULL;
1774
1775 out_free:
1776         kfree_skb(skb);
1777         spin_unlock_bh(&sk->sk_receive_queue.lock);
1778 out_put:
1779         sock_put(sk);
1780 out:
1781 #endif
1782         return alloc_skb(size, gfp_mask);
1783 }
1784 EXPORT_SYMBOL_GPL(netlink_alloc_skb);
1785
1786 int netlink_has_listeners(struct sock *sk, unsigned int group)
1787 {
1788         int res = 0;
1789         struct listeners *listeners;
1790
1791         BUG_ON(!netlink_is_kernel(sk));
1792
1793         rcu_read_lock();
1794         listeners = rcu_dereference(nl_table[sk->sk_protocol].listeners);
1795
1796         if (listeners && group - 1 < nl_table[sk->sk_protocol].groups)
1797                 res = test_bit(group - 1, listeners->masks);
1798
1799         rcu_read_unlock();
1800
1801         return res;
1802 }
1803 EXPORT_SYMBOL_GPL(netlink_has_listeners);
1804
1805 static int netlink_broadcast_deliver(struct sock *sk, struct sk_buff *skb)
1806 {
1807         struct netlink_sock *nlk = nlk_sk(sk);
1808
1809         if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf &&
1810             !test_bit(NETLINK_CONGESTED, &nlk->state)) {
1811                 netlink_skb_set_owner_r(skb, sk);
1812                 __netlink_sendskb(sk, skb);
1813                 return atomic_read(&sk->sk_rmem_alloc) > (sk->sk_rcvbuf >> 1);
1814         }
1815         return -1;
1816 }
1817
1818 struct netlink_broadcast_data {
1819         struct sock *exclude_sk;
1820         struct net *net;
1821         u32 portid;
1822         u32 group;
1823         int failure;
1824         int delivery_failure;
1825         int congested;
1826         int delivered;
1827         gfp_t allocation;
1828         struct sk_buff *skb, *skb2;
1829         int (*tx_filter)(struct sock *dsk, struct sk_buff *skb, void *data);
1830         void *tx_data;
1831 };
1832
1833 static int do_one_broadcast(struct sock *sk,
1834                                    struct netlink_broadcast_data *p)
1835 {
1836         struct netlink_sock *nlk = nlk_sk(sk);
1837         int val;
1838
1839         if (p->exclude_sk == sk)
1840                 goto out;
1841
1842         if (nlk->portid == p->portid || p->group - 1 >= nlk->ngroups ||
1843             !test_bit(p->group - 1, nlk->groups))
1844                 goto out;
1845
1846         if (!net_eq(sock_net(sk), p->net))
1847                 goto out;
1848
1849         if (p->failure) {
1850                 netlink_overrun(sk);
1851                 goto out;
1852         }
1853
1854         sock_hold(sk);
1855         if (p->skb2 == NULL) {
1856                 if (skb_shared(p->skb)) {
1857                         p->skb2 = skb_clone(p->skb, p->allocation);
1858                 } else {
1859                         p->skb2 = skb_get(p->skb);
1860                         /*
1861                          * skb ownership may have been set when
1862                          * delivered to a previous socket.
1863                          */
1864                         skb_orphan(p->skb2);
1865                 }
1866         }
1867         if (p->skb2 == NULL) {
1868                 netlink_overrun(sk);
1869                 /* Clone failed. Notify ALL listeners. */
1870                 p->failure = 1;
1871                 if (nlk->flags & NETLINK_BROADCAST_SEND_ERROR)
1872                         p->delivery_failure = 1;
1873         } else if (p->tx_filter && p->tx_filter(sk, p->skb2, p->tx_data)) {
1874                 kfree_skb(p->skb2);
1875                 p->skb2 = NULL;
1876         } else if (sk_filter(sk, p->skb2)) {
1877                 kfree_skb(p->skb2);
1878                 p->skb2 = NULL;
1879         } else if ((val = netlink_broadcast_deliver(sk, p->skb2)) < 0) {
1880                 netlink_overrun(sk);
1881                 if (nlk->flags & NETLINK_BROADCAST_SEND_ERROR)
1882                         p->delivery_failure = 1;
1883         } else {
1884                 p->congested |= val;
1885                 p->delivered = 1;
1886                 p->skb2 = NULL;
1887         }
1888         sock_put(sk);
1889
1890 out:
1891         return 0;
1892 }
1893
1894 int netlink_broadcast_filtered(struct sock *ssk, struct sk_buff *skb, u32 portid,
1895         u32 group, gfp_t allocation,
1896         int (*filter)(struct sock *dsk, struct sk_buff *skb, void *data),
1897         void *filter_data)
1898 {
1899         struct net *net = sock_net(ssk);
1900         struct netlink_broadcast_data info;
1901         struct sock *sk;
1902
1903         skb = netlink_trim(skb, allocation);
1904
1905         info.exclude_sk = ssk;
1906         info.net = net;
1907         info.portid = portid;
1908         info.group = group;
1909         info.failure = 0;
1910         info.delivery_failure = 0;
1911         info.congested = 0;
1912         info.delivered = 0;
1913         info.allocation = allocation;
1914         info.skb = skb;
1915         info.skb2 = NULL;
1916         info.tx_filter = filter;
1917         info.tx_data = filter_data;
1918
1919         /* While we sleep in clone, do not allow to change socket list */
1920
1921         netlink_lock_table();
1922
1923         sk_for_each_bound(sk, &nl_table[ssk->sk_protocol].mc_list)
1924                 do_one_broadcast(sk, &info);
1925
1926         consume_skb(skb);
1927
1928         netlink_unlock_table();
1929
1930         if (info.delivery_failure) {
1931                 kfree_skb(info.skb2);
1932                 return -ENOBUFS;
1933         }
1934         consume_skb(info.skb2);
1935
1936         if (info.delivered) {
1937                 if (info.congested && (allocation & __GFP_WAIT))
1938                         yield();
1939                 return 0;
1940         }
1941         return -ESRCH;
1942 }
1943 EXPORT_SYMBOL(netlink_broadcast_filtered);
1944
1945 int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, u32 portid,
1946                       u32 group, gfp_t allocation)
1947 {
1948         return netlink_broadcast_filtered(ssk, skb, portid, group, allocation,
1949                 NULL, NULL);
1950 }
1951 EXPORT_SYMBOL(netlink_broadcast);
1952
1953 struct netlink_set_err_data {
1954         struct sock *exclude_sk;
1955         u32 portid;
1956         u32 group;
1957         int code;
1958 };
1959
1960 static int do_one_set_err(struct sock *sk, struct netlink_set_err_data *p)
1961 {
1962         struct netlink_sock *nlk = nlk_sk(sk);
1963         int ret = 0;
1964
1965         if (sk == p->exclude_sk)
1966                 goto out;
1967
1968         if (!net_eq(sock_net(sk), sock_net(p->exclude_sk)))
1969                 goto out;
1970
1971         if (nlk->portid == p->portid || p->group - 1 >= nlk->ngroups ||
1972             !test_bit(p->group - 1, nlk->groups))
1973                 goto out;
1974
1975         if (p->code == ENOBUFS && nlk->flags & NETLINK_RECV_NO_ENOBUFS) {
1976                 ret = 1;
1977                 goto out;
1978         }
1979
1980         sk->sk_err = p->code;
1981         sk->sk_error_report(sk);
1982 out:
1983         return ret;
1984 }
1985
1986 /**
1987  * netlink_set_err - report error to broadcast listeners
1988  * @ssk: the kernel netlink socket, as returned by netlink_kernel_create()
1989  * @portid: the PORTID of a process that we want to skip (if any)
1990  * @groups: the broadcast group that will notice the error
1991  * @code: error code, must be negative (as usual in kernelspace)
1992  *
1993  * This function returns the number of broadcast listeners that have set the
1994  * NETLINK_RECV_NO_ENOBUFS socket option.
1995  */
1996 int netlink_set_err(struct sock *ssk, u32 portid, u32 group, int code)
1997 {
1998         struct netlink_set_err_data info;
1999         struct sock *sk;
2000         int ret = 0;
2001
2002         info.exclude_sk = ssk;
2003         info.portid = portid;
2004         info.group = group;
2005         /* sk->sk_err wants a positive error value */
2006         info.code = -code;
2007
2008         read_lock(&nl_table_lock);
2009
2010         sk_for_each_bound(sk, &nl_table[ssk->sk_protocol].mc_list)
2011                 ret += do_one_set_err(sk, &info);
2012
2013         read_unlock(&nl_table_lock);
2014         return ret;
2015 }
2016 EXPORT_SYMBOL(netlink_set_err);
2017
2018 /* must be called with netlink table grabbed */
2019 static void netlink_update_socket_mc(struct netlink_sock *nlk,
2020                                      unsigned int group,
2021                                      int is_new)
2022 {
2023         int old, new = !!is_new, subscriptions;
2024
2025         old = test_bit(group - 1, nlk->groups);
2026         subscriptions = nlk->subscriptions - old + new;
2027         if (new)
2028                 __set_bit(group - 1, nlk->groups);
2029         else
2030                 __clear_bit(group - 1, nlk->groups);
2031         netlink_update_subscriptions(&nlk->sk, subscriptions);
2032         netlink_update_listeners(&nlk->sk);
2033 }
2034
2035 static int netlink_setsockopt(struct socket *sock, int level, int optname,
2036                               char __user *optval, unsigned int optlen)
2037 {
2038         struct sock *sk = sock->sk;
2039         struct netlink_sock *nlk = nlk_sk(sk);
2040         unsigned int val = 0;
2041         int err;
2042
2043         if (level != SOL_NETLINK)
2044                 return -ENOPROTOOPT;
2045
2046         if (optname != NETLINK_RX_RING && optname != NETLINK_TX_RING &&
2047             optlen >= sizeof(int) &&
2048             get_user(val, (unsigned int __user *)optval))
2049                 return -EFAULT;
2050
2051         switch (optname) {
2052         case NETLINK_PKTINFO:
2053                 if (val)
2054                         nlk->flags |= NETLINK_RECV_PKTINFO;
2055                 else
2056                         nlk->flags &= ~NETLINK_RECV_PKTINFO;
2057                 err = 0;
2058                 break;
2059         case NETLINK_ADD_MEMBERSHIP:
2060         case NETLINK_DROP_MEMBERSHIP: {
2061                 if (!netlink_capable(sock, NL_CFG_F_NONROOT_RECV))
2062                         return -EPERM;
2063                 err = netlink_realloc_groups(sk);
2064                 if (err)
2065                         return err;
2066                 if (!val || val - 1 >= nlk->ngroups)
2067                         return -EINVAL;
2068                 netlink_table_grab();
2069                 netlink_update_socket_mc(nlk, val,
2070                                          optname == NETLINK_ADD_MEMBERSHIP);
2071                 netlink_table_ungrab();
2072
2073                 if (nlk->netlink_bind)
2074                         nlk->netlink_bind(val);
2075
2076                 err = 0;
2077                 break;
2078         }
2079         case NETLINK_BROADCAST_ERROR:
2080                 if (val)
2081                         nlk->flags |= NETLINK_BROADCAST_SEND_ERROR;
2082                 else
2083                         nlk->flags &= ~NETLINK_BROADCAST_SEND_ERROR;
2084                 err = 0;
2085                 break;
2086         case NETLINK_NO_ENOBUFS:
2087                 if (val) {
2088                         nlk->flags |= NETLINK_RECV_NO_ENOBUFS;
2089                         clear_bit(NETLINK_CONGESTED, &nlk->state);
2090                         wake_up_interruptible(&nlk->wait);
2091                 } else {
2092                         nlk->flags &= ~NETLINK_RECV_NO_ENOBUFS;
2093                 }
2094                 err = 0;
2095                 break;
2096 #ifdef CONFIG_NETLINK_MMAP
2097         case NETLINK_RX_RING:
2098         case NETLINK_TX_RING: {
2099                 struct nl_mmap_req req;
2100
2101                 /* Rings might consume more memory than queue limits, require
2102                  * CAP_NET_ADMIN.
2103                  */
2104                 if (!capable(CAP_NET_ADMIN))
2105                         return -EPERM;
2106                 if (optlen < sizeof(req))
2107                         return -EINVAL;
2108                 if (copy_from_user(&req, optval, sizeof(req)))
2109                         return -EFAULT;
2110                 err = netlink_set_ring(sk, &req, false,
2111                                        optname == NETLINK_TX_RING);
2112                 break;
2113         }
2114 #endif /* CONFIG_NETLINK_MMAP */
2115         default:
2116                 err = -ENOPROTOOPT;
2117         }
2118         return err;
2119 }
2120
2121 static int netlink_getsockopt(struct socket *sock, int level, int optname,
2122                               char __user *optval, int __user *optlen)
2123 {
2124         struct sock *sk = sock->sk;
2125         struct netlink_sock *nlk = nlk_sk(sk);
2126         int len, val, err;
2127
2128         if (level != SOL_NETLINK)
2129                 return -ENOPROTOOPT;
2130
2131         if (get_user(len, optlen))
2132                 return -EFAULT;
2133         if (len < 0)
2134                 return -EINVAL;
2135
2136         switch (optname) {
2137         case NETLINK_PKTINFO:
2138                 if (len < sizeof(int))
2139                         return -EINVAL;
2140                 len = sizeof(int);
2141                 val = nlk->flags & NETLINK_RECV_PKTINFO ? 1 : 0;
2142                 if (put_user(len, optlen) ||
2143                     put_user(val, optval))
2144                         return -EFAULT;
2145                 err = 0;
2146                 break;
2147         case NETLINK_BROADCAST_ERROR:
2148                 if (len < sizeof(int))
2149                         return -EINVAL;
2150                 len = sizeof(int);
2151                 val = nlk->flags & NETLINK_BROADCAST_SEND_ERROR ? 1 : 0;
2152                 if (put_user(len, optlen) ||
2153                     put_user(val, optval))
2154                         return -EFAULT;
2155                 err = 0;
2156                 break;
2157         case NETLINK_NO_ENOBUFS:
2158                 if (len < sizeof(int))
2159                         return -EINVAL;
2160                 len = sizeof(int);
2161                 val = nlk->flags & NETLINK_RECV_NO_ENOBUFS ? 1 : 0;
2162                 if (put_user(len, optlen) ||
2163                     put_user(val, optval))
2164                         return -EFAULT;
2165                 err = 0;
2166                 break;
2167         default:
2168                 err = -ENOPROTOOPT;
2169         }
2170         return err;
2171 }
2172
2173 static void netlink_cmsg_recv_pktinfo(struct msghdr *msg, struct sk_buff *skb)
2174 {
2175         struct nl_pktinfo info;
2176
2177         info.group = NETLINK_CB(skb).dst_group;
2178         put_cmsg(msg, SOL_NETLINK, NETLINK_PKTINFO, sizeof(info), &info);
2179 }
2180
2181 static int netlink_sendmsg(struct kiocb *kiocb, struct socket *sock,
2182                            struct msghdr *msg, size_t len)
2183 {
2184         struct sock_iocb *siocb = kiocb_to_siocb(kiocb);
2185         struct sock *sk = sock->sk;
2186         struct netlink_sock *nlk = nlk_sk(sk);
2187         struct sockaddr_nl *addr = msg->msg_name;
2188         u32 dst_portid;
2189         u32 dst_group;
2190         struct sk_buff *skb;
2191         int err;
2192         struct scm_cookie scm;
2193
2194         if (msg->msg_flags&MSG_OOB)
2195                 return -EOPNOTSUPP;
2196
2197         if (NULL == siocb->scm)
2198                 siocb->scm = &scm;
2199
2200         err = scm_send(sock, msg, siocb->scm, true);
2201         if (err < 0)
2202                 return err;
2203
2204         if (msg->msg_namelen) {
2205                 err = -EINVAL;
2206                 if (addr->nl_family != AF_NETLINK)
2207                         goto out;
2208                 dst_portid = addr->nl_pid;
2209                 dst_group = ffs(addr->nl_groups);
2210                 err =  -EPERM;
2211                 if ((dst_group || dst_portid) &&
2212                     !netlink_capable(sock, NL_CFG_F_NONROOT_SEND))
2213                         goto out;
2214         } else {
2215                 dst_portid = nlk->dst_portid;
2216                 dst_group = nlk->dst_group;
2217         }
2218
2219         if (!nlk->portid) {
2220                 err = netlink_autobind(sock);
2221                 if (err)
2222                         goto out;
2223         }
2224
2225         if (netlink_tx_is_mmaped(sk) &&
2226             msg->msg_iov->iov_base == NULL) {
2227                 err = netlink_mmap_sendmsg(sk, msg, dst_portid, dst_group,
2228                                            siocb);
2229                 goto out;
2230         }
2231
2232         err = -EMSGSIZE;
2233         if (len > sk->sk_sndbuf - 32)
2234                 goto out;
2235         err = -ENOBUFS;
2236         skb = netlink_alloc_large_skb(len, dst_group);
2237         if (skb == NULL)
2238                 goto out;
2239
2240         NETLINK_CB(skb).portid  = nlk->portid;
2241         NETLINK_CB(skb).dst_group = dst_group;
2242         NETLINK_CB(skb).creds   = siocb->scm->creds;
2243
2244         err = -EFAULT;
2245         if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
2246                 kfree_skb(skb);
2247                 goto out;
2248         }
2249
2250         err = security_netlink_send(sk, skb);
2251         if (err) {
2252                 kfree_skb(skb);
2253                 goto out;
2254         }
2255
2256         if (dst_group) {
2257                 atomic_inc(&skb->users);
2258                 netlink_broadcast(sk, skb, dst_portid, dst_group, GFP_KERNEL);
2259         }
2260         err = netlink_unicast(sk, skb, dst_portid, msg->msg_flags&MSG_DONTWAIT);
2261
2262 out:
2263         scm_destroy(siocb->scm);
2264         return err;
2265 }
2266
2267 static int netlink_recvmsg(struct kiocb *kiocb, struct socket *sock,
2268                            struct msghdr *msg, size_t len,
2269                            int flags)
2270 {
2271         struct sock_iocb *siocb = kiocb_to_siocb(kiocb);
2272         struct scm_cookie scm;
2273         struct sock *sk = sock->sk;
2274         struct netlink_sock *nlk = nlk_sk(sk);
2275         int noblock = flags&MSG_DONTWAIT;
2276         size_t copied;
2277         struct sk_buff *skb, *data_skb;
2278         int err, ret;
2279
2280         if (flags&MSG_OOB)
2281                 return -EOPNOTSUPP;
2282
2283         copied = 0;
2284
2285         skb = skb_recv_datagram(sk, flags, noblock, &err);
2286         if (skb == NULL)
2287                 goto out;
2288
2289         data_skb = skb;
2290
2291 #ifdef CONFIG_COMPAT_NETLINK_MESSAGES
2292         if (unlikely(skb_shinfo(skb)->frag_list)) {
2293                 /*
2294                  * If this skb has a frag_list, then here that means that we
2295                  * will have to use the frag_list skb's data for compat tasks
2296                  * and the regular skb's data for normal (non-compat) tasks.
2297                  *
2298                  * If we need to send the compat skb, assign it to the
2299                  * 'data_skb' variable so that it will be used below for data
2300                  * copying. We keep 'skb' for everything else, including
2301                  * freeing both later.
2302                  */
2303                 if (flags & MSG_CMSG_COMPAT)
2304                         data_skb = skb_shinfo(skb)->frag_list;
2305         }
2306 #endif
2307
2308         msg->msg_namelen = 0;
2309
2310         copied = data_skb->len;
2311         if (len < copied) {
2312                 msg->msg_flags |= MSG_TRUNC;
2313                 copied = len;
2314         }
2315
2316         skb_reset_transport_header(data_skb);
2317         err = skb_copy_datagram_iovec(data_skb, 0, msg->msg_iov, copied);
2318
2319         if (msg->msg_name) {
2320                 struct sockaddr_nl *addr = (struct sockaddr_nl *)msg->msg_name;
2321                 addr->nl_family = AF_NETLINK;
2322                 addr->nl_pad    = 0;
2323                 addr->nl_pid    = NETLINK_CB(skb).portid;
2324                 addr->nl_groups = netlink_group_mask(NETLINK_CB(skb).dst_group);
2325                 msg->msg_namelen = sizeof(*addr);
2326         }
2327
2328         if (nlk->flags & NETLINK_RECV_PKTINFO)
2329                 netlink_cmsg_recv_pktinfo(msg, skb);
2330
2331         if (NULL == siocb->scm) {
2332                 memset(&scm, 0, sizeof(scm));
2333                 siocb->scm = &scm;
2334         }
2335         siocb->scm->creds = *NETLINK_CREDS(skb);
2336         if (flags & MSG_TRUNC)
2337                 copied = data_skb->len;
2338
2339         skb_free_datagram(sk, skb);
2340
2341         if (nlk->cb_running &&
2342             atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf / 2) {
2343                 ret = netlink_dump(sk);
2344                 if (ret) {
2345                         sk->sk_err = ret;
2346                         sk->sk_error_report(sk);
2347                 }
2348         }
2349
2350         scm_recv(sock, msg, siocb->scm, flags);
2351 out:
2352         netlink_rcv_wake(sk);
2353         return err ? : copied;
2354 }
2355
2356 static void netlink_data_ready(struct sock *sk, int len)
2357 {
2358         BUG();
2359 }
2360
2361 /*
2362  *      We export these functions to other modules. They provide a
2363  *      complete set of kernel non-blocking support for message
2364  *      queueing.
2365  */
2366
2367 struct sock *
2368 __netlink_kernel_create(struct net *net, int unit, struct module *module,
2369                         struct netlink_kernel_cfg *cfg)
2370 {
2371         struct socket *sock;
2372         struct sock *sk;
2373         struct netlink_sock *nlk;
2374         struct listeners *listeners = NULL;
2375         struct mutex *cb_mutex = cfg ? cfg->cb_mutex : NULL;
2376         unsigned int groups;
2377
2378         BUG_ON(!nl_table);
2379
2380         if (unit < 0 || unit >= MAX_LINKS)
2381                 return NULL;
2382
2383         if (sock_create_lite(PF_NETLINK, SOCK_DGRAM, unit, &sock))
2384                 return NULL;
2385
2386         /*
2387          * We have to just have a reference on the net from sk, but don't
2388          * get_net it. Besides, we cannot get and then put the net here.
2389          * So we create one inside init_net and the move it to net.
2390          */
2391
2392         if (__netlink_create(&init_net, sock, cb_mutex, unit) < 0)
2393                 goto out_sock_release_nosk;
2394
2395         sk = sock->sk;
2396         sk_change_net(sk, net);
2397
2398         if (!cfg || cfg->groups < 32)
2399                 groups = 32;
2400         else
2401                 groups = cfg->groups;
2402
2403         listeners = kzalloc(sizeof(*listeners) + NLGRPSZ(groups), GFP_KERNEL);
2404         if (!listeners)
2405                 goto out_sock_release;
2406
2407         sk->sk_data_ready = netlink_data_ready;
2408         if (cfg && cfg->input)
2409                 nlk_sk(sk)->netlink_rcv = cfg->input;
2410
2411         if (netlink_insert(sk, net, 0))
2412                 goto out_sock_release;
2413
2414         nlk = nlk_sk(sk);
2415         nlk->flags |= NETLINK_KERNEL_SOCKET;
2416
2417         netlink_table_grab();
2418         if (!nl_table[unit].registered) {
2419                 nl_table[unit].groups = groups;
2420                 rcu_assign_pointer(nl_table[unit].listeners, listeners);
2421                 nl_table[unit].cb_mutex = cb_mutex;
2422                 nl_table[unit].module = module;
2423                 if (cfg) {
2424                         nl_table[unit].bind = cfg->bind;
2425                         nl_table[unit].flags = cfg->flags;
2426                         if (cfg->compare)
2427                                 nl_table[unit].compare = cfg->compare;
2428                 }
2429                 nl_table[unit].registered = 1;
2430         } else {
2431                 kfree(listeners);
2432                 nl_table[unit].registered++;
2433         }
2434         netlink_table_ungrab();
2435         return sk;
2436
2437 out_sock_release:
2438         kfree(listeners);
2439         netlink_kernel_release(sk);
2440         return NULL;
2441
2442 out_sock_release_nosk:
2443         sock_release(sock);
2444         return NULL;
2445 }
2446 EXPORT_SYMBOL(__netlink_kernel_create);
2447
2448 void
2449 netlink_kernel_release(struct sock *sk)
2450 {
2451         sk_release_kernel(sk);
2452 }
2453 EXPORT_SYMBOL(netlink_kernel_release);
2454
2455 int __netlink_change_ngroups(struct sock *sk, unsigned int groups)
2456 {
2457         struct listeners *new, *old;
2458         struct netlink_table *tbl = &nl_table[sk->sk_protocol];
2459
2460         if (groups < 32)
2461                 groups = 32;
2462
2463         if (NLGRPSZ(tbl->groups) < NLGRPSZ(groups)) {
2464                 new = kzalloc(sizeof(*new) + NLGRPSZ(groups), GFP_ATOMIC);
2465                 if (!new)
2466                         return -ENOMEM;
2467                 old = nl_deref_protected(tbl->listeners);
2468                 memcpy(new->masks, old->masks, NLGRPSZ(tbl->groups));
2469                 rcu_assign_pointer(tbl->listeners, new);
2470
2471                 kfree_rcu(old, rcu);
2472         }
2473         tbl->groups = groups;
2474
2475         return 0;
2476 }
2477
2478 /**
2479  * netlink_change_ngroups - change number of multicast groups
2480  *
2481  * This changes the number of multicast groups that are available
2482  * on a certain netlink family. Note that it is not possible to
2483  * change the number of groups to below 32. Also note that it does
2484  * not implicitly call netlink_clear_multicast_users() when the
2485  * number of groups is reduced.
2486  *
2487  * @sk: The kernel netlink socket, as returned by netlink_kernel_create().
2488  * @groups: The new number of groups.
2489  */
2490 int netlink_change_ngroups(struct sock *sk, unsigned int groups)
2491 {
2492         int err;
2493
2494         netlink_table_grab();
2495         err = __netlink_change_ngroups(sk, groups);
2496         netlink_table_ungrab();
2497
2498         return err;
2499 }
2500
2501 void __netlink_clear_multicast_users(struct sock *ksk, unsigned int group)
2502 {
2503         struct sock *sk;
2504         struct netlink_table *tbl = &nl_table[ksk->sk_protocol];
2505
2506         sk_for_each_bound(sk, &tbl->mc_list)
2507                 netlink_update_socket_mc(nlk_sk(sk), group, 0);
2508 }
2509
2510 /**
2511  * netlink_clear_multicast_users - kick off multicast listeners
2512  *
2513  * This function removes all listeners from the given group.
2514  * @ksk: The kernel netlink socket, as returned by
2515  *      netlink_kernel_create().
2516  * @group: The multicast group to clear.
2517  */
2518 void netlink_clear_multicast_users(struct sock *ksk, unsigned int group)
2519 {
2520         netlink_table_grab();
2521         __netlink_clear_multicast_users(ksk, group);
2522         netlink_table_ungrab();
2523 }
2524
2525 struct nlmsghdr *
2526 __nlmsg_put(struct sk_buff *skb, u32 portid, u32 seq, int type, int len, int flags)
2527 {
2528         struct nlmsghdr *nlh;
2529         int size = nlmsg_msg_size(len);
2530
2531         nlh = (struct nlmsghdr*)skb_put(skb, NLMSG_ALIGN(size));
2532         nlh->nlmsg_type = type;
2533         nlh->nlmsg_len = size;
2534         nlh->nlmsg_flags = flags;
2535         nlh->nlmsg_pid = portid;
2536         nlh->nlmsg_seq = seq;
2537         if (!__builtin_constant_p(size) || NLMSG_ALIGN(size) - size != 0)
2538                 memset(nlmsg_data(nlh) + len, 0, NLMSG_ALIGN(size) - size);
2539         return nlh;
2540 }
2541 EXPORT_SYMBOL(__nlmsg_put);
2542
2543 /*
2544  * It looks a bit ugly.
2545  * It would be better to create kernel thread.
2546  */
2547
2548 static int netlink_dump(struct sock *sk)
2549 {
2550         struct netlink_sock *nlk = nlk_sk(sk);
2551         struct netlink_callback *cb;
2552         struct sk_buff *skb = NULL;
2553         struct nlmsghdr *nlh;
2554         int len, err = -ENOBUFS;
2555         int alloc_size;
2556
2557         mutex_lock(nlk->cb_mutex);
2558         if (!nlk->cb_running) {
2559                 err = -EINVAL;
2560                 goto errout_skb;
2561         }
2562
2563         cb = &nlk->cb;
2564         alloc_size = max_t(int, cb->min_dump_alloc, NLMSG_GOODSIZE);
2565
2566         if (!netlink_rx_is_mmaped(sk) &&
2567             atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf)
2568                 goto errout_skb;
2569         skb = netlink_alloc_skb(sk, alloc_size, nlk->portid, GFP_KERNEL);
2570         if (!skb)
2571                 goto errout_skb;
2572         netlink_skb_set_owner_r(skb, sk);
2573
2574         len = cb->dump(skb, cb);
2575
2576         if (len > 0) {
2577                 mutex_unlock(nlk->cb_mutex);
2578
2579                 if (sk_filter(sk, skb))
2580                         kfree_skb(skb);
2581                 else
2582                         __netlink_sendskb(sk, skb);
2583                 return 0;
2584         }
2585
2586         nlh = nlmsg_put_answer(skb, cb, NLMSG_DONE, sizeof(len), NLM_F_MULTI);
2587         if (!nlh)
2588                 goto errout_skb;
2589
2590         nl_dump_check_consistent(cb, nlh);
2591
2592         memcpy(nlmsg_data(nlh), &len, sizeof(len));
2593
2594         if (sk_filter(sk, skb))
2595                 kfree_skb(skb);
2596         else
2597                 __netlink_sendskb(sk, skb);
2598
2599         if (cb->done)
2600                 cb->done(cb);
2601
2602         nlk->cb_running = false;
2603         mutex_unlock(nlk->cb_mutex);
2604         module_put(cb->module);
2605         consume_skb(cb->skb);
2606         return 0;
2607
2608 errout_skb:
2609         mutex_unlock(nlk->cb_mutex);
2610         kfree_skb(skb);
2611         return err;
2612 }
2613
2614 int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb,
2615                          const struct nlmsghdr *nlh,
2616                          struct netlink_dump_control *control)
2617 {
2618         struct netlink_callback *cb;
2619         struct sock *sk;
2620         struct netlink_sock *nlk;
2621         int ret;
2622
2623         /* Memory mapped dump requests need to be copied to avoid looping
2624          * on the pending state in netlink_mmap_sendmsg() while the CB hold
2625          * a reference to the skb.
2626          */
2627         if (netlink_skb_is_mmaped(skb)) {
2628                 skb = skb_copy(skb, GFP_KERNEL);
2629                 if (skb == NULL)
2630                         return -ENOBUFS;
2631         } else
2632                 atomic_inc(&skb->users);
2633
2634         sk = netlink_lookup(sock_net(ssk), ssk->sk_protocol, NETLINK_CB(skb).portid);
2635         if (sk == NULL) {
2636                 ret = -ECONNREFUSED;
2637                 goto error_free;
2638         }
2639
2640         nlk = nlk_sk(sk);
2641         mutex_lock(nlk->cb_mutex);
2642         /* A dump is in progress... */
2643         if (nlk->cb_running) {
2644                 ret = -EBUSY;
2645                 goto error_unlock;
2646         }
2647         /* add reference of module which cb->dump belongs to */
2648         if (!try_module_get(control->module)) {
2649                 ret = -EPROTONOSUPPORT;
2650                 goto error_unlock;
2651         }
2652
2653         cb = &nlk->cb;
2654         memset(cb, 0, sizeof(*cb));
2655         cb->dump = control->dump;
2656         cb->done = control->done;
2657         cb->nlh = nlh;
2658         cb->data = control->data;
2659         cb->module = control->module;
2660         cb->min_dump_alloc = control->min_dump_alloc;
2661         cb->skb = skb;
2662
2663         nlk->cb_running = true;
2664
2665         mutex_unlock(nlk->cb_mutex);
2666
2667         ret = netlink_dump(sk);
2668         sock_put(sk);
2669
2670         if (ret)
2671                 return ret;
2672
2673         /* We successfully started a dump, by returning -EINTR we
2674          * signal not to send ACK even if it was requested.
2675          */
2676         return -EINTR;
2677
2678 error_unlock:
2679         sock_put(sk);
2680         mutex_unlock(nlk->cb_mutex);
2681 error_free:
2682         kfree_skb(skb);
2683         return ret;
2684 }
2685 EXPORT_SYMBOL(__netlink_dump_start);
2686
2687 void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err)
2688 {
2689         struct sk_buff *skb;
2690         struct nlmsghdr *rep;
2691         struct nlmsgerr *errmsg;
2692         size_t payload = sizeof(*errmsg);
2693
2694         /* error messages get the original request appened */
2695         if (err)
2696                 payload += nlmsg_len(nlh);
2697
2698         skb = netlink_alloc_skb(in_skb->sk, nlmsg_total_size(payload),
2699                                 NETLINK_CB(in_skb).portid, GFP_KERNEL);
2700         if (!skb) {
2701                 struct sock *sk;
2702
2703                 sk = netlink_lookup(sock_net(in_skb->sk),
2704                                     in_skb->sk->sk_protocol,
2705                                     NETLINK_CB(in_skb).portid);
2706                 if (sk) {
2707                         sk->sk_err = ENOBUFS;
2708                         sk->sk_error_report(sk);
2709                         sock_put(sk);
2710                 }
2711                 return;
2712         }
2713
2714         rep = __nlmsg_put(skb, NETLINK_CB(in_skb).portid, nlh->nlmsg_seq,
2715                           NLMSG_ERROR, payload, 0);
2716         errmsg = nlmsg_data(rep);
2717         errmsg->error = err;
2718         memcpy(&errmsg->msg, nlh, err ? nlh->nlmsg_len : sizeof(*nlh));
2719         netlink_unicast(in_skb->sk, skb, NETLINK_CB(in_skb).portid, MSG_DONTWAIT);
2720 }
2721 EXPORT_SYMBOL(netlink_ack);
2722
2723 int netlink_rcv_skb(struct sk_buff *skb, int (*cb)(struct sk_buff *,
2724                                                      struct nlmsghdr *))
2725 {
2726         struct nlmsghdr *nlh;
2727         int err;
2728
2729         while (skb->len >= nlmsg_total_size(0)) {
2730                 int msglen;
2731
2732                 nlh = nlmsg_hdr(skb);
2733                 err = 0;
2734
2735                 if (nlh->nlmsg_len < NLMSG_HDRLEN || skb->len < nlh->nlmsg_len)
2736                         return 0;
2737
2738                 /* Only requests are handled by the kernel */
2739                 if (!(nlh->nlmsg_flags & NLM_F_REQUEST))
2740                         goto ack;
2741
2742                 /* Skip control messages */
2743                 if (nlh->nlmsg_type < NLMSG_MIN_TYPE)
2744                         goto ack;
2745
2746                 err = cb(skb, nlh);
2747                 if (err == -EINTR)
2748                         goto skip;
2749
2750 ack:
2751                 if (nlh->nlmsg_flags & NLM_F_ACK || err)
2752                         netlink_ack(skb, nlh, err);
2753
2754 skip:
2755                 msglen = NLMSG_ALIGN(nlh->nlmsg_len);
2756                 if (msglen > skb->len)
2757                         msglen = skb->len;
2758                 skb_pull(skb, msglen);
2759         }
2760
2761         return 0;
2762 }
2763 EXPORT_SYMBOL(netlink_rcv_skb);
2764
2765 /**
2766  * nlmsg_notify - send a notification netlink message
2767  * @sk: netlink socket to use
2768  * @skb: notification message
2769  * @portid: destination netlink portid for reports or 0
2770  * @group: destination multicast group or 0
2771  * @report: 1 to report back, 0 to disable
2772  * @flags: allocation flags
2773  */
2774 int nlmsg_notify(struct sock *sk, struct sk_buff *skb, u32 portid,
2775                  unsigned int group, int report, gfp_t flags)
2776 {
2777         int err = 0;
2778
2779         if (group) {
2780                 int exclude_portid = 0;
2781
2782                 if (report) {
2783                         atomic_inc(&skb->users);
2784                         exclude_portid = portid;
2785                 }
2786
2787                 /* errors reported via destination sk->sk_err, but propagate
2788                  * delivery errors if NETLINK_BROADCAST_ERROR flag is set */
2789                 err = nlmsg_multicast(sk, skb, exclude_portid, group, flags);
2790         }
2791
2792         if (report) {
2793                 int err2;
2794
2795                 err2 = nlmsg_unicast(sk, skb, portid);
2796                 if (!err || err == -ESRCH)
2797                         err = err2;
2798         }
2799
2800         return err;
2801 }
2802 EXPORT_SYMBOL(nlmsg_notify);
2803
2804 #ifdef CONFIG_PROC_FS
2805 struct nl_seq_iter {
2806         struct seq_net_private p;
2807         int link;
2808         int hash_idx;
2809 };
2810
2811 static struct sock *netlink_seq_socket_idx(struct seq_file *seq, loff_t pos)
2812 {
2813         struct nl_seq_iter *iter = seq->private;
2814         int i, j;
2815         struct sock *s;
2816         loff_t off = 0;
2817
2818         for (i = 0; i < MAX_LINKS; i++) {
2819                 struct nl_portid_hash *hash = &nl_table[i].hash;
2820
2821                 for (j = 0; j <= hash->mask; j++) {
2822                         sk_for_each(s, &hash->table[j]) {
2823                                 if (sock_net(s) != seq_file_net(seq))
2824                                         continue;
2825                                 if (off == pos) {
2826                                         iter->link = i;
2827                                         iter->hash_idx = j;
2828                                         return s;
2829                                 }
2830                                 ++off;
2831                         }
2832                 }
2833         }
2834         return NULL;
2835 }
2836
2837 static void *netlink_seq_start(struct seq_file *seq, loff_t *pos)
2838         __acquires(nl_table_lock)
2839 {
2840         read_lock(&nl_table_lock);
2841         return *pos ? netlink_seq_socket_idx(seq, *pos - 1) : SEQ_START_TOKEN;
2842 }
2843
2844 static void *netlink_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2845 {
2846         struct sock *s;
2847         struct nl_seq_iter *iter;
2848         struct net *net;
2849         int i, j;
2850
2851         ++*pos;
2852
2853         if (v == SEQ_START_TOKEN)
2854                 return netlink_seq_socket_idx(seq, 0);
2855
2856         net = seq_file_net(seq);
2857         iter = seq->private;
2858         s = v;
2859         do {
2860                 s = sk_next(s);
2861         } while (s && !nl_table[s->sk_protocol].compare(net, s));
2862         if (s)
2863                 return s;
2864
2865         i = iter->link;
2866         j = iter->hash_idx + 1;
2867
2868         do {
2869                 struct nl_portid_hash *hash = &nl_table[i].hash;
2870
2871                 for (; j <= hash->mask; j++) {
2872                         s = sk_head(&hash->table[j]);
2873
2874                         while (s && !nl_table[s->sk_protocol].compare(net, s))
2875                                 s = sk_next(s);
2876                         if (s) {
2877                                 iter->link = i;
2878                                 iter->hash_idx = j;
2879                                 return s;
2880                         }
2881                 }
2882
2883                 j = 0;
2884         } while (++i < MAX_LINKS);
2885
2886         return NULL;
2887 }
2888
2889 static void netlink_seq_stop(struct seq_file *seq, void *v)
2890         __releases(nl_table_lock)
2891 {
2892         read_unlock(&nl_table_lock);
2893 }
2894
2895
2896 static int netlink_seq_show(struct seq_file *seq, void *v)
2897 {
2898         if (v == SEQ_START_TOKEN) {
2899                 seq_puts(seq,
2900                          "sk       Eth Pid    Groups   "
2901                          "Rmem     Wmem     Dump     Locks     Drops     Inode\n");
2902         } else {
2903                 struct sock *s = v;
2904                 struct netlink_sock *nlk = nlk_sk(s);
2905
2906                 seq_printf(seq, "%pK %-3d %-6u %08x %-8d %-8d %d %-8d %-8d %-8lu\n",
2907                            s,
2908                            s->sk_protocol,
2909                            nlk->portid,
2910                            nlk->groups ? (u32)nlk->groups[0] : 0,
2911                            sk_rmem_alloc_get(s),
2912                            sk_wmem_alloc_get(s),
2913                            nlk->cb_running,
2914                            atomic_read(&s->sk_refcnt),
2915                            atomic_read(&s->sk_drops),
2916                            sock_i_ino(s)
2917                         );
2918
2919         }
2920         return 0;
2921 }
2922
2923 static const struct seq_operations netlink_seq_ops = {
2924         .start  = netlink_seq_start,
2925         .next   = netlink_seq_next,
2926         .stop   = netlink_seq_stop,
2927         .show   = netlink_seq_show,
2928 };
2929
2930
2931 static int netlink_seq_open(struct inode *inode, struct file *file)
2932 {
2933         return seq_open_net(inode, file, &netlink_seq_ops,
2934                                 sizeof(struct nl_seq_iter));
2935 }
2936
2937 static const struct file_operations netlink_seq_fops = {
2938         .owner          = THIS_MODULE,
2939         .open           = netlink_seq_open,
2940         .read           = seq_read,
2941         .llseek         = seq_lseek,
2942         .release        = seq_release_net,
2943 };
2944
2945 #endif
2946
2947 int netlink_register_notifier(struct notifier_block *nb)
2948 {
2949         return atomic_notifier_chain_register(&netlink_chain, nb);
2950 }
2951 EXPORT_SYMBOL(netlink_register_notifier);
2952
2953 int netlink_unregister_notifier(struct notifier_block *nb)
2954 {
2955         return atomic_notifier_chain_unregister(&netlink_chain, nb);
2956 }
2957 EXPORT_SYMBOL(netlink_unregister_notifier);
2958
2959 static const struct proto_ops netlink_ops = {
2960         .family =       PF_NETLINK,
2961         .owner =        THIS_MODULE,
2962         .release =      netlink_release,
2963         .bind =         netlink_bind,
2964         .connect =      netlink_connect,
2965         .socketpair =   sock_no_socketpair,
2966         .accept =       sock_no_accept,
2967         .getname =      netlink_getname,
2968         .poll =         netlink_poll,
2969         .ioctl =        sock_no_ioctl,
2970         .listen =       sock_no_listen,
2971         .shutdown =     sock_no_shutdown,
2972         .setsockopt =   netlink_setsockopt,
2973         .getsockopt =   netlink_getsockopt,
2974         .sendmsg =      netlink_sendmsg,
2975         .recvmsg =      netlink_recvmsg,
2976         .mmap =         netlink_mmap,
2977         .sendpage =     sock_no_sendpage,
2978 };
2979
2980 static const struct net_proto_family netlink_family_ops = {
2981         .family = PF_NETLINK,
2982         .create = netlink_create,
2983         .owner  = THIS_MODULE,  /* for consistency 8) */
2984 };
2985
2986 static int __net_init netlink_net_init(struct net *net)
2987 {
2988 #ifdef CONFIG_PROC_FS
2989         if (!proc_create("netlink", 0, net->proc_net, &netlink_seq_fops))
2990                 return -ENOMEM;
2991 #endif
2992         return 0;
2993 }
2994
2995 static void __net_exit netlink_net_exit(struct net *net)
2996 {
2997 #ifdef CONFIG_PROC_FS
2998         remove_proc_entry("netlink", net->proc_net);
2999 #endif
3000 }
3001
3002 static void __init netlink_add_usersock_entry(void)
3003 {
3004         struct listeners *listeners;
3005         int groups = 32;
3006
3007         listeners = kzalloc(sizeof(*listeners) + NLGRPSZ(groups), GFP_KERNEL);
3008         if (!listeners)
3009                 panic("netlink_add_usersock_entry: Cannot allocate listeners\n");
3010
3011         netlink_table_grab();
3012
3013         nl_table[NETLINK_USERSOCK].groups = groups;
3014         rcu_assign_pointer(nl_table[NETLINK_USERSOCK].listeners, listeners);
3015         nl_table[NETLINK_USERSOCK].module = THIS_MODULE;
3016         nl_table[NETLINK_USERSOCK].registered = 1;
3017         nl_table[NETLINK_USERSOCK].flags = NL_CFG_F_NONROOT_SEND;
3018
3019         netlink_table_ungrab();
3020 }
3021
3022 static struct pernet_operations __net_initdata netlink_net_ops = {
3023         .init = netlink_net_init,
3024         .exit = netlink_net_exit,
3025 };
3026
3027 static int __init netlink_proto_init(void)
3028 {
3029         int i;
3030         unsigned long limit;
3031         unsigned int order;
3032         int err = proto_register(&netlink_proto, 0);
3033
3034         if (err != 0)
3035                 goto out;
3036
3037         BUILD_BUG_ON(sizeof(struct netlink_skb_parms) > FIELD_SIZEOF(struct sk_buff, cb));
3038
3039         nl_table = kcalloc(MAX_LINKS, sizeof(*nl_table), GFP_KERNEL);
3040         if (!nl_table)
3041                 goto panic;
3042
3043         if (totalram_pages >= (128 * 1024))
3044                 limit = totalram_pages >> (21 - PAGE_SHIFT);
3045         else
3046                 limit = totalram_pages >> (23 - PAGE_SHIFT);
3047
3048         order = get_bitmask_order(limit) - 1 + PAGE_SHIFT;
3049         limit = (1UL << order) / sizeof(struct hlist_head);
3050         order = get_bitmask_order(min(limit, (unsigned long)UINT_MAX)) - 1;
3051
3052         for (i = 0; i < MAX_LINKS; i++) {
3053                 struct nl_portid_hash *hash = &nl_table[i].hash;
3054
3055                 hash->table = nl_portid_hash_zalloc(1 * sizeof(*hash->table));
3056                 if (!hash->table) {
3057                         while (i-- > 0)
3058                                 nl_portid_hash_free(nl_table[i].hash.table,
3059                                                  1 * sizeof(*hash->table));
3060                         kfree(nl_table);
3061                         goto panic;
3062                 }
3063                 hash->max_shift = order;
3064                 hash->shift = 0;
3065                 hash->mask = 0;
3066                 hash->rehash_time = jiffies;
3067
3068                 nl_table[i].compare = netlink_compare;
3069         }
3070
3071         INIT_LIST_HEAD(&netlink_tap_all);
3072
3073         netlink_add_usersock_entry();
3074
3075         sock_register(&netlink_family_ops);
3076         register_pernet_subsys(&netlink_net_ops);
3077         /* The netlink device handler may be needed early. */
3078         rtnetlink_init();
3079 out:
3080         return err;
3081 panic:
3082         panic("netlink_init: Cannot allocate nl_table\n");
3083 }
3084
3085 core_initcall(netlink_proto_init);