]> Pileus Git - ~andy/linux/blob - net/netlink/af_netlink.c
net: netlink: virtual tap device management
[~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, *ptr;
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] = ptr = 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 != NULL && 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_destroy_callback(struct netlink_callback *cb)
806 {
807         kfree_skb(cb->skb);
808         kfree(cb);
809 }
810
811 static void netlink_consume_callback(struct netlink_callback *cb)
812 {
813         consume_skb(cb->skb);
814         kfree(cb);
815 }
816
817 static void netlink_skb_destructor(struct sk_buff *skb)
818 {
819 #ifdef CONFIG_NETLINK_MMAP
820         struct nl_mmap_hdr *hdr;
821         struct netlink_ring *ring;
822         struct sock *sk;
823
824         /* If a packet from the kernel to userspace was freed because of an
825          * error without being delivered to userspace, the kernel must reset
826          * the status. In the direction userspace to kernel, the status is
827          * always reset here after the packet was processed and freed.
828          */
829         if (netlink_skb_is_mmaped(skb)) {
830                 hdr = netlink_mmap_hdr(skb);
831                 sk = NETLINK_CB(skb).sk;
832
833                 if (NETLINK_CB(skb).flags & NETLINK_SKB_TX) {
834                         netlink_set_status(hdr, NL_MMAP_STATUS_UNUSED);
835                         ring = &nlk_sk(sk)->tx_ring;
836                 } else {
837                         if (!(NETLINK_CB(skb).flags & NETLINK_SKB_DELIVERED)) {
838                                 hdr->nm_len = 0;
839                                 netlink_set_status(hdr, NL_MMAP_STATUS_VALID);
840                         }
841                         ring = &nlk_sk(sk)->rx_ring;
842                 }
843
844                 WARN_ON(atomic_read(&ring->pending) == 0);
845                 atomic_dec(&ring->pending);
846                 sock_put(sk);
847
848                 skb->head = NULL;
849         }
850 #endif
851         if (is_vmalloc_addr(skb->head)) {
852                 vfree(skb->head);
853                 skb->head = NULL;
854         }
855         if (skb->sk != NULL)
856                 sock_rfree(skb);
857 }
858
859 static void netlink_skb_set_owner_r(struct sk_buff *skb, struct sock *sk)
860 {
861         WARN_ON(skb->sk != NULL);
862         skb->sk = sk;
863         skb->destructor = netlink_skb_destructor;
864         atomic_add(skb->truesize, &sk->sk_rmem_alloc);
865         sk_mem_charge(sk, skb->truesize);
866 }
867
868 static void netlink_sock_destruct(struct sock *sk)
869 {
870         struct netlink_sock *nlk = nlk_sk(sk);
871
872         if (nlk->cb) {
873                 if (nlk->cb->done)
874                         nlk->cb->done(nlk->cb);
875
876                 module_put(nlk->cb->module);
877                 netlink_destroy_callback(nlk->cb);
878         }
879
880         skb_queue_purge(&sk->sk_receive_queue);
881 #ifdef CONFIG_NETLINK_MMAP
882         if (1) {
883                 struct nl_mmap_req req;
884
885                 memset(&req, 0, sizeof(req));
886                 if (nlk->rx_ring.pg_vec)
887                         netlink_set_ring(sk, &req, true, false);
888                 memset(&req, 0, sizeof(req));
889                 if (nlk->tx_ring.pg_vec)
890                         netlink_set_ring(sk, &req, true, true);
891         }
892 #endif /* CONFIG_NETLINK_MMAP */
893
894         if (!sock_flag(sk, SOCK_DEAD)) {
895                 printk(KERN_ERR "Freeing alive netlink socket %p\n", sk);
896                 return;
897         }
898
899         WARN_ON(atomic_read(&sk->sk_rmem_alloc));
900         WARN_ON(atomic_read(&sk->sk_wmem_alloc));
901         WARN_ON(nlk_sk(sk)->groups);
902 }
903
904 /* This lock without WQ_FLAG_EXCLUSIVE is good on UP and it is _very_ bad on
905  * SMP. Look, when several writers sleep and reader wakes them up, all but one
906  * immediately hit write lock and grab all the cpus. Exclusive sleep solves
907  * this, _but_ remember, it adds useless work on UP machines.
908  */
909
910 void netlink_table_grab(void)
911         __acquires(nl_table_lock)
912 {
913         might_sleep();
914
915         write_lock_irq(&nl_table_lock);
916
917         if (atomic_read(&nl_table_users)) {
918                 DECLARE_WAITQUEUE(wait, current);
919
920                 add_wait_queue_exclusive(&nl_table_wait, &wait);
921                 for (;;) {
922                         set_current_state(TASK_UNINTERRUPTIBLE);
923                         if (atomic_read(&nl_table_users) == 0)
924                                 break;
925                         write_unlock_irq(&nl_table_lock);
926                         schedule();
927                         write_lock_irq(&nl_table_lock);
928                 }
929
930                 __set_current_state(TASK_RUNNING);
931                 remove_wait_queue(&nl_table_wait, &wait);
932         }
933 }
934
935 void netlink_table_ungrab(void)
936         __releases(nl_table_lock)
937 {
938         write_unlock_irq(&nl_table_lock);
939         wake_up(&nl_table_wait);
940 }
941
942 static inline void
943 netlink_lock_table(void)
944 {
945         /* read_lock() synchronizes us to netlink_table_grab */
946
947         read_lock(&nl_table_lock);
948         atomic_inc(&nl_table_users);
949         read_unlock(&nl_table_lock);
950 }
951
952 static inline void
953 netlink_unlock_table(void)
954 {
955         if (atomic_dec_and_test(&nl_table_users))
956                 wake_up(&nl_table_wait);
957 }
958
959 static bool netlink_compare(struct net *net, struct sock *sk)
960 {
961         return net_eq(sock_net(sk), net);
962 }
963
964 static struct sock *netlink_lookup(struct net *net, int protocol, u32 portid)
965 {
966         struct netlink_table *table = &nl_table[protocol];
967         struct nl_portid_hash *hash = &table->hash;
968         struct hlist_head *head;
969         struct sock *sk;
970
971         read_lock(&nl_table_lock);
972         head = nl_portid_hashfn(hash, portid);
973         sk_for_each(sk, head) {
974                 if (table->compare(net, sk) &&
975                     (nlk_sk(sk)->portid == portid)) {
976                         sock_hold(sk);
977                         goto found;
978                 }
979         }
980         sk = NULL;
981 found:
982         read_unlock(&nl_table_lock);
983         return sk;
984 }
985
986 static struct hlist_head *nl_portid_hash_zalloc(size_t size)
987 {
988         if (size <= PAGE_SIZE)
989                 return kzalloc(size, GFP_ATOMIC);
990         else
991                 return (struct hlist_head *)
992                         __get_free_pages(GFP_ATOMIC | __GFP_ZERO,
993                                          get_order(size));
994 }
995
996 static void nl_portid_hash_free(struct hlist_head *table, size_t size)
997 {
998         if (size <= PAGE_SIZE)
999                 kfree(table);
1000         else
1001                 free_pages((unsigned long)table, get_order(size));
1002 }
1003
1004 static int nl_portid_hash_rehash(struct nl_portid_hash *hash, int grow)
1005 {
1006         unsigned int omask, mask, shift;
1007         size_t osize, size;
1008         struct hlist_head *otable, *table;
1009         int i;
1010
1011         omask = mask = hash->mask;
1012         osize = size = (mask + 1) * sizeof(*table);
1013         shift = hash->shift;
1014
1015         if (grow) {
1016                 if (++shift > hash->max_shift)
1017                         return 0;
1018                 mask = mask * 2 + 1;
1019                 size *= 2;
1020         }
1021
1022         table = nl_portid_hash_zalloc(size);
1023         if (!table)
1024                 return 0;
1025
1026         otable = hash->table;
1027         hash->table = table;
1028         hash->mask = mask;
1029         hash->shift = shift;
1030         get_random_bytes(&hash->rnd, sizeof(hash->rnd));
1031
1032         for (i = 0; i <= omask; i++) {
1033                 struct sock *sk;
1034                 struct hlist_node *tmp;
1035
1036                 sk_for_each_safe(sk, tmp, &otable[i])
1037                         __sk_add_node(sk, nl_portid_hashfn(hash, nlk_sk(sk)->portid));
1038         }
1039
1040         nl_portid_hash_free(otable, osize);
1041         hash->rehash_time = jiffies + 10 * 60 * HZ;
1042         return 1;
1043 }
1044
1045 static inline int nl_portid_hash_dilute(struct nl_portid_hash *hash, int len)
1046 {
1047         int avg = hash->entries >> hash->shift;
1048
1049         if (unlikely(avg > 1) && nl_portid_hash_rehash(hash, 1))
1050                 return 1;
1051
1052         if (unlikely(len > avg) && time_after(jiffies, hash->rehash_time)) {
1053                 nl_portid_hash_rehash(hash, 0);
1054                 return 1;
1055         }
1056
1057         return 0;
1058 }
1059
1060 static const struct proto_ops netlink_ops;
1061
1062 static void
1063 netlink_update_listeners(struct sock *sk)
1064 {
1065         struct netlink_table *tbl = &nl_table[sk->sk_protocol];
1066         unsigned long mask;
1067         unsigned int i;
1068         struct listeners *listeners;
1069
1070         listeners = nl_deref_protected(tbl->listeners);
1071         if (!listeners)
1072                 return;
1073
1074         for (i = 0; i < NLGRPLONGS(tbl->groups); i++) {
1075                 mask = 0;
1076                 sk_for_each_bound(sk, &tbl->mc_list) {
1077                         if (i < NLGRPLONGS(nlk_sk(sk)->ngroups))
1078                                 mask |= nlk_sk(sk)->groups[i];
1079                 }
1080                 listeners->masks[i] = mask;
1081         }
1082         /* this function is only called with the netlink table "grabbed", which
1083          * makes sure updates are visible before bind or setsockopt return. */
1084 }
1085
1086 static int netlink_insert(struct sock *sk, struct net *net, u32 portid)
1087 {
1088         struct netlink_table *table = &nl_table[sk->sk_protocol];
1089         struct nl_portid_hash *hash = &table->hash;
1090         struct hlist_head *head;
1091         int err = -EADDRINUSE;
1092         struct sock *osk;
1093         int len;
1094
1095         netlink_table_grab();
1096         head = nl_portid_hashfn(hash, portid);
1097         len = 0;
1098         sk_for_each(osk, head) {
1099                 if (table->compare(net, osk) &&
1100                     (nlk_sk(osk)->portid == portid))
1101                         break;
1102                 len++;
1103         }
1104         if (osk)
1105                 goto err;
1106
1107         err = -EBUSY;
1108         if (nlk_sk(sk)->portid)
1109                 goto err;
1110
1111         err = -ENOMEM;
1112         if (BITS_PER_LONG > 32 && unlikely(hash->entries >= UINT_MAX))
1113                 goto err;
1114
1115         if (len && nl_portid_hash_dilute(hash, len))
1116                 head = nl_portid_hashfn(hash, portid);
1117         hash->entries++;
1118         nlk_sk(sk)->portid = portid;
1119         sk_add_node(sk, head);
1120         err = 0;
1121
1122 err:
1123         netlink_table_ungrab();
1124         return err;
1125 }
1126
1127 static void netlink_remove(struct sock *sk)
1128 {
1129         netlink_table_grab();
1130         if (sk_del_node_init(sk))
1131                 nl_table[sk->sk_protocol].hash.entries--;
1132         if (nlk_sk(sk)->subscriptions)
1133                 __sk_del_bind_node(sk);
1134         netlink_table_ungrab();
1135 }
1136
1137 static struct proto netlink_proto = {
1138         .name     = "NETLINK",
1139         .owner    = THIS_MODULE,
1140         .obj_size = sizeof(struct netlink_sock),
1141 };
1142
1143 static int __netlink_create(struct net *net, struct socket *sock,
1144                             struct mutex *cb_mutex, int protocol)
1145 {
1146         struct sock *sk;
1147         struct netlink_sock *nlk;
1148
1149         sock->ops = &netlink_ops;
1150
1151         sk = sk_alloc(net, PF_NETLINK, GFP_KERNEL, &netlink_proto);
1152         if (!sk)
1153                 return -ENOMEM;
1154
1155         sock_init_data(sock, sk);
1156
1157         nlk = nlk_sk(sk);
1158         if (cb_mutex) {
1159                 nlk->cb_mutex = cb_mutex;
1160         } else {
1161                 nlk->cb_mutex = &nlk->cb_def_mutex;
1162                 mutex_init(nlk->cb_mutex);
1163         }
1164         init_waitqueue_head(&nlk->wait);
1165 #ifdef CONFIG_NETLINK_MMAP
1166         mutex_init(&nlk->pg_vec_lock);
1167 #endif
1168
1169         sk->sk_destruct = netlink_sock_destruct;
1170         sk->sk_protocol = protocol;
1171         return 0;
1172 }
1173
1174 static int netlink_create(struct net *net, struct socket *sock, int protocol,
1175                           int kern)
1176 {
1177         struct module *module = NULL;
1178         struct mutex *cb_mutex;
1179         struct netlink_sock *nlk;
1180         void (*bind)(int group);
1181         int err = 0;
1182
1183         sock->state = SS_UNCONNECTED;
1184
1185         if (sock->type != SOCK_RAW && sock->type != SOCK_DGRAM)
1186                 return -ESOCKTNOSUPPORT;
1187
1188         if (protocol < 0 || protocol >= MAX_LINKS)
1189                 return -EPROTONOSUPPORT;
1190
1191         netlink_lock_table();
1192 #ifdef CONFIG_MODULES
1193         if (!nl_table[protocol].registered) {
1194                 netlink_unlock_table();
1195                 request_module("net-pf-%d-proto-%d", PF_NETLINK, protocol);
1196                 netlink_lock_table();
1197         }
1198 #endif
1199         if (nl_table[protocol].registered &&
1200             try_module_get(nl_table[protocol].module))
1201                 module = nl_table[protocol].module;
1202         else
1203                 err = -EPROTONOSUPPORT;
1204         cb_mutex = nl_table[protocol].cb_mutex;
1205         bind = nl_table[protocol].bind;
1206         netlink_unlock_table();
1207
1208         if (err < 0)
1209                 goto out;
1210
1211         err = __netlink_create(net, sock, cb_mutex, protocol);
1212         if (err < 0)
1213                 goto out_module;
1214
1215         local_bh_disable();
1216         sock_prot_inuse_add(net, &netlink_proto, 1);
1217         local_bh_enable();
1218
1219         nlk = nlk_sk(sock->sk);
1220         nlk->module = module;
1221         nlk->netlink_bind = bind;
1222 out:
1223         return err;
1224
1225 out_module:
1226         module_put(module);
1227         goto out;
1228 }
1229
1230 static int netlink_release(struct socket *sock)
1231 {
1232         struct sock *sk = sock->sk;
1233         struct netlink_sock *nlk;
1234
1235         if (!sk)
1236                 return 0;
1237
1238         netlink_remove(sk);
1239         sock_orphan(sk);
1240         nlk = nlk_sk(sk);
1241
1242         /*
1243          * OK. Socket is unlinked, any packets that arrive now
1244          * will be purged.
1245          */
1246
1247         sock->sk = NULL;
1248         wake_up_interruptible_all(&nlk->wait);
1249
1250         skb_queue_purge(&sk->sk_write_queue);
1251
1252         if (nlk->portid) {
1253                 struct netlink_notify n = {
1254                                                 .net = sock_net(sk),
1255                                                 .protocol = sk->sk_protocol,
1256                                                 .portid = nlk->portid,
1257                                           };
1258                 atomic_notifier_call_chain(&netlink_chain,
1259                                 NETLINK_URELEASE, &n);
1260         }
1261
1262         module_put(nlk->module);
1263
1264         netlink_table_grab();
1265         if (netlink_is_kernel(sk)) {
1266                 BUG_ON(nl_table[sk->sk_protocol].registered == 0);
1267                 if (--nl_table[sk->sk_protocol].registered == 0) {
1268                         struct listeners *old;
1269
1270                         old = nl_deref_protected(nl_table[sk->sk_protocol].listeners);
1271                         RCU_INIT_POINTER(nl_table[sk->sk_protocol].listeners, NULL);
1272                         kfree_rcu(old, rcu);
1273                         nl_table[sk->sk_protocol].module = NULL;
1274                         nl_table[sk->sk_protocol].bind = NULL;
1275                         nl_table[sk->sk_protocol].flags = 0;
1276                         nl_table[sk->sk_protocol].registered = 0;
1277                 }
1278         } else if (nlk->subscriptions) {
1279                 netlink_update_listeners(sk);
1280         }
1281         netlink_table_ungrab();
1282
1283         kfree(nlk->groups);
1284         nlk->groups = NULL;
1285
1286         local_bh_disable();
1287         sock_prot_inuse_add(sock_net(sk), &netlink_proto, -1);
1288         local_bh_enable();
1289         sock_put(sk);
1290         return 0;
1291 }
1292
1293 static int netlink_autobind(struct socket *sock)
1294 {
1295         struct sock *sk = sock->sk;
1296         struct net *net = sock_net(sk);
1297         struct netlink_table *table = &nl_table[sk->sk_protocol];
1298         struct nl_portid_hash *hash = &table->hash;
1299         struct hlist_head *head;
1300         struct sock *osk;
1301         s32 portid = task_tgid_vnr(current);
1302         int err;
1303         static s32 rover = -4097;
1304
1305 retry:
1306         cond_resched();
1307         netlink_table_grab();
1308         head = nl_portid_hashfn(hash, portid);
1309         sk_for_each(osk, head) {
1310                 if (!table->compare(net, osk))
1311                         continue;
1312                 if (nlk_sk(osk)->portid == portid) {
1313                         /* Bind collision, search negative portid values. */
1314                         portid = rover--;
1315                         if (rover > -4097)
1316                                 rover = -4097;
1317                         netlink_table_ungrab();
1318                         goto retry;
1319                 }
1320         }
1321         netlink_table_ungrab();
1322
1323         err = netlink_insert(sk, net, portid);
1324         if (err == -EADDRINUSE)
1325                 goto retry;
1326
1327         /* If 2 threads race to autobind, that is fine.  */
1328         if (err == -EBUSY)
1329                 err = 0;
1330
1331         return err;
1332 }
1333
1334 static inline int netlink_capable(const struct socket *sock, unsigned int flag)
1335 {
1336         return (nl_table[sock->sk->sk_protocol].flags & flag) ||
1337                 ns_capable(sock_net(sock->sk)->user_ns, CAP_NET_ADMIN);
1338 }
1339
1340 static void
1341 netlink_update_subscriptions(struct sock *sk, unsigned int subscriptions)
1342 {
1343         struct netlink_sock *nlk = nlk_sk(sk);
1344
1345         if (nlk->subscriptions && !subscriptions)
1346                 __sk_del_bind_node(sk);
1347         else if (!nlk->subscriptions && subscriptions)
1348                 sk_add_bind_node(sk, &nl_table[sk->sk_protocol].mc_list);
1349         nlk->subscriptions = subscriptions;
1350 }
1351
1352 static int netlink_realloc_groups(struct sock *sk)
1353 {
1354         struct netlink_sock *nlk = nlk_sk(sk);
1355         unsigned int groups;
1356         unsigned long *new_groups;
1357         int err = 0;
1358
1359         netlink_table_grab();
1360
1361         groups = nl_table[sk->sk_protocol].groups;
1362         if (!nl_table[sk->sk_protocol].registered) {
1363                 err = -ENOENT;
1364                 goto out_unlock;
1365         }
1366
1367         if (nlk->ngroups >= groups)
1368                 goto out_unlock;
1369
1370         new_groups = krealloc(nlk->groups, NLGRPSZ(groups), GFP_ATOMIC);
1371         if (new_groups == NULL) {
1372                 err = -ENOMEM;
1373                 goto out_unlock;
1374         }
1375         memset((char *)new_groups + NLGRPSZ(nlk->ngroups), 0,
1376                NLGRPSZ(groups) - NLGRPSZ(nlk->ngroups));
1377
1378         nlk->groups = new_groups;
1379         nlk->ngroups = groups;
1380  out_unlock:
1381         netlink_table_ungrab();
1382         return err;
1383 }
1384
1385 static int netlink_bind(struct socket *sock, struct sockaddr *addr,
1386                         int addr_len)
1387 {
1388         struct sock *sk = sock->sk;
1389         struct net *net = sock_net(sk);
1390         struct netlink_sock *nlk = nlk_sk(sk);
1391         struct sockaddr_nl *nladdr = (struct sockaddr_nl *)addr;
1392         int err;
1393
1394         if (addr_len < sizeof(struct sockaddr_nl))
1395                 return -EINVAL;
1396
1397         if (nladdr->nl_family != AF_NETLINK)
1398                 return -EINVAL;
1399
1400         /* Only superuser is allowed to listen multicasts */
1401         if (nladdr->nl_groups) {
1402                 if (!netlink_capable(sock, NL_CFG_F_NONROOT_RECV))
1403                         return -EPERM;
1404                 err = netlink_realloc_groups(sk);
1405                 if (err)
1406                         return err;
1407         }
1408
1409         if (nlk->portid) {
1410                 if (nladdr->nl_pid != nlk->portid)
1411                         return -EINVAL;
1412         } else {
1413                 err = nladdr->nl_pid ?
1414                         netlink_insert(sk, net, nladdr->nl_pid) :
1415                         netlink_autobind(sock);
1416                 if (err)
1417                         return err;
1418         }
1419
1420         if (!nladdr->nl_groups && (nlk->groups == NULL || !(u32)nlk->groups[0]))
1421                 return 0;
1422
1423         netlink_table_grab();
1424         netlink_update_subscriptions(sk, nlk->subscriptions +
1425                                          hweight32(nladdr->nl_groups) -
1426                                          hweight32(nlk->groups[0]));
1427         nlk->groups[0] = (nlk->groups[0] & ~0xffffffffUL) | nladdr->nl_groups;
1428         netlink_update_listeners(sk);
1429         netlink_table_ungrab();
1430
1431         if (nlk->netlink_bind && nlk->groups[0]) {
1432                 int i;
1433
1434                 for (i=0; i<nlk->ngroups; i++) {
1435                         if (test_bit(i, nlk->groups))
1436                                 nlk->netlink_bind(i);
1437                 }
1438         }
1439
1440         return 0;
1441 }
1442
1443 static int netlink_connect(struct socket *sock, struct sockaddr *addr,
1444                            int alen, int flags)
1445 {
1446         int err = 0;
1447         struct sock *sk = sock->sk;
1448         struct netlink_sock *nlk = nlk_sk(sk);
1449         struct sockaddr_nl *nladdr = (struct sockaddr_nl *)addr;
1450
1451         if (alen < sizeof(addr->sa_family))
1452                 return -EINVAL;
1453
1454         if (addr->sa_family == AF_UNSPEC) {
1455                 sk->sk_state    = NETLINK_UNCONNECTED;
1456                 nlk->dst_portid = 0;
1457                 nlk->dst_group  = 0;
1458                 return 0;
1459         }
1460         if (addr->sa_family != AF_NETLINK)
1461                 return -EINVAL;
1462
1463         /* Only superuser is allowed to send multicasts */
1464         if (nladdr->nl_groups && !netlink_capable(sock, NL_CFG_F_NONROOT_SEND))
1465                 return -EPERM;
1466
1467         if (!nlk->portid)
1468                 err = netlink_autobind(sock);
1469
1470         if (err == 0) {
1471                 sk->sk_state    = NETLINK_CONNECTED;
1472                 nlk->dst_portid = nladdr->nl_pid;
1473                 nlk->dst_group  = ffs(nladdr->nl_groups);
1474         }
1475
1476         return err;
1477 }
1478
1479 static int netlink_getname(struct socket *sock, struct sockaddr *addr,
1480                            int *addr_len, int peer)
1481 {
1482         struct sock *sk = sock->sk;
1483         struct netlink_sock *nlk = nlk_sk(sk);
1484         DECLARE_SOCKADDR(struct sockaddr_nl *, nladdr, addr);
1485
1486         nladdr->nl_family = AF_NETLINK;
1487         nladdr->nl_pad = 0;
1488         *addr_len = sizeof(*nladdr);
1489
1490         if (peer) {
1491                 nladdr->nl_pid = nlk->dst_portid;
1492                 nladdr->nl_groups = netlink_group_mask(nlk->dst_group);
1493         } else {
1494                 nladdr->nl_pid = nlk->portid;
1495                 nladdr->nl_groups = nlk->groups ? nlk->groups[0] : 0;
1496         }
1497         return 0;
1498 }
1499
1500 static struct sock *netlink_getsockbyportid(struct sock *ssk, u32 portid)
1501 {
1502         struct sock *sock;
1503         struct netlink_sock *nlk;
1504
1505         sock = netlink_lookup(sock_net(ssk), ssk->sk_protocol, portid);
1506         if (!sock)
1507                 return ERR_PTR(-ECONNREFUSED);
1508
1509         /* Don't bother queuing skb if kernel socket has no input function */
1510         nlk = nlk_sk(sock);
1511         if (sock->sk_state == NETLINK_CONNECTED &&
1512             nlk->dst_portid != nlk_sk(ssk)->portid) {
1513                 sock_put(sock);
1514                 return ERR_PTR(-ECONNREFUSED);
1515         }
1516         return sock;
1517 }
1518
1519 struct sock *netlink_getsockbyfilp(struct file *filp)
1520 {
1521         struct inode *inode = file_inode(filp);
1522         struct sock *sock;
1523
1524         if (!S_ISSOCK(inode->i_mode))
1525                 return ERR_PTR(-ENOTSOCK);
1526
1527         sock = SOCKET_I(inode)->sk;
1528         if (sock->sk_family != AF_NETLINK)
1529                 return ERR_PTR(-EINVAL);
1530
1531         sock_hold(sock);
1532         return sock;
1533 }
1534
1535 static struct sk_buff *netlink_alloc_large_skb(unsigned int size)
1536 {
1537         struct sk_buff *skb;
1538         void *data;
1539
1540         if (size <= NLMSG_GOODSIZE)
1541                 return alloc_skb(size, GFP_KERNEL);
1542
1543         skb = alloc_skb_head(GFP_KERNEL);
1544         if (skb == NULL)
1545                 return NULL;
1546
1547         data = vmalloc(size);
1548         if (data == NULL)
1549                 goto err;
1550
1551         skb->head       = data;
1552         skb->data       = data;
1553         skb_reset_tail_pointer(skb);
1554         skb->end        = skb->tail + size;
1555         skb->len        = 0;
1556         skb->destructor = netlink_skb_destructor;
1557
1558         return skb;
1559 err:
1560         kfree_skb(skb);
1561         return NULL;
1562 }
1563
1564 /*
1565  * Attach a skb to a netlink socket.
1566  * The caller must hold a reference to the destination socket. On error, the
1567  * reference is dropped. The skb is not send to the destination, just all
1568  * all error checks are performed and memory in the queue is reserved.
1569  * Return values:
1570  * < 0: error. skb freed, reference to sock dropped.
1571  * 0: continue
1572  * 1: repeat lookup - reference dropped while waiting for socket memory.
1573  */
1574 int netlink_attachskb(struct sock *sk, struct sk_buff *skb,
1575                       long *timeo, struct sock *ssk)
1576 {
1577         struct netlink_sock *nlk;
1578
1579         nlk = nlk_sk(sk);
1580
1581         if ((atomic_read(&sk->sk_rmem_alloc) > sk->sk_rcvbuf ||
1582              test_bit(NETLINK_CONGESTED, &nlk->state)) &&
1583             !netlink_skb_is_mmaped(skb)) {
1584                 DECLARE_WAITQUEUE(wait, current);
1585                 if (!*timeo) {
1586                         if (!ssk || netlink_is_kernel(ssk))
1587                                 netlink_overrun(sk);
1588                         sock_put(sk);
1589                         kfree_skb(skb);
1590                         return -EAGAIN;
1591                 }
1592
1593                 __set_current_state(TASK_INTERRUPTIBLE);
1594                 add_wait_queue(&nlk->wait, &wait);
1595
1596                 if ((atomic_read(&sk->sk_rmem_alloc) > sk->sk_rcvbuf ||
1597                      test_bit(NETLINK_CONGESTED, &nlk->state)) &&
1598                     !sock_flag(sk, SOCK_DEAD))
1599                         *timeo = schedule_timeout(*timeo);
1600
1601                 __set_current_state(TASK_RUNNING);
1602                 remove_wait_queue(&nlk->wait, &wait);
1603                 sock_put(sk);
1604
1605                 if (signal_pending(current)) {
1606                         kfree_skb(skb);
1607                         return sock_intr_errno(*timeo);
1608                 }
1609                 return 1;
1610         }
1611         netlink_skb_set_owner_r(skb, sk);
1612         return 0;
1613 }
1614
1615 static int __netlink_sendskb(struct sock *sk, struct sk_buff *skb)
1616 {
1617         int len = skb->len;
1618
1619         netlink_deliver_tap(skb);
1620
1621 #ifdef CONFIG_NETLINK_MMAP
1622         if (netlink_skb_is_mmaped(skb))
1623                 netlink_queue_mmaped_skb(sk, skb);
1624         else if (netlink_rx_is_mmaped(sk))
1625                 netlink_ring_set_copied(sk, skb);
1626         else
1627 #endif /* CONFIG_NETLINK_MMAP */
1628                 skb_queue_tail(&sk->sk_receive_queue, skb);
1629         sk->sk_data_ready(sk, len);
1630         return len;
1631 }
1632
1633 int netlink_sendskb(struct sock *sk, struct sk_buff *skb)
1634 {
1635         int len = __netlink_sendskb(sk, skb);
1636
1637         sock_put(sk);
1638         return len;
1639 }
1640
1641 void netlink_detachskb(struct sock *sk, struct sk_buff *skb)
1642 {
1643         kfree_skb(skb);
1644         sock_put(sk);
1645 }
1646
1647 static struct sk_buff *netlink_trim(struct sk_buff *skb, gfp_t allocation)
1648 {
1649         int delta;
1650
1651         WARN_ON(skb->sk != NULL);
1652         if (netlink_skb_is_mmaped(skb))
1653                 return skb;
1654
1655         delta = skb->end - skb->tail;
1656         if (is_vmalloc_addr(skb->head) || delta * 2 < skb->truesize)
1657                 return skb;
1658
1659         if (skb_shared(skb)) {
1660                 struct sk_buff *nskb = skb_clone(skb, allocation);
1661                 if (!nskb)
1662                         return skb;
1663                 consume_skb(skb);
1664                 skb = nskb;
1665         }
1666
1667         if (!pskb_expand_head(skb, 0, -delta, allocation))
1668                 skb->truesize -= delta;
1669
1670         return skb;
1671 }
1672
1673 static int netlink_unicast_kernel(struct sock *sk, struct sk_buff *skb,
1674                                   struct sock *ssk)
1675 {
1676         int ret;
1677         struct netlink_sock *nlk = nlk_sk(sk);
1678
1679         ret = -ECONNREFUSED;
1680         if (nlk->netlink_rcv != NULL) {
1681                 /* We could do a netlink_deliver_tap(skb) here as well
1682                  * but since this is intended for the kernel only, we
1683                  * should rather let it stay under the hood.
1684                  */
1685
1686                 ret = skb->len;
1687                 netlink_skb_set_owner_r(skb, sk);
1688                 NETLINK_CB(skb).sk = ssk;
1689                 nlk->netlink_rcv(skb);
1690                 consume_skb(skb);
1691         } else {
1692                 kfree_skb(skb);
1693         }
1694         sock_put(sk);
1695         return ret;
1696 }
1697
1698 int netlink_unicast(struct sock *ssk, struct sk_buff *skb,
1699                     u32 portid, int nonblock)
1700 {
1701         struct sock *sk;
1702         int err;
1703         long timeo;
1704
1705         skb = netlink_trim(skb, gfp_any());
1706
1707         timeo = sock_sndtimeo(ssk, nonblock);
1708 retry:
1709         sk = netlink_getsockbyportid(ssk, portid);
1710         if (IS_ERR(sk)) {
1711                 kfree_skb(skb);
1712                 return PTR_ERR(sk);
1713         }
1714         if (netlink_is_kernel(sk))
1715                 return netlink_unicast_kernel(sk, skb, ssk);
1716
1717         if (sk_filter(sk, skb)) {
1718                 err = skb->len;
1719                 kfree_skb(skb);
1720                 sock_put(sk);
1721                 return err;
1722         }
1723
1724         err = netlink_attachskb(sk, skb, &timeo, ssk);
1725         if (err == 1)
1726                 goto retry;
1727         if (err)
1728                 return err;
1729
1730         return netlink_sendskb(sk, skb);
1731 }
1732 EXPORT_SYMBOL(netlink_unicast);
1733
1734 struct sk_buff *netlink_alloc_skb(struct sock *ssk, unsigned int size,
1735                                   u32 dst_portid, gfp_t gfp_mask)
1736 {
1737 #ifdef CONFIG_NETLINK_MMAP
1738         struct sock *sk = NULL;
1739         struct sk_buff *skb;
1740         struct netlink_ring *ring;
1741         struct nl_mmap_hdr *hdr;
1742         unsigned int maxlen;
1743
1744         sk = netlink_getsockbyportid(ssk, dst_portid);
1745         if (IS_ERR(sk))
1746                 goto out;
1747
1748         ring = &nlk_sk(sk)->rx_ring;
1749         /* fast-path without atomic ops for common case: non-mmaped receiver */
1750         if (ring->pg_vec == NULL)
1751                 goto out_put;
1752
1753         skb = alloc_skb_head(gfp_mask);
1754         if (skb == NULL)
1755                 goto err1;
1756
1757         spin_lock_bh(&sk->sk_receive_queue.lock);
1758         /* check again under lock */
1759         if (ring->pg_vec == NULL)
1760                 goto out_free;
1761
1762         maxlen = ring->frame_size - NL_MMAP_HDRLEN;
1763         if (maxlen < size)
1764                 goto out_free;
1765
1766         netlink_forward_ring(ring);
1767         hdr = netlink_current_frame(ring, NL_MMAP_STATUS_UNUSED);
1768         if (hdr == NULL)
1769                 goto err2;
1770         netlink_ring_setup_skb(skb, sk, ring, hdr);
1771         netlink_set_status(hdr, NL_MMAP_STATUS_RESERVED);
1772         atomic_inc(&ring->pending);
1773         netlink_increment_head(ring);
1774
1775         spin_unlock_bh(&sk->sk_receive_queue.lock);
1776         return skb;
1777
1778 err2:
1779         kfree_skb(skb);
1780         spin_unlock_bh(&sk->sk_receive_queue.lock);
1781         netlink_overrun(sk);
1782 err1:
1783         sock_put(sk);
1784         return NULL;
1785
1786 out_free:
1787         kfree_skb(skb);
1788         spin_unlock_bh(&sk->sk_receive_queue.lock);
1789 out_put:
1790         sock_put(sk);
1791 out:
1792 #endif
1793         return alloc_skb(size, gfp_mask);
1794 }
1795 EXPORT_SYMBOL_GPL(netlink_alloc_skb);
1796
1797 int netlink_has_listeners(struct sock *sk, unsigned int group)
1798 {
1799         int res = 0;
1800         struct listeners *listeners;
1801
1802         BUG_ON(!netlink_is_kernel(sk));
1803
1804         rcu_read_lock();
1805         listeners = rcu_dereference(nl_table[sk->sk_protocol].listeners);
1806
1807         if (listeners && group - 1 < nl_table[sk->sk_protocol].groups)
1808                 res = test_bit(group - 1, listeners->masks);
1809
1810         rcu_read_unlock();
1811
1812         return res;
1813 }
1814 EXPORT_SYMBOL_GPL(netlink_has_listeners);
1815
1816 static int netlink_broadcast_deliver(struct sock *sk, struct sk_buff *skb)
1817 {
1818         struct netlink_sock *nlk = nlk_sk(sk);
1819
1820         if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf &&
1821             !test_bit(NETLINK_CONGESTED, &nlk->state)) {
1822                 netlink_skb_set_owner_r(skb, sk);
1823                 __netlink_sendskb(sk, skb);
1824                 return atomic_read(&sk->sk_rmem_alloc) > (sk->sk_rcvbuf >> 1);
1825         }
1826         return -1;
1827 }
1828
1829 struct netlink_broadcast_data {
1830         struct sock *exclude_sk;
1831         struct net *net;
1832         u32 portid;
1833         u32 group;
1834         int failure;
1835         int delivery_failure;
1836         int congested;
1837         int delivered;
1838         gfp_t allocation;
1839         struct sk_buff *skb, *skb2;
1840         int (*tx_filter)(struct sock *dsk, struct sk_buff *skb, void *data);
1841         void *tx_data;
1842 };
1843
1844 static int do_one_broadcast(struct sock *sk,
1845                                    struct netlink_broadcast_data *p)
1846 {
1847         struct netlink_sock *nlk = nlk_sk(sk);
1848         int val;
1849
1850         if (p->exclude_sk == sk)
1851                 goto out;
1852
1853         if (nlk->portid == p->portid || p->group - 1 >= nlk->ngroups ||
1854             !test_bit(p->group - 1, nlk->groups))
1855                 goto out;
1856
1857         if (!net_eq(sock_net(sk), p->net))
1858                 goto out;
1859
1860         if (p->failure) {
1861                 netlink_overrun(sk);
1862                 goto out;
1863         }
1864
1865         sock_hold(sk);
1866         if (p->skb2 == NULL) {
1867                 if (skb_shared(p->skb)) {
1868                         p->skb2 = skb_clone(p->skb, p->allocation);
1869                 } else {
1870                         p->skb2 = skb_get(p->skb);
1871                         /*
1872                          * skb ownership may have been set when
1873                          * delivered to a previous socket.
1874                          */
1875                         skb_orphan(p->skb2);
1876                 }
1877         }
1878         if (p->skb2 == NULL) {
1879                 netlink_overrun(sk);
1880                 /* Clone failed. Notify ALL listeners. */
1881                 p->failure = 1;
1882                 if (nlk->flags & NETLINK_BROADCAST_SEND_ERROR)
1883                         p->delivery_failure = 1;
1884         } else if (p->tx_filter && p->tx_filter(sk, p->skb2, p->tx_data)) {
1885                 kfree_skb(p->skb2);
1886                 p->skb2 = NULL;
1887         } else if (sk_filter(sk, p->skb2)) {
1888                 kfree_skb(p->skb2);
1889                 p->skb2 = NULL;
1890         } else if ((val = netlink_broadcast_deliver(sk, p->skb2)) < 0) {
1891                 netlink_overrun(sk);
1892                 if (nlk->flags & NETLINK_BROADCAST_SEND_ERROR)
1893                         p->delivery_failure = 1;
1894         } else {
1895                 p->congested |= val;
1896                 p->delivered = 1;
1897                 p->skb2 = NULL;
1898         }
1899         sock_put(sk);
1900
1901 out:
1902         return 0;
1903 }
1904
1905 int netlink_broadcast_filtered(struct sock *ssk, struct sk_buff *skb, u32 portid,
1906         u32 group, gfp_t allocation,
1907         int (*filter)(struct sock *dsk, struct sk_buff *skb, void *data),
1908         void *filter_data)
1909 {
1910         struct net *net = sock_net(ssk);
1911         struct netlink_broadcast_data info;
1912         struct sock *sk;
1913
1914         skb = netlink_trim(skb, allocation);
1915
1916         info.exclude_sk = ssk;
1917         info.net = net;
1918         info.portid = portid;
1919         info.group = group;
1920         info.failure = 0;
1921         info.delivery_failure = 0;
1922         info.congested = 0;
1923         info.delivered = 0;
1924         info.allocation = allocation;
1925         info.skb = skb;
1926         info.skb2 = NULL;
1927         info.tx_filter = filter;
1928         info.tx_data = filter_data;
1929
1930         /* While we sleep in clone, do not allow to change socket list */
1931
1932         netlink_lock_table();
1933
1934         sk_for_each_bound(sk, &nl_table[ssk->sk_protocol].mc_list)
1935                 do_one_broadcast(sk, &info);
1936
1937         consume_skb(skb);
1938
1939         netlink_unlock_table();
1940
1941         if (info.delivery_failure) {
1942                 kfree_skb(info.skb2);
1943                 return -ENOBUFS;
1944         }
1945         consume_skb(info.skb2);
1946
1947         if (info.delivered) {
1948                 if (info.congested && (allocation & __GFP_WAIT))
1949                         yield();
1950                 return 0;
1951         }
1952         return -ESRCH;
1953 }
1954 EXPORT_SYMBOL(netlink_broadcast_filtered);
1955
1956 int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, u32 portid,
1957                       u32 group, gfp_t allocation)
1958 {
1959         return netlink_broadcast_filtered(ssk, skb, portid, group, allocation,
1960                 NULL, NULL);
1961 }
1962 EXPORT_SYMBOL(netlink_broadcast);
1963
1964 struct netlink_set_err_data {
1965         struct sock *exclude_sk;
1966         u32 portid;
1967         u32 group;
1968         int code;
1969 };
1970
1971 static int do_one_set_err(struct sock *sk, struct netlink_set_err_data *p)
1972 {
1973         struct netlink_sock *nlk = nlk_sk(sk);
1974         int ret = 0;
1975
1976         if (sk == p->exclude_sk)
1977                 goto out;
1978
1979         if (!net_eq(sock_net(sk), sock_net(p->exclude_sk)))
1980                 goto out;
1981
1982         if (nlk->portid == p->portid || p->group - 1 >= nlk->ngroups ||
1983             !test_bit(p->group - 1, nlk->groups))
1984                 goto out;
1985
1986         if (p->code == ENOBUFS && nlk->flags & NETLINK_RECV_NO_ENOBUFS) {
1987                 ret = 1;
1988                 goto out;
1989         }
1990
1991         sk->sk_err = p->code;
1992         sk->sk_error_report(sk);
1993 out:
1994         return ret;
1995 }
1996
1997 /**
1998  * netlink_set_err - report error to broadcast listeners
1999  * @ssk: the kernel netlink socket, as returned by netlink_kernel_create()
2000  * @portid: the PORTID of a process that we want to skip (if any)
2001  * @groups: the broadcast group that will notice the error
2002  * @code: error code, must be negative (as usual in kernelspace)
2003  *
2004  * This function returns the number of broadcast listeners that have set the
2005  * NETLINK_RECV_NO_ENOBUFS socket option.
2006  */
2007 int netlink_set_err(struct sock *ssk, u32 portid, u32 group, int code)
2008 {
2009         struct netlink_set_err_data info;
2010         struct sock *sk;
2011         int ret = 0;
2012
2013         info.exclude_sk = ssk;
2014         info.portid = portid;
2015         info.group = group;
2016         /* sk->sk_err wants a positive error value */
2017         info.code = -code;
2018
2019         read_lock(&nl_table_lock);
2020
2021         sk_for_each_bound(sk, &nl_table[ssk->sk_protocol].mc_list)
2022                 ret += do_one_set_err(sk, &info);
2023
2024         read_unlock(&nl_table_lock);
2025         return ret;
2026 }
2027 EXPORT_SYMBOL(netlink_set_err);
2028
2029 /* must be called with netlink table grabbed */
2030 static void netlink_update_socket_mc(struct netlink_sock *nlk,
2031                                      unsigned int group,
2032                                      int is_new)
2033 {
2034         int old, new = !!is_new, subscriptions;
2035
2036         old = test_bit(group - 1, nlk->groups);
2037         subscriptions = nlk->subscriptions - old + new;
2038         if (new)
2039                 __set_bit(group - 1, nlk->groups);
2040         else
2041                 __clear_bit(group - 1, nlk->groups);
2042         netlink_update_subscriptions(&nlk->sk, subscriptions);
2043         netlink_update_listeners(&nlk->sk);
2044 }
2045
2046 static int netlink_setsockopt(struct socket *sock, int level, int optname,
2047                               char __user *optval, unsigned int optlen)
2048 {
2049         struct sock *sk = sock->sk;
2050         struct netlink_sock *nlk = nlk_sk(sk);
2051         unsigned int val = 0;
2052         int err;
2053
2054         if (level != SOL_NETLINK)
2055                 return -ENOPROTOOPT;
2056
2057         if (optname != NETLINK_RX_RING && optname != NETLINK_TX_RING &&
2058             optlen >= sizeof(int) &&
2059             get_user(val, (unsigned int __user *)optval))
2060                 return -EFAULT;
2061
2062         switch (optname) {
2063         case NETLINK_PKTINFO:
2064                 if (val)
2065                         nlk->flags |= NETLINK_RECV_PKTINFO;
2066                 else
2067                         nlk->flags &= ~NETLINK_RECV_PKTINFO;
2068                 err = 0;
2069                 break;
2070         case NETLINK_ADD_MEMBERSHIP:
2071         case NETLINK_DROP_MEMBERSHIP: {
2072                 if (!netlink_capable(sock, NL_CFG_F_NONROOT_RECV))
2073                         return -EPERM;
2074                 err = netlink_realloc_groups(sk);
2075                 if (err)
2076                         return err;
2077                 if (!val || val - 1 >= nlk->ngroups)
2078                         return -EINVAL;
2079                 netlink_table_grab();
2080                 netlink_update_socket_mc(nlk, val,
2081                                          optname == NETLINK_ADD_MEMBERSHIP);
2082                 netlink_table_ungrab();
2083
2084                 if (nlk->netlink_bind)
2085                         nlk->netlink_bind(val);
2086
2087                 err = 0;
2088                 break;
2089         }
2090         case NETLINK_BROADCAST_ERROR:
2091                 if (val)
2092                         nlk->flags |= NETLINK_BROADCAST_SEND_ERROR;
2093                 else
2094                         nlk->flags &= ~NETLINK_BROADCAST_SEND_ERROR;
2095                 err = 0;
2096                 break;
2097         case NETLINK_NO_ENOBUFS:
2098                 if (val) {
2099                         nlk->flags |= NETLINK_RECV_NO_ENOBUFS;
2100                         clear_bit(NETLINK_CONGESTED, &nlk->state);
2101                         wake_up_interruptible(&nlk->wait);
2102                 } else {
2103                         nlk->flags &= ~NETLINK_RECV_NO_ENOBUFS;
2104                 }
2105                 err = 0;
2106                 break;
2107 #ifdef CONFIG_NETLINK_MMAP
2108         case NETLINK_RX_RING:
2109         case NETLINK_TX_RING: {
2110                 struct nl_mmap_req req;
2111
2112                 /* Rings might consume more memory than queue limits, require
2113                  * CAP_NET_ADMIN.
2114                  */
2115                 if (!capable(CAP_NET_ADMIN))
2116                         return -EPERM;
2117                 if (optlen < sizeof(req))
2118                         return -EINVAL;
2119                 if (copy_from_user(&req, optval, sizeof(req)))
2120                         return -EFAULT;
2121                 err = netlink_set_ring(sk, &req, false,
2122                                        optname == NETLINK_TX_RING);
2123                 break;
2124         }
2125 #endif /* CONFIG_NETLINK_MMAP */
2126         default:
2127                 err = -ENOPROTOOPT;
2128         }
2129         return err;
2130 }
2131
2132 static int netlink_getsockopt(struct socket *sock, int level, int optname,
2133                               char __user *optval, int __user *optlen)
2134 {
2135         struct sock *sk = sock->sk;
2136         struct netlink_sock *nlk = nlk_sk(sk);
2137         int len, val, err;
2138
2139         if (level != SOL_NETLINK)
2140                 return -ENOPROTOOPT;
2141
2142         if (get_user(len, optlen))
2143                 return -EFAULT;
2144         if (len < 0)
2145                 return -EINVAL;
2146
2147         switch (optname) {
2148         case NETLINK_PKTINFO:
2149                 if (len < sizeof(int))
2150                         return -EINVAL;
2151                 len = sizeof(int);
2152                 val = nlk->flags & NETLINK_RECV_PKTINFO ? 1 : 0;
2153                 if (put_user(len, optlen) ||
2154                     put_user(val, optval))
2155                         return -EFAULT;
2156                 err = 0;
2157                 break;
2158         case NETLINK_BROADCAST_ERROR:
2159                 if (len < sizeof(int))
2160                         return -EINVAL;
2161                 len = sizeof(int);
2162                 val = nlk->flags & NETLINK_BROADCAST_SEND_ERROR ? 1 : 0;
2163                 if (put_user(len, optlen) ||
2164                     put_user(val, optval))
2165                         return -EFAULT;
2166                 err = 0;
2167                 break;
2168         case NETLINK_NO_ENOBUFS:
2169                 if (len < sizeof(int))
2170                         return -EINVAL;
2171                 len = sizeof(int);
2172                 val = nlk->flags & NETLINK_RECV_NO_ENOBUFS ? 1 : 0;
2173                 if (put_user(len, optlen) ||
2174                     put_user(val, optval))
2175                         return -EFAULT;
2176                 err = 0;
2177                 break;
2178         default:
2179                 err = -ENOPROTOOPT;
2180         }
2181         return err;
2182 }
2183
2184 static void netlink_cmsg_recv_pktinfo(struct msghdr *msg, struct sk_buff *skb)
2185 {
2186         struct nl_pktinfo info;
2187
2188         info.group = NETLINK_CB(skb).dst_group;
2189         put_cmsg(msg, SOL_NETLINK, NETLINK_PKTINFO, sizeof(info), &info);
2190 }
2191
2192 static int netlink_sendmsg(struct kiocb *kiocb, struct socket *sock,
2193                            struct msghdr *msg, size_t len)
2194 {
2195         struct sock_iocb *siocb = kiocb_to_siocb(kiocb);
2196         struct sock *sk = sock->sk;
2197         struct netlink_sock *nlk = nlk_sk(sk);
2198         struct sockaddr_nl *addr = msg->msg_name;
2199         u32 dst_portid;
2200         u32 dst_group;
2201         struct sk_buff *skb;
2202         int err;
2203         struct scm_cookie scm;
2204
2205         if (msg->msg_flags&MSG_OOB)
2206                 return -EOPNOTSUPP;
2207
2208         if (NULL == siocb->scm)
2209                 siocb->scm = &scm;
2210
2211         err = scm_send(sock, msg, siocb->scm, true);
2212         if (err < 0)
2213                 return err;
2214
2215         if (msg->msg_namelen) {
2216                 err = -EINVAL;
2217                 if (addr->nl_family != AF_NETLINK)
2218                         goto out;
2219                 dst_portid = addr->nl_pid;
2220                 dst_group = ffs(addr->nl_groups);
2221                 err =  -EPERM;
2222                 if ((dst_group || dst_portid) &&
2223                     !netlink_capable(sock, NL_CFG_F_NONROOT_SEND))
2224                         goto out;
2225         } else {
2226                 dst_portid = nlk->dst_portid;
2227                 dst_group = nlk->dst_group;
2228         }
2229
2230         if (!nlk->portid) {
2231                 err = netlink_autobind(sock);
2232                 if (err)
2233                         goto out;
2234         }
2235
2236         if (netlink_tx_is_mmaped(sk) &&
2237             msg->msg_iov->iov_base == NULL) {
2238                 err = netlink_mmap_sendmsg(sk, msg, dst_portid, dst_group,
2239                                            siocb);
2240                 goto out;
2241         }
2242
2243         err = -EMSGSIZE;
2244         if (len > sk->sk_sndbuf - 32)
2245                 goto out;
2246         err = -ENOBUFS;
2247         skb = netlink_alloc_large_skb(len);
2248         if (skb == NULL)
2249                 goto out;
2250
2251         NETLINK_CB(skb).portid  = nlk->portid;
2252         NETLINK_CB(skb).dst_group = dst_group;
2253         NETLINK_CB(skb).creds   = siocb->scm->creds;
2254
2255         err = -EFAULT;
2256         if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
2257                 kfree_skb(skb);
2258                 goto out;
2259         }
2260
2261         err = security_netlink_send(sk, skb);
2262         if (err) {
2263                 kfree_skb(skb);
2264                 goto out;
2265         }
2266
2267         if (dst_group) {
2268                 atomic_inc(&skb->users);
2269                 netlink_broadcast(sk, skb, dst_portid, dst_group, GFP_KERNEL);
2270         }
2271         err = netlink_unicast(sk, skb, dst_portid, msg->msg_flags&MSG_DONTWAIT);
2272
2273 out:
2274         scm_destroy(siocb->scm);
2275         return err;
2276 }
2277
2278 static int netlink_recvmsg(struct kiocb *kiocb, struct socket *sock,
2279                            struct msghdr *msg, size_t len,
2280                            int flags)
2281 {
2282         struct sock_iocb *siocb = kiocb_to_siocb(kiocb);
2283         struct scm_cookie scm;
2284         struct sock *sk = sock->sk;
2285         struct netlink_sock *nlk = nlk_sk(sk);
2286         int noblock = flags&MSG_DONTWAIT;
2287         size_t copied;
2288         struct sk_buff *skb, *data_skb;
2289         int err, ret;
2290
2291         if (flags&MSG_OOB)
2292                 return -EOPNOTSUPP;
2293
2294         copied = 0;
2295
2296         skb = skb_recv_datagram(sk, flags, noblock, &err);
2297         if (skb == NULL)
2298                 goto out;
2299
2300         data_skb = skb;
2301
2302 #ifdef CONFIG_COMPAT_NETLINK_MESSAGES
2303         if (unlikely(skb_shinfo(skb)->frag_list)) {
2304                 /*
2305                  * If this skb has a frag_list, then here that means that we
2306                  * will have to use the frag_list skb's data for compat tasks
2307                  * and the regular skb's data for normal (non-compat) tasks.
2308                  *
2309                  * If we need to send the compat skb, assign it to the
2310                  * 'data_skb' variable so that it will be used below for data
2311                  * copying. We keep 'skb' for everything else, including
2312                  * freeing both later.
2313                  */
2314                 if (flags & MSG_CMSG_COMPAT)
2315                         data_skb = skb_shinfo(skb)->frag_list;
2316         }
2317 #endif
2318
2319         msg->msg_namelen = 0;
2320
2321         copied = data_skb->len;
2322         if (len < copied) {
2323                 msg->msg_flags |= MSG_TRUNC;
2324                 copied = len;
2325         }
2326
2327         skb_reset_transport_header(data_skb);
2328         err = skb_copy_datagram_iovec(data_skb, 0, msg->msg_iov, copied);
2329
2330         if (msg->msg_name) {
2331                 struct sockaddr_nl *addr = (struct sockaddr_nl *)msg->msg_name;
2332                 addr->nl_family = AF_NETLINK;
2333                 addr->nl_pad    = 0;
2334                 addr->nl_pid    = NETLINK_CB(skb).portid;
2335                 addr->nl_groups = netlink_group_mask(NETLINK_CB(skb).dst_group);
2336                 msg->msg_namelen = sizeof(*addr);
2337         }
2338
2339         if (nlk->flags & NETLINK_RECV_PKTINFO)
2340                 netlink_cmsg_recv_pktinfo(msg, skb);
2341
2342         if (NULL == siocb->scm) {
2343                 memset(&scm, 0, sizeof(scm));
2344                 siocb->scm = &scm;
2345         }
2346         siocb->scm->creds = *NETLINK_CREDS(skb);
2347         if (flags & MSG_TRUNC)
2348                 copied = data_skb->len;
2349
2350         skb_free_datagram(sk, skb);
2351
2352         if (nlk->cb && atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf / 2) {
2353                 ret = netlink_dump(sk);
2354                 if (ret) {
2355                         sk->sk_err = ret;
2356                         sk->sk_error_report(sk);
2357                 }
2358         }
2359
2360         scm_recv(sock, msg, siocb->scm, flags);
2361 out:
2362         netlink_rcv_wake(sk);
2363         return err ? : copied;
2364 }
2365
2366 static void netlink_data_ready(struct sock *sk, int len)
2367 {
2368         BUG();
2369 }
2370
2371 /*
2372  *      We export these functions to other modules. They provide a
2373  *      complete set of kernel non-blocking support for message
2374  *      queueing.
2375  */
2376
2377 struct sock *
2378 __netlink_kernel_create(struct net *net, int unit, struct module *module,
2379                         struct netlink_kernel_cfg *cfg)
2380 {
2381         struct socket *sock;
2382         struct sock *sk;
2383         struct netlink_sock *nlk;
2384         struct listeners *listeners = NULL;
2385         struct mutex *cb_mutex = cfg ? cfg->cb_mutex : NULL;
2386         unsigned int groups;
2387
2388         BUG_ON(!nl_table);
2389
2390         if (unit < 0 || unit >= MAX_LINKS)
2391                 return NULL;
2392
2393         if (sock_create_lite(PF_NETLINK, SOCK_DGRAM, unit, &sock))
2394                 return NULL;
2395
2396         /*
2397          * We have to just have a reference on the net from sk, but don't
2398          * get_net it. Besides, we cannot get and then put the net here.
2399          * So we create one inside init_net and the move it to net.
2400          */
2401
2402         if (__netlink_create(&init_net, sock, cb_mutex, unit) < 0)
2403                 goto out_sock_release_nosk;
2404
2405         sk = sock->sk;
2406         sk_change_net(sk, net);
2407
2408         if (!cfg || cfg->groups < 32)
2409                 groups = 32;
2410         else
2411                 groups = cfg->groups;
2412
2413         listeners = kzalloc(sizeof(*listeners) + NLGRPSZ(groups), GFP_KERNEL);
2414         if (!listeners)
2415                 goto out_sock_release;
2416
2417         sk->sk_data_ready = netlink_data_ready;
2418         if (cfg && cfg->input)
2419                 nlk_sk(sk)->netlink_rcv = cfg->input;
2420
2421         if (netlink_insert(sk, net, 0))
2422                 goto out_sock_release;
2423
2424         nlk = nlk_sk(sk);
2425         nlk->flags |= NETLINK_KERNEL_SOCKET;
2426
2427         netlink_table_grab();
2428         if (!nl_table[unit].registered) {
2429                 nl_table[unit].groups = groups;
2430                 rcu_assign_pointer(nl_table[unit].listeners, listeners);
2431                 nl_table[unit].cb_mutex = cb_mutex;
2432                 nl_table[unit].module = module;
2433                 if (cfg) {
2434                         nl_table[unit].bind = cfg->bind;
2435                         nl_table[unit].flags = cfg->flags;
2436                         if (cfg->compare)
2437                                 nl_table[unit].compare = cfg->compare;
2438                 }
2439                 nl_table[unit].registered = 1;
2440         } else {
2441                 kfree(listeners);
2442                 nl_table[unit].registered++;
2443         }
2444         netlink_table_ungrab();
2445         return sk;
2446
2447 out_sock_release:
2448         kfree(listeners);
2449         netlink_kernel_release(sk);
2450         return NULL;
2451
2452 out_sock_release_nosk:
2453         sock_release(sock);
2454         return NULL;
2455 }
2456 EXPORT_SYMBOL(__netlink_kernel_create);
2457
2458 void
2459 netlink_kernel_release(struct sock *sk)
2460 {
2461         sk_release_kernel(sk);
2462 }
2463 EXPORT_SYMBOL(netlink_kernel_release);
2464
2465 int __netlink_change_ngroups(struct sock *sk, unsigned int groups)
2466 {
2467         struct listeners *new, *old;
2468         struct netlink_table *tbl = &nl_table[sk->sk_protocol];
2469
2470         if (groups < 32)
2471                 groups = 32;
2472
2473         if (NLGRPSZ(tbl->groups) < NLGRPSZ(groups)) {
2474                 new = kzalloc(sizeof(*new) + NLGRPSZ(groups), GFP_ATOMIC);
2475                 if (!new)
2476                         return -ENOMEM;
2477                 old = nl_deref_protected(tbl->listeners);
2478                 memcpy(new->masks, old->masks, NLGRPSZ(tbl->groups));
2479                 rcu_assign_pointer(tbl->listeners, new);
2480
2481                 kfree_rcu(old, rcu);
2482         }
2483         tbl->groups = groups;
2484
2485         return 0;
2486 }
2487
2488 /**
2489  * netlink_change_ngroups - change number of multicast groups
2490  *
2491  * This changes the number of multicast groups that are available
2492  * on a certain netlink family. Note that it is not possible to
2493  * change the number of groups to below 32. Also note that it does
2494  * not implicitly call netlink_clear_multicast_users() when the
2495  * number of groups is reduced.
2496  *
2497  * @sk: The kernel netlink socket, as returned by netlink_kernel_create().
2498  * @groups: The new number of groups.
2499  */
2500 int netlink_change_ngroups(struct sock *sk, unsigned int groups)
2501 {
2502         int err;
2503
2504         netlink_table_grab();
2505         err = __netlink_change_ngroups(sk, groups);
2506         netlink_table_ungrab();
2507
2508         return err;
2509 }
2510
2511 void __netlink_clear_multicast_users(struct sock *ksk, unsigned int group)
2512 {
2513         struct sock *sk;
2514         struct netlink_table *tbl = &nl_table[ksk->sk_protocol];
2515
2516         sk_for_each_bound(sk, &tbl->mc_list)
2517                 netlink_update_socket_mc(nlk_sk(sk), group, 0);
2518 }
2519
2520 /**
2521  * netlink_clear_multicast_users - kick off multicast listeners
2522  *
2523  * This function removes all listeners from the given group.
2524  * @ksk: The kernel netlink socket, as returned by
2525  *      netlink_kernel_create().
2526  * @group: The multicast group to clear.
2527  */
2528 void netlink_clear_multicast_users(struct sock *ksk, unsigned int group)
2529 {
2530         netlink_table_grab();
2531         __netlink_clear_multicast_users(ksk, group);
2532         netlink_table_ungrab();
2533 }
2534
2535 struct nlmsghdr *
2536 __nlmsg_put(struct sk_buff *skb, u32 portid, u32 seq, int type, int len, int flags)
2537 {
2538         struct nlmsghdr *nlh;
2539         int size = nlmsg_msg_size(len);
2540
2541         nlh = (struct nlmsghdr*)skb_put(skb, NLMSG_ALIGN(size));
2542         nlh->nlmsg_type = type;
2543         nlh->nlmsg_len = size;
2544         nlh->nlmsg_flags = flags;
2545         nlh->nlmsg_pid = portid;
2546         nlh->nlmsg_seq = seq;
2547         if (!__builtin_constant_p(size) || NLMSG_ALIGN(size) - size != 0)
2548                 memset(nlmsg_data(nlh) + len, 0, NLMSG_ALIGN(size) - size);
2549         return nlh;
2550 }
2551 EXPORT_SYMBOL(__nlmsg_put);
2552
2553 /*
2554  * It looks a bit ugly.
2555  * It would be better to create kernel thread.
2556  */
2557
2558 static int netlink_dump(struct sock *sk)
2559 {
2560         struct netlink_sock *nlk = nlk_sk(sk);
2561         struct netlink_callback *cb;
2562         struct sk_buff *skb = NULL;
2563         struct nlmsghdr *nlh;
2564         int len, err = -ENOBUFS;
2565         int alloc_size;
2566
2567         mutex_lock(nlk->cb_mutex);
2568
2569         cb = nlk->cb;
2570         if (cb == NULL) {
2571                 err = -EINVAL;
2572                 goto errout_skb;
2573         }
2574
2575         alloc_size = max_t(int, cb->min_dump_alloc, NLMSG_GOODSIZE);
2576
2577         if (!netlink_rx_is_mmaped(sk) &&
2578             atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf)
2579                 goto errout_skb;
2580         skb = netlink_alloc_skb(sk, alloc_size, nlk->portid, GFP_KERNEL);
2581         if (!skb)
2582                 goto errout_skb;
2583         netlink_skb_set_owner_r(skb, sk);
2584
2585         len = cb->dump(skb, cb);
2586
2587         if (len > 0) {
2588                 mutex_unlock(nlk->cb_mutex);
2589
2590                 if (sk_filter(sk, skb))
2591                         kfree_skb(skb);
2592                 else
2593                         __netlink_sendskb(sk, skb);
2594                 return 0;
2595         }
2596
2597         nlh = nlmsg_put_answer(skb, cb, NLMSG_DONE, sizeof(len), NLM_F_MULTI);
2598         if (!nlh)
2599                 goto errout_skb;
2600
2601         nl_dump_check_consistent(cb, nlh);
2602
2603         memcpy(nlmsg_data(nlh), &len, sizeof(len));
2604
2605         if (sk_filter(sk, skb))
2606                 kfree_skb(skb);
2607         else
2608                 __netlink_sendskb(sk, skb);
2609
2610         if (cb->done)
2611                 cb->done(cb);
2612         nlk->cb = NULL;
2613         mutex_unlock(nlk->cb_mutex);
2614
2615         module_put(cb->module);
2616         netlink_consume_callback(cb);
2617         return 0;
2618
2619 errout_skb:
2620         mutex_unlock(nlk->cb_mutex);
2621         kfree_skb(skb);
2622         return err;
2623 }
2624
2625 int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb,
2626                          const struct nlmsghdr *nlh,
2627                          struct netlink_dump_control *control)
2628 {
2629         struct netlink_callback *cb;
2630         struct sock *sk;
2631         struct netlink_sock *nlk;
2632         int ret;
2633
2634         cb = kzalloc(sizeof(*cb), GFP_KERNEL);
2635         if (cb == NULL)
2636                 return -ENOBUFS;
2637
2638         /* Memory mapped dump requests need to be copied to avoid looping
2639          * on the pending state in netlink_mmap_sendmsg() while the CB hold
2640          * a reference to the skb.
2641          */
2642         if (netlink_skb_is_mmaped(skb)) {
2643                 skb = skb_copy(skb, GFP_KERNEL);
2644                 if (skb == NULL) {
2645                         kfree(cb);
2646                         return -ENOBUFS;
2647                 }
2648         } else
2649                 atomic_inc(&skb->users);
2650
2651         cb->dump = control->dump;
2652         cb->done = control->done;
2653         cb->nlh = nlh;
2654         cb->data = control->data;
2655         cb->module = control->module;
2656         cb->min_dump_alloc = control->min_dump_alloc;
2657         cb->skb = skb;
2658
2659         sk = netlink_lookup(sock_net(ssk), ssk->sk_protocol, NETLINK_CB(skb).portid);
2660         if (sk == NULL) {
2661                 netlink_destroy_callback(cb);
2662                 return -ECONNREFUSED;
2663         }
2664         nlk = nlk_sk(sk);
2665
2666         mutex_lock(nlk->cb_mutex);
2667         /* A dump is in progress... */
2668         if (nlk->cb) {
2669                 mutex_unlock(nlk->cb_mutex);
2670                 netlink_destroy_callback(cb);
2671                 ret = -EBUSY;
2672                 goto out;
2673         }
2674         /* add reference of module which cb->dump belongs to */
2675         if (!try_module_get(cb->module)) {
2676                 mutex_unlock(nlk->cb_mutex);
2677                 netlink_destroy_callback(cb);
2678                 ret = -EPROTONOSUPPORT;
2679                 goto out;
2680         }
2681
2682         nlk->cb = cb;
2683         mutex_unlock(nlk->cb_mutex);
2684
2685         ret = netlink_dump(sk);
2686 out:
2687         sock_put(sk);
2688
2689         if (ret)
2690                 return ret;
2691
2692         /* We successfully started a dump, by returning -EINTR we
2693          * signal not to send ACK even if it was requested.
2694          */
2695         return -EINTR;
2696 }
2697 EXPORT_SYMBOL(__netlink_dump_start);
2698
2699 void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err)
2700 {
2701         struct sk_buff *skb;
2702         struct nlmsghdr *rep;
2703         struct nlmsgerr *errmsg;
2704         size_t payload = sizeof(*errmsg);
2705
2706         /* error messages get the original request appened */
2707         if (err)
2708                 payload += nlmsg_len(nlh);
2709
2710         skb = netlink_alloc_skb(in_skb->sk, nlmsg_total_size(payload),
2711                                 NETLINK_CB(in_skb).portid, GFP_KERNEL);
2712         if (!skb) {
2713                 struct sock *sk;
2714
2715                 sk = netlink_lookup(sock_net(in_skb->sk),
2716                                     in_skb->sk->sk_protocol,
2717                                     NETLINK_CB(in_skb).portid);
2718                 if (sk) {
2719                         sk->sk_err = ENOBUFS;
2720                         sk->sk_error_report(sk);
2721                         sock_put(sk);
2722                 }
2723                 return;
2724         }
2725
2726         rep = __nlmsg_put(skb, NETLINK_CB(in_skb).portid, nlh->nlmsg_seq,
2727                           NLMSG_ERROR, payload, 0);
2728         errmsg = nlmsg_data(rep);
2729         errmsg->error = err;
2730         memcpy(&errmsg->msg, nlh, err ? nlh->nlmsg_len : sizeof(*nlh));
2731         netlink_unicast(in_skb->sk, skb, NETLINK_CB(in_skb).portid, MSG_DONTWAIT);
2732 }
2733 EXPORT_SYMBOL(netlink_ack);
2734
2735 int netlink_rcv_skb(struct sk_buff *skb, int (*cb)(struct sk_buff *,
2736                                                      struct nlmsghdr *))
2737 {
2738         struct nlmsghdr *nlh;
2739         int err;
2740
2741         while (skb->len >= nlmsg_total_size(0)) {
2742                 int msglen;
2743
2744                 nlh = nlmsg_hdr(skb);
2745                 err = 0;
2746
2747                 if (nlh->nlmsg_len < NLMSG_HDRLEN || skb->len < nlh->nlmsg_len)
2748                         return 0;
2749
2750                 /* Only requests are handled by the kernel */
2751                 if (!(nlh->nlmsg_flags & NLM_F_REQUEST))
2752                         goto ack;
2753
2754                 /* Skip control messages */
2755                 if (nlh->nlmsg_type < NLMSG_MIN_TYPE)
2756                         goto ack;
2757
2758                 err = cb(skb, nlh);
2759                 if (err == -EINTR)
2760                         goto skip;
2761
2762 ack:
2763                 if (nlh->nlmsg_flags & NLM_F_ACK || err)
2764                         netlink_ack(skb, nlh, err);
2765
2766 skip:
2767                 msglen = NLMSG_ALIGN(nlh->nlmsg_len);
2768                 if (msglen > skb->len)
2769                         msglen = skb->len;
2770                 skb_pull(skb, msglen);
2771         }
2772
2773         return 0;
2774 }
2775 EXPORT_SYMBOL(netlink_rcv_skb);
2776
2777 /**
2778  * nlmsg_notify - send a notification netlink message
2779  * @sk: netlink socket to use
2780  * @skb: notification message
2781  * @portid: destination netlink portid for reports or 0
2782  * @group: destination multicast group or 0
2783  * @report: 1 to report back, 0 to disable
2784  * @flags: allocation flags
2785  */
2786 int nlmsg_notify(struct sock *sk, struct sk_buff *skb, u32 portid,
2787                  unsigned int group, int report, gfp_t flags)
2788 {
2789         int err = 0;
2790
2791         if (group) {
2792                 int exclude_portid = 0;
2793
2794                 if (report) {
2795                         atomic_inc(&skb->users);
2796                         exclude_portid = portid;
2797                 }
2798
2799                 /* errors reported via destination sk->sk_err, but propagate
2800                  * delivery errors if NETLINK_BROADCAST_ERROR flag is set */
2801                 err = nlmsg_multicast(sk, skb, exclude_portid, group, flags);
2802         }
2803
2804         if (report) {
2805                 int err2;
2806
2807                 err2 = nlmsg_unicast(sk, skb, portid);
2808                 if (!err || err == -ESRCH)
2809                         err = err2;
2810         }
2811
2812         return err;
2813 }
2814 EXPORT_SYMBOL(nlmsg_notify);
2815
2816 #ifdef CONFIG_PROC_FS
2817 struct nl_seq_iter {
2818         struct seq_net_private p;
2819         int link;
2820         int hash_idx;
2821 };
2822
2823 static struct sock *netlink_seq_socket_idx(struct seq_file *seq, loff_t pos)
2824 {
2825         struct nl_seq_iter *iter = seq->private;
2826         int i, j;
2827         struct sock *s;
2828         loff_t off = 0;
2829
2830         for (i = 0; i < MAX_LINKS; i++) {
2831                 struct nl_portid_hash *hash = &nl_table[i].hash;
2832
2833                 for (j = 0; j <= hash->mask; j++) {
2834                         sk_for_each(s, &hash->table[j]) {
2835                                 if (sock_net(s) != seq_file_net(seq))
2836                                         continue;
2837                                 if (off == pos) {
2838                                         iter->link = i;
2839                                         iter->hash_idx = j;
2840                                         return s;
2841                                 }
2842                                 ++off;
2843                         }
2844                 }
2845         }
2846         return NULL;
2847 }
2848
2849 static void *netlink_seq_start(struct seq_file *seq, loff_t *pos)
2850         __acquires(nl_table_lock)
2851 {
2852         read_lock(&nl_table_lock);
2853         return *pos ? netlink_seq_socket_idx(seq, *pos - 1) : SEQ_START_TOKEN;
2854 }
2855
2856 static void *netlink_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2857 {
2858         struct sock *s;
2859         struct nl_seq_iter *iter;
2860         struct net *net;
2861         int i, j;
2862
2863         ++*pos;
2864
2865         if (v == SEQ_START_TOKEN)
2866                 return netlink_seq_socket_idx(seq, 0);
2867
2868         net = seq_file_net(seq);
2869         iter = seq->private;
2870         s = v;
2871         do {
2872                 s = sk_next(s);
2873         } while (s && !nl_table[s->sk_protocol].compare(net, s));
2874         if (s)
2875                 return s;
2876
2877         i = iter->link;
2878         j = iter->hash_idx + 1;
2879
2880         do {
2881                 struct nl_portid_hash *hash = &nl_table[i].hash;
2882
2883                 for (; j <= hash->mask; j++) {
2884                         s = sk_head(&hash->table[j]);
2885
2886                         while (s && !nl_table[s->sk_protocol].compare(net, s))
2887                                 s = sk_next(s);
2888                         if (s) {
2889                                 iter->link = i;
2890                                 iter->hash_idx = j;
2891                                 return s;
2892                         }
2893                 }
2894
2895                 j = 0;
2896         } while (++i < MAX_LINKS);
2897
2898         return NULL;
2899 }
2900
2901 static void netlink_seq_stop(struct seq_file *seq, void *v)
2902         __releases(nl_table_lock)
2903 {
2904         read_unlock(&nl_table_lock);
2905 }
2906
2907
2908 static int netlink_seq_show(struct seq_file *seq, void *v)
2909 {
2910         if (v == SEQ_START_TOKEN) {
2911                 seq_puts(seq,
2912                          "sk       Eth Pid    Groups   "
2913                          "Rmem     Wmem     Dump     Locks     Drops     Inode\n");
2914         } else {
2915                 struct sock *s = v;
2916                 struct netlink_sock *nlk = nlk_sk(s);
2917
2918                 seq_printf(seq, "%pK %-3d %-6u %08x %-8d %-8d %pK %-8d %-8d %-8lu\n",
2919                            s,
2920                            s->sk_protocol,
2921                            nlk->portid,
2922                            nlk->groups ? (u32)nlk->groups[0] : 0,
2923                            sk_rmem_alloc_get(s),
2924                            sk_wmem_alloc_get(s),
2925                            nlk->cb,
2926                            atomic_read(&s->sk_refcnt),
2927                            atomic_read(&s->sk_drops),
2928                            sock_i_ino(s)
2929                         );
2930
2931         }
2932         return 0;
2933 }
2934
2935 static const struct seq_operations netlink_seq_ops = {
2936         .start  = netlink_seq_start,
2937         .next   = netlink_seq_next,
2938         .stop   = netlink_seq_stop,
2939         .show   = netlink_seq_show,
2940 };
2941
2942
2943 static int netlink_seq_open(struct inode *inode, struct file *file)
2944 {
2945         return seq_open_net(inode, file, &netlink_seq_ops,
2946                                 sizeof(struct nl_seq_iter));
2947 }
2948
2949 static const struct file_operations netlink_seq_fops = {
2950         .owner          = THIS_MODULE,
2951         .open           = netlink_seq_open,
2952         .read           = seq_read,
2953         .llseek         = seq_lseek,
2954         .release        = seq_release_net,
2955 };
2956
2957 #endif
2958
2959 int netlink_register_notifier(struct notifier_block *nb)
2960 {
2961         return atomic_notifier_chain_register(&netlink_chain, nb);
2962 }
2963 EXPORT_SYMBOL(netlink_register_notifier);
2964
2965 int netlink_unregister_notifier(struct notifier_block *nb)
2966 {
2967         return atomic_notifier_chain_unregister(&netlink_chain, nb);
2968 }
2969 EXPORT_SYMBOL(netlink_unregister_notifier);
2970
2971 static const struct proto_ops netlink_ops = {
2972         .family =       PF_NETLINK,
2973         .owner =        THIS_MODULE,
2974         .release =      netlink_release,
2975         .bind =         netlink_bind,
2976         .connect =      netlink_connect,
2977         .socketpair =   sock_no_socketpair,
2978         .accept =       sock_no_accept,
2979         .getname =      netlink_getname,
2980         .poll =         netlink_poll,
2981         .ioctl =        sock_no_ioctl,
2982         .listen =       sock_no_listen,
2983         .shutdown =     sock_no_shutdown,
2984         .setsockopt =   netlink_setsockopt,
2985         .getsockopt =   netlink_getsockopt,
2986         .sendmsg =      netlink_sendmsg,
2987         .recvmsg =      netlink_recvmsg,
2988         .mmap =         netlink_mmap,
2989         .sendpage =     sock_no_sendpage,
2990 };
2991
2992 static const struct net_proto_family netlink_family_ops = {
2993         .family = PF_NETLINK,
2994         .create = netlink_create,
2995         .owner  = THIS_MODULE,  /* for consistency 8) */
2996 };
2997
2998 static int __net_init netlink_net_init(struct net *net)
2999 {
3000 #ifdef CONFIG_PROC_FS
3001         if (!proc_create("netlink", 0, net->proc_net, &netlink_seq_fops))
3002                 return -ENOMEM;
3003 #endif
3004         return 0;
3005 }
3006
3007 static void __net_exit netlink_net_exit(struct net *net)
3008 {
3009 #ifdef CONFIG_PROC_FS
3010         remove_proc_entry("netlink", net->proc_net);
3011 #endif
3012 }
3013
3014 static void __init netlink_add_usersock_entry(void)
3015 {
3016         struct listeners *listeners;
3017         int groups = 32;
3018
3019         listeners = kzalloc(sizeof(*listeners) + NLGRPSZ(groups), GFP_KERNEL);
3020         if (!listeners)
3021                 panic("netlink_add_usersock_entry: Cannot allocate listeners\n");
3022
3023         netlink_table_grab();
3024
3025         nl_table[NETLINK_USERSOCK].groups = groups;
3026         rcu_assign_pointer(nl_table[NETLINK_USERSOCK].listeners, listeners);
3027         nl_table[NETLINK_USERSOCK].module = THIS_MODULE;
3028         nl_table[NETLINK_USERSOCK].registered = 1;
3029         nl_table[NETLINK_USERSOCK].flags = NL_CFG_F_NONROOT_SEND;
3030
3031         netlink_table_ungrab();
3032 }
3033
3034 static struct pernet_operations __net_initdata netlink_net_ops = {
3035         .init = netlink_net_init,
3036         .exit = netlink_net_exit,
3037 };
3038
3039 static int __init netlink_proto_init(void)
3040 {
3041         int i;
3042         unsigned long limit;
3043         unsigned int order;
3044         int err = proto_register(&netlink_proto, 0);
3045
3046         if (err != 0)
3047                 goto out;
3048
3049         BUILD_BUG_ON(sizeof(struct netlink_skb_parms) > FIELD_SIZEOF(struct sk_buff, cb));
3050
3051         nl_table = kcalloc(MAX_LINKS, sizeof(*nl_table), GFP_KERNEL);
3052         if (!nl_table)
3053                 goto panic;
3054
3055         if (totalram_pages >= (128 * 1024))
3056                 limit = totalram_pages >> (21 - PAGE_SHIFT);
3057         else
3058                 limit = totalram_pages >> (23 - PAGE_SHIFT);
3059
3060         order = get_bitmask_order(limit) - 1 + PAGE_SHIFT;
3061         limit = (1UL << order) / sizeof(struct hlist_head);
3062         order = get_bitmask_order(min(limit, (unsigned long)UINT_MAX)) - 1;
3063
3064         for (i = 0; i < MAX_LINKS; i++) {
3065                 struct nl_portid_hash *hash = &nl_table[i].hash;
3066
3067                 hash->table = nl_portid_hash_zalloc(1 * sizeof(*hash->table));
3068                 if (!hash->table) {
3069                         while (i-- > 0)
3070                                 nl_portid_hash_free(nl_table[i].hash.table,
3071                                                  1 * sizeof(*hash->table));
3072                         kfree(nl_table);
3073                         goto panic;
3074                 }
3075                 hash->max_shift = order;
3076                 hash->shift = 0;
3077                 hash->mask = 0;
3078                 hash->rehash_time = jiffies;
3079
3080                 nl_table[i].compare = netlink_compare;
3081         }
3082
3083         INIT_LIST_HEAD(&netlink_tap_all);
3084
3085         netlink_add_usersock_entry();
3086
3087         sock_register(&netlink_family_ops);
3088         register_pernet_subsys(&netlink_net_ops);
3089         /* The netlink device handler may be needed early. */
3090         rtnetlink_init();
3091 out:
3092         return err;
3093 panic:
3094         panic("netlink_init: Cannot allocate nl_table\n");
3095 }
3096
3097 core_initcall(netlink_proto_init);