26779c24b1d4b276f667fb47d50feb0b5bdee21e
[firefly-linux-kernel-4.4.55.git] / 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  *
7  *              This program is free software; you can redistribute it and/or
8  *              modify it under the terms of the GNU General Public License
9  *              as published by the Free Software Foundation; either version
10  *              2 of the License, or (at your option) any later version.
11  *
12  * Tue Jun 26 14:36:48 MEST 2001 Herbert "herp" Rosmanith
13  *                               added netlink_proto_exit
14  * Tue Jan 22 18:32:44 BRST 2002 Arnaldo C. de Melo <acme@conectiva.com.br>
15  *                               use nlk_sk, as sk->protinfo is on a diet 8)
16  * Fri Jul 22 19:51:12 MEST 2005 Harald Welte <laforge@gnumonks.org>
17  *                               - inc module use count of module that owns
18  *                                 the kernel socket in case userspace opens
19  *                                 socket of same protocol
20  *                               - remove all module support, since netlink is
21  *                                 mandatory if CONFIG_NET=y these days
22  */
23
24 #include <linux/module.h>
25
26 #include <linux/capability.h>
27 #include <linux/kernel.h>
28 #include <linux/init.h>
29 #include <linux/signal.h>
30 #include <linux/sched.h>
31 #include <linux/errno.h>
32 #include <linux/string.h>
33 #include <linux/stat.h>
34 #include <linux/socket.h>
35 #include <linux/un.h>
36 #include <linux/fcntl.h>
37 #include <linux/termios.h>
38 #include <linux/sockios.h>
39 #include <linux/net.h>
40 #include <linux/fs.h>
41 #include <linux/slab.h>
42 #include <asm/uaccess.h>
43 #include <linux/skbuff.h>
44 #include <linux/netdevice.h>
45 #include <linux/rtnetlink.h>
46 #include <linux/proc_fs.h>
47 #include <linux/seq_file.h>
48 #include <linux/notifier.h>
49 #include <linux/security.h>
50 #include <linux/jhash.h>
51 #include <linux/jiffies.h>
52 #include <linux/random.h>
53 #include <linux/bitops.h>
54 #include <linux/mm.h>
55 #include <linux/types.h>
56 #include <linux/audit.h>
57 #include <linux/mutex.h>
58
59 #include <net/net_namespace.h>
60 #include <net/sock.h>
61 #include <net/scm.h>
62 #include <net/netlink.h>
63
64 #include "af_netlink.h"
65
66 struct listeners {
67         struct rcu_head         rcu;
68         unsigned long           masks[0];
69 };
70
71 /* state bits */
72 #define NETLINK_CONGESTED       0x0
73
74 /* flags */
75 #define NETLINK_KERNEL_SOCKET   0x1
76 #define NETLINK_RECV_PKTINFO    0x2
77 #define NETLINK_BROADCAST_SEND_ERROR    0x4
78 #define NETLINK_RECV_NO_ENOBUFS 0x8
79
80 static inline int netlink_is_kernel(struct sock *sk)
81 {
82         return nlk_sk(sk)->flags & NETLINK_KERNEL_SOCKET;
83 }
84
85 struct netlink_table *nl_table;
86 EXPORT_SYMBOL_GPL(nl_table);
87
88 static DECLARE_WAIT_QUEUE_HEAD(nl_table_wait);
89
90 static int netlink_dump(struct sock *sk);
91
92 DEFINE_RWLOCK(nl_table_lock);
93 EXPORT_SYMBOL_GPL(nl_table_lock);
94 static atomic_t nl_table_users = ATOMIC_INIT(0);
95
96 #define nl_deref_protected(X) rcu_dereference_protected(X, lockdep_is_held(&nl_table_lock));
97
98 static ATOMIC_NOTIFIER_HEAD(netlink_chain);
99
100 static inline u32 netlink_group_mask(u32 group)
101 {
102         return group ? 1 << (group - 1) : 0;
103 }
104
105 static inline struct hlist_head *nl_portid_hashfn(struct nl_portid_hash *hash, u32 portid)
106 {
107         return &hash->table[jhash_1word(portid, hash->rnd) & hash->mask];
108 }
109
110 static void netlink_destroy_callback(struct netlink_callback *cb)
111 {
112         kfree_skb(cb->skb);
113         kfree(cb);
114 }
115
116 static void netlink_consume_callback(struct netlink_callback *cb)
117 {
118         consume_skb(cb->skb);
119         kfree(cb);
120 }
121
122 static void netlink_sock_destruct(struct sock *sk)
123 {
124         struct netlink_sock *nlk = nlk_sk(sk);
125
126         if (nlk->cb) {
127                 if (nlk->cb->done)
128                         nlk->cb->done(nlk->cb);
129
130                 module_put(nlk->cb->module);
131                 netlink_destroy_callback(nlk->cb);
132         }
133
134         skb_queue_purge(&sk->sk_receive_queue);
135
136         if (!sock_flag(sk, SOCK_DEAD)) {
137                 printk(KERN_ERR "Freeing alive netlink socket %p\n", sk);
138                 return;
139         }
140
141         WARN_ON(atomic_read(&sk->sk_rmem_alloc));
142         WARN_ON(atomic_read(&sk->sk_wmem_alloc));
143         WARN_ON(nlk_sk(sk)->groups);
144 }
145
146 /* This lock without WQ_FLAG_EXCLUSIVE is good on UP and it is _very_ bad on
147  * SMP. Look, when several writers sleep and reader wakes them up, all but one
148  * immediately hit write lock and grab all the cpus. Exclusive sleep solves
149  * this, _but_ remember, it adds useless work on UP machines.
150  */
151
152 void netlink_table_grab(void)
153         __acquires(nl_table_lock)
154 {
155         might_sleep();
156
157         write_lock_irq(&nl_table_lock);
158
159         if (atomic_read(&nl_table_users)) {
160                 DECLARE_WAITQUEUE(wait, current);
161
162                 add_wait_queue_exclusive(&nl_table_wait, &wait);
163                 for (;;) {
164                         set_current_state(TASK_UNINTERRUPTIBLE);
165                         if (atomic_read(&nl_table_users) == 0)
166                                 break;
167                         write_unlock_irq(&nl_table_lock);
168                         schedule();
169                         write_lock_irq(&nl_table_lock);
170                 }
171
172                 __set_current_state(TASK_RUNNING);
173                 remove_wait_queue(&nl_table_wait, &wait);
174         }
175 }
176
177 void netlink_table_ungrab(void)
178         __releases(nl_table_lock)
179 {
180         write_unlock_irq(&nl_table_lock);
181         wake_up(&nl_table_wait);
182 }
183
184 static inline void
185 netlink_lock_table(void)
186 {
187         /* read_lock() synchronizes us to netlink_table_grab */
188
189         read_lock(&nl_table_lock);
190         atomic_inc(&nl_table_users);
191         read_unlock(&nl_table_lock);
192 }
193
194 static inline void
195 netlink_unlock_table(void)
196 {
197         if (atomic_dec_and_test(&nl_table_users))
198                 wake_up(&nl_table_wait);
199 }
200
201 static struct sock *netlink_lookup(struct net *net, int protocol, u32 portid)
202 {
203         struct nl_portid_hash *hash = &nl_table[protocol].hash;
204         struct hlist_head *head;
205         struct sock *sk;
206
207         read_lock(&nl_table_lock);
208         head = nl_portid_hashfn(hash, portid);
209         sk_for_each(sk, head) {
210                 if (net_eq(sock_net(sk), net) && (nlk_sk(sk)->portid == portid)) {
211                         sock_hold(sk);
212                         goto found;
213                 }
214         }
215         sk = NULL;
216 found:
217         read_unlock(&nl_table_lock);
218         return sk;
219 }
220
221 static struct hlist_head *nl_portid_hash_zalloc(size_t size)
222 {
223         if (size <= PAGE_SIZE)
224                 return kzalloc(size, GFP_ATOMIC);
225         else
226                 return (struct hlist_head *)
227                         __get_free_pages(GFP_ATOMIC | __GFP_ZERO,
228                                          get_order(size));
229 }
230
231 static void nl_portid_hash_free(struct hlist_head *table, size_t size)
232 {
233         if (size <= PAGE_SIZE)
234                 kfree(table);
235         else
236                 free_pages((unsigned long)table, get_order(size));
237 }
238
239 static int nl_portid_hash_rehash(struct nl_portid_hash *hash, int grow)
240 {
241         unsigned int omask, mask, shift;
242         size_t osize, size;
243         struct hlist_head *otable, *table;
244         int i;
245
246         omask = mask = hash->mask;
247         osize = size = (mask + 1) * sizeof(*table);
248         shift = hash->shift;
249
250         if (grow) {
251                 if (++shift > hash->max_shift)
252                         return 0;
253                 mask = mask * 2 + 1;
254                 size *= 2;
255         }
256
257         table = nl_portid_hash_zalloc(size);
258         if (!table)
259                 return 0;
260
261         otable = hash->table;
262         hash->table = table;
263         hash->mask = mask;
264         hash->shift = shift;
265         get_random_bytes(&hash->rnd, sizeof(hash->rnd));
266
267         for (i = 0; i <= omask; i++) {
268                 struct sock *sk;
269                 struct hlist_node *tmp;
270
271                 sk_for_each_safe(sk, tmp, &otable[i])
272                         __sk_add_node(sk, nl_portid_hashfn(hash, nlk_sk(sk)->portid));
273         }
274
275         nl_portid_hash_free(otable, osize);
276         hash->rehash_time = jiffies + 10 * 60 * HZ;
277         return 1;
278 }
279
280 static inline int nl_portid_hash_dilute(struct nl_portid_hash *hash, int len)
281 {
282         int avg = hash->entries >> hash->shift;
283
284         if (unlikely(avg > 1) && nl_portid_hash_rehash(hash, 1))
285                 return 1;
286
287         if (unlikely(len > avg) && time_after(jiffies, hash->rehash_time)) {
288                 nl_portid_hash_rehash(hash, 0);
289                 return 1;
290         }
291
292         return 0;
293 }
294
295 static const struct proto_ops netlink_ops;
296
297 static void
298 netlink_update_listeners(struct sock *sk)
299 {
300         struct netlink_table *tbl = &nl_table[sk->sk_protocol];
301         unsigned long mask;
302         unsigned int i;
303         struct listeners *listeners;
304
305         listeners = nl_deref_protected(tbl->listeners);
306         if (!listeners)
307                 return;
308
309         for (i = 0; i < NLGRPLONGS(tbl->groups); i++) {
310                 mask = 0;
311                 sk_for_each_bound(sk, &tbl->mc_list) {
312                         if (i < NLGRPLONGS(nlk_sk(sk)->ngroups))
313                                 mask |= nlk_sk(sk)->groups[i];
314                 }
315                 listeners->masks[i] = mask;
316         }
317         /* this function is only called with the netlink table "grabbed", which
318          * makes sure updates are visible before bind or setsockopt return. */
319 }
320
321 static int netlink_insert(struct sock *sk, struct net *net, u32 portid)
322 {
323         struct nl_portid_hash *hash = &nl_table[sk->sk_protocol].hash;
324         struct hlist_head *head;
325         int err = -EADDRINUSE;
326         struct sock *osk;
327         int len;
328
329         netlink_table_grab();
330         head = nl_portid_hashfn(hash, portid);
331         len = 0;
332         sk_for_each(osk, head) {
333                 if (net_eq(sock_net(osk), net) && (nlk_sk(osk)->portid == portid))
334                         break;
335                 len++;
336         }
337         if (osk)
338                 goto err;
339
340         err = -EBUSY;
341         if (nlk_sk(sk)->portid)
342                 goto err;
343
344         err = -ENOMEM;
345         if (BITS_PER_LONG > 32 && unlikely(hash->entries >= UINT_MAX))
346                 goto err;
347
348         if (len && nl_portid_hash_dilute(hash, len))
349                 head = nl_portid_hashfn(hash, portid);
350         hash->entries++;
351         nlk_sk(sk)->portid = portid;
352         sk_add_node(sk, head);
353         err = 0;
354
355 err:
356         netlink_table_ungrab();
357         return err;
358 }
359
360 static void netlink_remove(struct sock *sk)
361 {
362         netlink_table_grab();
363         if (sk_del_node_init(sk))
364                 nl_table[sk->sk_protocol].hash.entries--;
365         if (nlk_sk(sk)->subscriptions)
366                 __sk_del_bind_node(sk);
367         netlink_table_ungrab();
368 }
369
370 static struct proto netlink_proto = {
371         .name     = "NETLINK",
372         .owner    = THIS_MODULE,
373         .obj_size = sizeof(struct netlink_sock),
374 };
375
376 static int __netlink_create(struct net *net, struct socket *sock,
377                             struct mutex *cb_mutex, int protocol)
378 {
379         struct sock *sk;
380         struct netlink_sock *nlk;
381
382         sock->ops = &netlink_ops;
383
384         sk = sk_alloc(net, PF_NETLINK, GFP_KERNEL, &netlink_proto);
385         if (!sk)
386                 return -ENOMEM;
387
388         sock_init_data(sock, sk);
389
390         nlk = nlk_sk(sk);
391         if (cb_mutex) {
392                 nlk->cb_mutex = cb_mutex;
393         } else {
394                 nlk->cb_mutex = &nlk->cb_def_mutex;
395                 mutex_init(nlk->cb_mutex);
396         }
397         init_waitqueue_head(&nlk->wait);
398
399         sk->sk_destruct = netlink_sock_destruct;
400         sk->sk_protocol = protocol;
401         return 0;
402 }
403
404 static int netlink_create(struct net *net, struct socket *sock, int protocol,
405                           int kern)
406 {
407         struct module *module = NULL;
408         struct mutex *cb_mutex;
409         struct netlink_sock *nlk;
410         void (*bind)(int group);
411         int err = 0;
412
413         sock->state = SS_UNCONNECTED;
414
415         if (sock->type != SOCK_RAW && sock->type != SOCK_DGRAM)
416                 return -ESOCKTNOSUPPORT;
417
418         if (protocol < 0 || protocol >= MAX_LINKS)
419                 return -EPROTONOSUPPORT;
420
421         netlink_lock_table();
422 #ifdef CONFIG_MODULES
423         if (!nl_table[protocol].registered) {
424                 netlink_unlock_table();
425                 request_module("net-pf-%d-proto-%d", PF_NETLINK, protocol);
426                 netlink_lock_table();
427         }
428 #endif
429         if (nl_table[protocol].registered &&
430             try_module_get(nl_table[protocol].module))
431                 module = nl_table[protocol].module;
432         else
433                 err = -EPROTONOSUPPORT;
434         cb_mutex = nl_table[protocol].cb_mutex;
435         bind = nl_table[protocol].bind;
436         netlink_unlock_table();
437
438         if (err < 0)
439                 goto out;
440
441         err = __netlink_create(net, sock, cb_mutex, protocol);
442         if (err < 0)
443                 goto out_module;
444
445         local_bh_disable();
446         sock_prot_inuse_add(net, &netlink_proto, 1);
447         local_bh_enable();
448
449         nlk = nlk_sk(sock->sk);
450         nlk->module = module;
451         nlk->netlink_bind = bind;
452 out:
453         return err;
454
455 out_module:
456         module_put(module);
457         goto out;
458 }
459
460 static int netlink_release(struct socket *sock)
461 {
462         struct sock *sk = sock->sk;
463         struct netlink_sock *nlk;
464
465         if (!sk)
466                 return 0;
467
468         netlink_remove(sk);
469         sock_orphan(sk);
470         nlk = nlk_sk(sk);
471
472         /*
473          * OK. Socket is unlinked, any packets that arrive now
474          * will be purged.
475          */
476
477         sock->sk = NULL;
478         wake_up_interruptible_all(&nlk->wait);
479
480         skb_queue_purge(&sk->sk_write_queue);
481
482         if (nlk->portid) {
483                 struct netlink_notify n = {
484                                                 .net = sock_net(sk),
485                                                 .protocol = sk->sk_protocol,
486                                                 .portid = nlk->portid,
487                                           };
488                 atomic_notifier_call_chain(&netlink_chain,
489                                 NETLINK_URELEASE, &n);
490         }
491
492         module_put(nlk->module);
493
494         netlink_table_grab();
495         if (netlink_is_kernel(sk)) {
496                 BUG_ON(nl_table[sk->sk_protocol].registered == 0);
497                 if (--nl_table[sk->sk_protocol].registered == 0) {
498                         struct listeners *old;
499
500                         old = nl_deref_protected(nl_table[sk->sk_protocol].listeners);
501                         RCU_INIT_POINTER(nl_table[sk->sk_protocol].listeners, NULL);
502                         kfree_rcu(old, rcu);
503                         nl_table[sk->sk_protocol].module = NULL;
504                         nl_table[sk->sk_protocol].bind = NULL;
505                         nl_table[sk->sk_protocol].flags = 0;
506                         nl_table[sk->sk_protocol].registered = 0;
507                 }
508         } else if (nlk->subscriptions) {
509                 netlink_update_listeners(sk);
510         }
511         netlink_table_ungrab();
512
513         kfree(nlk->groups);
514         nlk->groups = NULL;
515
516         local_bh_disable();
517         sock_prot_inuse_add(sock_net(sk), &netlink_proto, -1);
518         local_bh_enable();
519         sock_put(sk);
520         return 0;
521 }
522
523 static int netlink_autobind(struct socket *sock)
524 {
525         struct sock *sk = sock->sk;
526         struct net *net = sock_net(sk);
527         struct nl_portid_hash *hash = &nl_table[sk->sk_protocol].hash;
528         struct hlist_head *head;
529         struct sock *osk;
530         s32 portid = task_tgid_vnr(current);
531         int err;
532         static s32 rover = -4097;
533
534 retry:
535         cond_resched();
536         netlink_table_grab();
537         head = nl_portid_hashfn(hash, portid);
538         sk_for_each(osk, head) {
539                 if (!net_eq(sock_net(osk), net))
540                         continue;
541                 if (nlk_sk(osk)->portid == portid) {
542                         /* Bind collision, search negative portid values. */
543                         portid = rover--;
544                         if (rover > -4097)
545                                 rover = -4097;
546                         netlink_table_ungrab();
547                         goto retry;
548                 }
549         }
550         netlink_table_ungrab();
551
552         err = netlink_insert(sk, net, portid);
553         if (err == -EADDRINUSE)
554                 goto retry;
555
556         /* If 2 threads race to autobind, that is fine.  */
557         if (err == -EBUSY)
558                 err = 0;
559
560         return err;
561 }
562
563 static inline int netlink_capable(const struct socket *sock, unsigned int flag)
564 {
565         return (nl_table[sock->sk->sk_protocol].flags & flag) ||
566                 ns_capable(sock_net(sock->sk)->user_ns, CAP_NET_ADMIN);
567 }
568
569 static void
570 netlink_update_subscriptions(struct sock *sk, unsigned int subscriptions)
571 {
572         struct netlink_sock *nlk = nlk_sk(sk);
573
574         if (nlk->subscriptions && !subscriptions)
575                 __sk_del_bind_node(sk);
576         else if (!nlk->subscriptions && subscriptions)
577                 sk_add_bind_node(sk, &nl_table[sk->sk_protocol].mc_list);
578         nlk->subscriptions = subscriptions;
579 }
580
581 static int netlink_realloc_groups(struct sock *sk)
582 {
583         struct netlink_sock *nlk = nlk_sk(sk);
584         unsigned int groups;
585         unsigned long *new_groups;
586         int err = 0;
587
588         netlink_table_grab();
589
590         groups = nl_table[sk->sk_protocol].groups;
591         if (!nl_table[sk->sk_protocol].registered) {
592                 err = -ENOENT;
593                 goto out_unlock;
594         }
595
596         if (nlk->ngroups >= groups)
597                 goto out_unlock;
598
599         new_groups = krealloc(nlk->groups, NLGRPSZ(groups), GFP_ATOMIC);
600         if (new_groups == NULL) {
601                 err = -ENOMEM;
602                 goto out_unlock;
603         }
604         memset((char *)new_groups + NLGRPSZ(nlk->ngroups), 0,
605                NLGRPSZ(groups) - NLGRPSZ(nlk->ngroups));
606
607         nlk->groups = new_groups;
608         nlk->ngroups = groups;
609  out_unlock:
610         netlink_table_ungrab();
611         return err;
612 }
613
614 static int netlink_bind(struct socket *sock, struct sockaddr *addr,
615                         int addr_len)
616 {
617         struct sock *sk = sock->sk;
618         struct net *net = sock_net(sk);
619         struct netlink_sock *nlk = nlk_sk(sk);
620         struct sockaddr_nl *nladdr = (struct sockaddr_nl *)addr;
621         int err;
622
623         if (addr_len < sizeof(struct sockaddr_nl))
624                 return -EINVAL;
625
626         if (nladdr->nl_family != AF_NETLINK)
627                 return -EINVAL;
628
629         /* Only superuser is allowed to listen multicasts */
630         if (nladdr->nl_groups) {
631                 if (!netlink_capable(sock, NL_CFG_F_NONROOT_RECV))
632                         return -EPERM;
633                 err = netlink_realloc_groups(sk);
634                 if (err)
635                         return err;
636         }
637
638         if (nlk->portid) {
639                 if (nladdr->nl_pid != nlk->portid)
640                         return -EINVAL;
641         } else {
642                 err = nladdr->nl_pid ?
643                         netlink_insert(sk, net, nladdr->nl_pid) :
644                         netlink_autobind(sock);
645                 if (err)
646                         return err;
647         }
648
649         if (!nladdr->nl_groups && (nlk->groups == NULL || !(u32)nlk->groups[0]))
650                 return 0;
651
652         netlink_table_grab();
653         netlink_update_subscriptions(sk, nlk->subscriptions +
654                                          hweight32(nladdr->nl_groups) -
655                                          hweight32(nlk->groups[0]));
656         nlk->groups[0] = (nlk->groups[0] & ~0xffffffffUL) | nladdr->nl_groups;
657         netlink_update_listeners(sk);
658         netlink_table_ungrab();
659
660         if (nlk->netlink_bind && nlk->groups[0]) {
661                 int i;
662
663                 for (i=0; i<nlk->ngroups; i++) {
664                         if (test_bit(i, nlk->groups))
665                                 nlk->netlink_bind(i);
666                 }
667         }
668
669         return 0;
670 }
671
672 static int netlink_connect(struct socket *sock, struct sockaddr *addr,
673                            int alen, int flags)
674 {
675         int err = 0;
676         struct sock *sk = sock->sk;
677         struct netlink_sock *nlk = nlk_sk(sk);
678         struct sockaddr_nl *nladdr = (struct sockaddr_nl *)addr;
679
680         if (alen < sizeof(addr->sa_family))
681                 return -EINVAL;
682
683         if (addr->sa_family == AF_UNSPEC) {
684                 sk->sk_state    = NETLINK_UNCONNECTED;
685                 nlk->dst_portid = 0;
686                 nlk->dst_group  = 0;
687                 return 0;
688         }
689         if (addr->sa_family != AF_NETLINK)
690                 return -EINVAL;
691
692         /* Only superuser is allowed to send multicasts */
693         if (nladdr->nl_groups && !netlink_capable(sock, NL_CFG_F_NONROOT_SEND))
694                 return -EPERM;
695
696         if (!nlk->portid)
697                 err = netlink_autobind(sock);
698
699         if (err == 0) {
700                 sk->sk_state    = NETLINK_CONNECTED;
701                 nlk->dst_portid = nladdr->nl_pid;
702                 nlk->dst_group  = ffs(nladdr->nl_groups);
703         }
704
705         return err;
706 }
707
708 static int netlink_getname(struct socket *sock, struct sockaddr *addr,
709                            int *addr_len, int peer)
710 {
711         struct sock *sk = sock->sk;
712         struct netlink_sock *nlk = nlk_sk(sk);
713         DECLARE_SOCKADDR(struct sockaddr_nl *, nladdr, addr);
714
715         nladdr->nl_family = AF_NETLINK;
716         nladdr->nl_pad = 0;
717         *addr_len = sizeof(*nladdr);
718
719         if (peer) {
720                 nladdr->nl_pid = nlk->dst_portid;
721                 nladdr->nl_groups = netlink_group_mask(nlk->dst_group);
722         } else {
723                 nladdr->nl_pid = nlk->portid;
724                 nladdr->nl_groups = nlk->groups ? nlk->groups[0] : 0;
725         }
726         return 0;
727 }
728
729 static void netlink_overrun(struct sock *sk)
730 {
731         struct netlink_sock *nlk = nlk_sk(sk);
732
733         if (!(nlk->flags & NETLINK_RECV_NO_ENOBUFS)) {
734                 if (!test_and_set_bit(NETLINK_CONGESTED, &nlk_sk(sk)->state)) {
735                         sk->sk_err = ENOBUFS;
736                         sk->sk_error_report(sk);
737                 }
738         }
739         atomic_inc(&sk->sk_drops);
740 }
741
742 static struct sock *netlink_getsockbyportid(struct sock *ssk, u32 portid)
743 {
744         struct sock *sock;
745         struct netlink_sock *nlk;
746
747         sock = netlink_lookup(sock_net(ssk), ssk->sk_protocol, portid);
748         if (!sock)
749                 return ERR_PTR(-ECONNREFUSED);
750
751         /* Don't bother queuing skb if kernel socket has no input function */
752         nlk = nlk_sk(sock);
753         if (sock->sk_state == NETLINK_CONNECTED &&
754             nlk->dst_portid != nlk_sk(ssk)->portid) {
755                 sock_put(sock);
756                 return ERR_PTR(-ECONNREFUSED);
757         }
758         return sock;
759 }
760
761 struct sock *netlink_getsockbyfilp(struct file *filp)
762 {
763         struct inode *inode = file_inode(filp);
764         struct sock *sock;
765
766         if (!S_ISSOCK(inode->i_mode))
767                 return ERR_PTR(-ENOTSOCK);
768
769         sock = SOCKET_I(inode)->sk;
770         if (sock->sk_family != AF_NETLINK)
771                 return ERR_PTR(-EINVAL);
772
773         sock_hold(sock);
774         return sock;
775 }
776
777 /*
778  * Attach a skb to a netlink socket.
779  * The caller must hold a reference to the destination socket. On error, the
780  * reference is dropped. The skb is not send to the destination, just all
781  * all error checks are performed and memory in the queue is reserved.
782  * Return values:
783  * < 0: error. skb freed, reference to sock dropped.
784  * 0: continue
785  * 1: repeat lookup - reference dropped while waiting for socket memory.
786  */
787 int netlink_attachskb(struct sock *sk, struct sk_buff *skb,
788                       long *timeo, struct sock *ssk)
789 {
790         struct netlink_sock *nlk;
791
792         nlk = nlk_sk(sk);
793
794         if (atomic_read(&sk->sk_rmem_alloc) > sk->sk_rcvbuf ||
795             test_bit(NETLINK_CONGESTED, &nlk->state)) {
796                 DECLARE_WAITQUEUE(wait, current);
797                 if (!*timeo) {
798                         if (!ssk || netlink_is_kernel(ssk))
799                                 netlink_overrun(sk);
800                         sock_put(sk);
801                         kfree_skb(skb);
802                         return -EAGAIN;
803                 }
804
805                 __set_current_state(TASK_INTERRUPTIBLE);
806                 add_wait_queue(&nlk->wait, &wait);
807
808                 if ((atomic_read(&sk->sk_rmem_alloc) > sk->sk_rcvbuf ||
809                      test_bit(NETLINK_CONGESTED, &nlk->state)) &&
810                     !sock_flag(sk, SOCK_DEAD))
811                         *timeo = schedule_timeout(*timeo);
812
813                 __set_current_state(TASK_RUNNING);
814                 remove_wait_queue(&nlk->wait, &wait);
815                 sock_put(sk);
816
817                 if (signal_pending(current)) {
818                         kfree_skb(skb);
819                         return sock_intr_errno(*timeo);
820                 }
821                 return 1;
822         }
823         skb_set_owner_r(skb, sk);
824         return 0;
825 }
826
827 static int __netlink_sendskb(struct sock *sk, struct sk_buff *skb)
828 {
829         int len = skb->len;
830
831         skb_queue_tail(&sk->sk_receive_queue, skb);
832         sk->sk_data_ready(sk, len);
833         return len;
834 }
835
836 int netlink_sendskb(struct sock *sk, struct sk_buff *skb)
837 {
838         int len = __netlink_sendskb(sk, skb);
839
840         sock_put(sk);
841         return len;
842 }
843
844 void netlink_detachskb(struct sock *sk, struct sk_buff *skb)
845 {
846         kfree_skb(skb);
847         sock_put(sk);
848 }
849
850 static struct sk_buff *netlink_trim(struct sk_buff *skb, gfp_t allocation)
851 {
852         int delta;
853
854         WARN_ON(skb->sk != NULL);
855
856         delta = skb->end - skb->tail;
857         if (delta * 2 < skb->truesize)
858                 return skb;
859
860         if (skb_shared(skb)) {
861                 struct sk_buff *nskb = skb_clone(skb, allocation);
862                 if (!nskb)
863                         return skb;
864                 consume_skb(skb);
865                 skb = nskb;
866         }
867
868         if (!pskb_expand_head(skb, 0, -delta, allocation))
869                 skb->truesize -= delta;
870
871         return skb;
872 }
873
874 static void netlink_rcv_wake(struct sock *sk)
875 {
876         struct netlink_sock *nlk = nlk_sk(sk);
877
878         if (skb_queue_empty(&sk->sk_receive_queue))
879                 clear_bit(NETLINK_CONGESTED, &nlk->state);
880         if (!test_bit(NETLINK_CONGESTED, &nlk->state))
881                 wake_up_interruptible(&nlk->wait);
882 }
883
884 static int netlink_unicast_kernel(struct sock *sk, struct sk_buff *skb,
885                                   struct sock *ssk)
886 {
887         int ret;
888         struct netlink_sock *nlk = nlk_sk(sk);
889
890         ret = -ECONNREFUSED;
891         if (nlk->netlink_rcv != NULL) {
892                 ret = skb->len;
893                 skb_set_owner_r(skb, sk);
894                 NETLINK_CB(skb).sk = ssk;
895                 nlk->netlink_rcv(skb);
896                 consume_skb(skb);
897         } else {
898                 kfree_skb(skb);
899         }
900         sock_put(sk);
901         return ret;
902 }
903
904 int netlink_unicast(struct sock *ssk, struct sk_buff *skb,
905                     u32 portid, int nonblock)
906 {
907         struct sock *sk;
908         int err;
909         long timeo;
910
911         skb = netlink_trim(skb, gfp_any());
912
913         timeo = sock_sndtimeo(ssk, nonblock);
914 retry:
915         sk = netlink_getsockbyportid(ssk, portid);
916         if (IS_ERR(sk)) {
917                 kfree_skb(skb);
918                 return PTR_ERR(sk);
919         }
920         if (netlink_is_kernel(sk))
921                 return netlink_unicast_kernel(sk, skb, ssk);
922
923         if (sk_filter(sk, skb)) {
924                 err = skb->len;
925                 kfree_skb(skb);
926                 sock_put(sk);
927                 return err;
928         }
929
930         err = netlink_attachskb(sk, skb, &timeo, ssk);
931         if (err == 1)
932                 goto retry;
933         if (err)
934                 return err;
935
936         return netlink_sendskb(sk, skb);
937 }
938 EXPORT_SYMBOL(netlink_unicast);
939
940 int netlink_has_listeners(struct sock *sk, unsigned int group)
941 {
942         int res = 0;
943         struct listeners *listeners;
944
945         BUG_ON(!netlink_is_kernel(sk));
946
947         rcu_read_lock();
948         listeners = rcu_dereference(nl_table[sk->sk_protocol].listeners);
949
950         if (listeners && group - 1 < nl_table[sk->sk_protocol].groups)
951                 res = test_bit(group - 1, listeners->masks);
952
953         rcu_read_unlock();
954
955         return res;
956 }
957 EXPORT_SYMBOL_GPL(netlink_has_listeners);
958
959 static int netlink_broadcast_deliver(struct sock *sk, struct sk_buff *skb)
960 {
961         struct netlink_sock *nlk = nlk_sk(sk);
962
963         if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf &&
964             !test_bit(NETLINK_CONGESTED, &nlk->state)) {
965                 skb_set_owner_r(skb, sk);
966                 __netlink_sendskb(sk, skb);
967                 return atomic_read(&sk->sk_rmem_alloc) > (sk->sk_rcvbuf >> 1);
968         }
969         return -1;
970 }
971
972 struct netlink_broadcast_data {
973         struct sock *exclude_sk;
974         struct net *net;
975         u32 portid;
976         u32 group;
977         int failure;
978         int delivery_failure;
979         int congested;
980         int delivered;
981         gfp_t allocation;
982         struct sk_buff *skb, *skb2;
983         int (*tx_filter)(struct sock *dsk, struct sk_buff *skb, void *data);
984         void *tx_data;
985 };
986
987 static int do_one_broadcast(struct sock *sk,
988                                    struct netlink_broadcast_data *p)
989 {
990         struct netlink_sock *nlk = nlk_sk(sk);
991         int val;
992
993         if (p->exclude_sk == sk)
994                 goto out;
995
996         if (nlk->portid == p->portid || p->group - 1 >= nlk->ngroups ||
997             !test_bit(p->group - 1, nlk->groups))
998                 goto out;
999
1000         if (!net_eq(sock_net(sk), p->net))
1001                 goto out;
1002
1003         if (p->failure) {
1004                 netlink_overrun(sk);
1005                 goto out;
1006         }
1007
1008         sock_hold(sk);
1009         if (p->skb2 == NULL) {
1010                 if (skb_shared(p->skb)) {
1011                         p->skb2 = skb_clone(p->skb, p->allocation);
1012                 } else {
1013                         p->skb2 = skb_get(p->skb);
1014                         /*
1015                          * skb ownership may have been set when
1016                          * delivered to a previous socket.
1017                          */
1018                         skb_orphan(p->skb2);
1019                 }
1020         }
1021         if (p->skb2 == NULL) {
1022                 netlink_overrun(sk);
1023                 /* Clone failed. Notify ALL listeners. */
1024                 p->failure = 1;
1025                 if (nlk->flags & NETLINK_BROADCAST_SEND_ERROR)
1026                         p->delivery_failure = 1;
1027         } else if (p->tx_filter && p->tx_filter(sk, p->skb2, p->tx_data)) {
1028                 kfree_skb(p->skb2);
1029                 p->skb2 = NULL;
1030         } else if (sk_filter(sk, p->skb2)) {
1031                 kfree_skb(p->skb2);
1032                 p->skb2 = NULL;
1033         } else if ((val = netlink_broadcast_deliver(sk, p->skb2)) < 0) {
1034                 netlink_overrun(sk);
1035                 if (nlk->flags & NETLINK_BROADCAST_SEND_ERROR)
1036                         p->delivery_failure = 1;
1037         } else {
1038                 p->congested |= val;
1039                 p->delivered = 1;
1040                 p->skb2 = NULL;
1041         }
1042         sock_put(sk);
1043
1044 out:
1045         return 0;
1046 }
1047
1048 int netlink_broadcast_filtered(struct sock *ssk, struct sk_buff *skb, u32 portid,
1049         u32 group, gfp_t allocation,
1050         int (*filter)(struct sock *dsk, struct sk_buff *skb, void *data),
1051         void *filter_data)
1052 {
1053         struct net *net = sock_net(ssk);
1054         struct netlink_broadcast_data info;
1055         struct sock *sk;
1056
1057         skb = netlink_trim(skb, allocation);
1058
1059         info.exclude_sk = ssk;
1060         info.net = net;
1061         info.portid = portid;
1062         info.group = group;
1063         info.failure = 0;
1064         info.delivery_failure = 0;
1065         info.congested = 0;
1066         info.delivered = 0;
1067         info.allocation = allocation;
1068         info.skb = skb;
1069         info.skb2 = NULL;
1070         info.tx_filter = filter;
1071         info.tx_data = filter_data;
1072
1073         /* While we sleep in clone, do not allow to change socket list */
1074
1075         netlink_lock_table();
1076
1077         sk_for_each_bound(sk, &nl_table[ssk->sk_protocol].mc_list)
1078                 do_one_broadcast(sk, &info);
1079
1080         consume_skb(skb);
1081
1082         netlink_unlock_table();
1083
1084         if (info.delivery_failure) {
1085                 kfree_skb(info.skb2);
1086                 return -ENOBUFS;
1087         }
1088         consume_skb(info.skb2);
1089
1090         if (info.delivered) {
1091                 if (info.congested && (allocation & __GFP_WAIT))
1092                         yield();
1093                 return 0;
1094         }
1095         return -ESRCH;
1096 }
1097 EXPORT_SYMBOL(netlink_broadcast_filtered);
1098
1099 int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, u32 portid,
1100                       u32 group, gfp_t allocation)
1101 {
1102         return netlink_broadcast_filtered(ssk, skb, portid, group, allocation,
1103                 NULL, NULL);
1104 }
1105 EXPORT_SYMBOL(netlink_broadcast);
1106
1107 struct netlink_set_err_data {
1108         struct sock *exclude_sk;
1109         u32 portid;
1110         u32 group;
1111         int code;
1112 };
1113
1114 static int do_one_set_err(struct sock *sk, struct netlink_set_err_data *p)
1115 {
1116         struct netlink_sock *nlk = nlk_sk(sk);
1117         int ret = 0;
1118
1119         if (sk == p->exclude_sk)
1120                 goto out;
1121
1122         if (!net_eq(sock_net(sk), sock_net(p->exclude_sk)))
1123                 goto out;
1124
1125         if (nlk->portid == p->portid || p->group - 1 >= nlk->ngroups ||
1126             !test_bit(p->group - 1, nlk->groups))
1127                 goto out;
1128
1129         if (p->code == ENOBUFS && nlk->flags & NETLINK_RECV_NO_ENOBUFS) {
1130                 ret = 1;
1131                 goto out;
1132         }
1133
1134         sk->sk_err = p->code;
1135         sk->sk_error_report(sk);
1136 out:
1137         return ret;
1138 }
1139
1140 /**
1141  * netlink_set_err - report error to broadcast listeners
1142  * @ssk: the kernel netlink socket, as returned by netlink_kernel_create()
1143  * @portid: the PORTID of a process that we want to skip (if any)
1144  * @groups: the broadcast group that will notice the error
1145  * @code: error code, must be negative (as usual in kernelspace)
1146  *
1147  * This function returns the number of broadcast listeners that have set the
1148  * NETLINK_RECV_NO_ENOBUFS socket option.
1149  */
1150 int netlink_set_err(struct sock *ssk, u32 portid, u32 group, int code)
1151 {
1152         struct netlink_set_err_data info;
1153         struct sock *sk;
1154         int ret = 0;
1155
1156         info.exclude_sk = ssk;
1157         info.portid = portid;
1158         info.group = group;
1159         /* sk->sk_err wants a positive error value */
1160         info.code = -code;
1161
1162         read_lock(&nl_table_lock);
1163
1164         sk_for_each_bound(sk, &nl_table[ssk->sk_protocol].mc_list)
1165                 ret += do_one_set_err(sk, &info);
1166
1167         read_unlock(&nl_table_lock);
1168         return ret;
1169 }
1170 EXPORT_SYMBOL(netlink_set_err);
1171
1172 /* must be called with netlink table grabbed */
1173 static void netlink_update_socket_mc(struct netlink_sock *nlk,
1174                                      unsigned int group,
1175                                      int is_new)
1176 {
1177         int old, new = !!is_new, subscriptions;
1178
1179         old = test_bit(group - 1, nlk->groups);
1180         subscriptions = nlk->subscriptions - old + new;
1181         if (new)
1182                 __set_bit(group - 1, nlk->groups);
1183         else
1184                 __clear_bit(group - 1, nlk->groups);
1185         netlink_update_subscriptions(&nlk->sk, subscriptions);
1186         netlink_update_listeners(&nlk->sk);
1187 }
1188
1189 static int netlink_setsockopt(struct socket *sock, int level, int optname,
1190                               char __user *optval, unsigned int optlen)
1191 {
1192         struct sock *sk = sock->sk;
1193         struct netlink_sock *nlk = nlk_sk(sk);
1194         unsigned int val = 0;
1195         int err;
1196
1197         if (level != SOL_NETLINK)
1198                 return -ENOPROTOOPT;
1199
1200         if (optlen >= sizeof(int) &&
1201             get_user(val, (unsigned int __user *)optval))
1202                 return -EFAULT;
1203
1204         switch (optname) {
1205         case NETLINK_PKTINFO:
1206                 if (val)
1207                         nlk->flags |= NETLINK_RECV_PKTINFO;
1208                 else
1209                         nlk->flags &= ~NETLINK_RECV_PKTINFO;
1210                 err = 0;
1211                 break;
1212         case NETLINK_ADD_MEMBERSHIP:
1213         case NETLINK_DROP_MEMBERSHIP: {
1214                 if (!netlink_capable(sock, NL_CFG_F_NONROOT_RECV))
1215                         return -EPERM;
1216                 err = netlink_realloc_groups(sk);
1217                 if (err)
1218                         return err;
1219                 if (!val || val - 1 >= nlk->ngroups)
1220                         return -EINVAL;
1221                 netlink_table_grab();
1222                 netlink_update_socket_mc(nlk, val,
1223                                          optname == NETLINK_ADD_MEMBERSHIP);
1224                 netlink_table_ungrab();
1225
1226                 if (nlk->netlink_bind)
1227                         nlk->netlink_bind(val);
1228
1229                 err = 0;
1230                 break;
1231         }
1232         case NETLINK_BROADCAST_ERROR:
1233                 if (val)
1234                         nlk->flags |= NETLINK_BROADCAST_SEND_ERROR;
1235                 else
1236                         nlk->flags &= ~NETLINK_BROADCAST_SEND_ERROR;
1237                 err = 0;
1238                 break;
1239         case NETLINK_NO_ENOBUFS:
1240                 if (val) {
1241                         nlk->flags |= NETLINK_RECV_NO_ENOBUFS;
1242                         clear_bit(NETLINK_CONGESTED, &nlk->state);
1243                         wake_up_interruptible(&nlk->wait);
1244                 } else {
1245                         nlk->flags &= ~NETLINK_RECV_NO_ENOBUFS;
1246                 }
1247                 err = 0;
1248                 break;
1249         default:
1250                 err = -ENOPROTOOPT;
1251         }
1252         return err;
1253 }
1254
1255 static int netlink_getsockopt(struct socket *sock, int level, int optname,
1256                               char __user *optval, int __user *optlen)
1257 {
1258         struct sock *sk = sock->sk;
1259         struct netlink_sock *nlk = nlk_sk(sk);
1260         int len, val, err;
1261
1262         if (level != SOL_NETLINK)
1263                 return -ENOPROTOOPT;
1264
1265         if (get_user(len, optlen))
1266                 return -EFAULT;
1267         if (len < 0)
1268                 return -EINVAL;
1269
1270         switch (optname) {
1271         case NETLINK_PKTINFO:
1272                 if (len < sizeof(int))
1273                         return -EINVAL;
1274                 len = sizeof(int);
1275                 val = nlk->flags & NETLINK_RECV_PKTINFO ? 1 : 0;
1276                 if (put_user(len, optlen) ||
1277                     put_user(val, optval))
1278                         return -EFAULT;
1279                 err = 0;
1280                 break;
1281         case NETLINK_BROADCAST_ERROR:
1282                 if (len < sizeof(int))
1283                         return -EINVAL;
1284                 len = sizeof(int);
1285                 val = nlk->flags & NETLINK_BROADCAST_SEND_ERROR ? 1 : 0;
1286                 if (put_user(len, optlen) ||
1287                     put_user(val, optval))
1288                         return -EFAULT;
1289                 err = 0;
1290                 break;
1291         case NETLINK_NO_ENOBUFS:
1292                 if (len < sizeof(int))
1293                         return -EINVAL;
1294                 len = sizeof(int);
1295                 val = nlk->flags & NETLINK_RECV_NO_ENOBUFS ? 1 : 0;
1296                 if (put_user(len, optlen) ||
1297                     put_user(val, optval))
1298                         return -EFAULT;
1299                 err = 0;
1300                 break;
1301         default:
1302                 err = -ENOPROTOOPT;
1303         }
1304         return err;
1305 }
1306
1307 static void netlink_cmsg_recv_pktinfo(struct msghdr *msg, struct sk_buff *skb)
1308 {
1309         struct nl_pktinfo info;
1310
1311         info.group = NETLINK_CB(skb).dst_group;
1312         put_cmsg(msg, SOL_NETLINK, NETLINK_PKTINFO, sizeof(info), &info);
1313 }
1314
1315 static int netlink_sendmsg(struct kiocb *kiocb, struct socket *sock,
1316                            struct msghdr *msg, size_t len)
1317 {
1318         struct sock_iocb *siocb = kiocb_to_siocb(kiocb);
1319         struct sock *sk = sock->sk;
1320         struct netlink_sock *nlk = nlk_sk(sk);
1321         struct sockaddr_nl *addr = msg->msg_name;
1322         u32 dst_portid;
1323         u32 dst_group;
1324         struct sk_buff *skb;
1325         int err;
1326         struct scm_cookie scm;
1327
1328         if (msg->msg_flags&MSG_OOB)
1329                 return -EOPNOTSUPP;
1330
1331         if (NULL == siocb->scm)
1332                 siocb->scm = &scm;
1333
1334         err = scm_send(sock, msg, siocb->scm, true);
1335         if (err < 0)
1336                 return err;
1337
1338         if (msg->msg_namelen) {
1339                 err = -EINVAL;
1340                 if (addr->nl_family != AF_NETLINK)
1341                         goto out;
1342                 dst_portid = addr->nl_pid;
1343                 dst_group = ffs(addr->nl_groups);
1344                 err =  -EPERM;
1345                 if ((dst_group || dst_portid) &&
1346                     !netlink_capable(sock, NL_CFG_F_NONROOT_SEND))
1347                         goto out;
1348         } else {
1349                 dst_portid = nlk->dst_portid;
1350                 dst_group = nlk->dst_group;
1351         }
1352
1353         if (!nlk->portid) {
1354                 err = netlink_autobind(sock);
1355                 if (err)
1356                         goto out;
1357         }
1358
1359         err = -EMSGSIZE;
1360         if (len > sk->sk_sndbuf - 32)
1361                 goto out;
1362         err = -ENOBUFS;
1363         skb = alloc_skb(len, GFP_KERNEL);
1364         if (skb == NULL)
1365                 goto out;
1366
1367         NETLINK_CB(skb).portid  = nlk->portid;
1368         NETLINK_CB(skb).dst_group = dst_group;
1369         NETLINK_CB(skb).creds   = siocb->scm->creds;
1370
1371         err = -EFAULT;
1372         if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
1373                 kfree_skb(skb);
1374                 goto out;
1375         }
1376
1377         err = security_netlink_send(sk, skb);
1378         if (err) {
1379                 kfree_skb(skb);
1380                 goto out;
1381         }
1382
1383         if (dst_group) {
1384                 atomic_inc(&skb->users);
1385                 netlink_broadcast(sk, skb, dst_portid, dst_group, GFP_KERNEL);
1386         }
1387         err = netlink_unicast(sk, skb, dst_portid, msg->msg_flags&MSG_DONTWAIT);
1388
1389 out:
1390         scm_destroy(siocb->scm);
1391         return err;
1392 }
1393
1394 static int netlink_recvmsg(struct kiocb *kiocb, struct socket *sock,
1395                            struct msghdr *msg, size_t len,
1396                            int flags)
1397 {
1398         struct sock_iocb *siocb = kiocb_to_siocb(kiocb);
1399         struct scm_cookie scm;
1400         struct sock *sk = sock->sk;
1401         struct netlink_sock *nlk = nlk_sk(sk);
1402         int noblock = flags&MSG_DONTWAIT;
1403         size_t copied;
1404         struct sk_buff *skb, *data_skb;
1405         int err, ret;
1406
1407         if (flags&MSG_OOB)
1408                 return -EOPNOTSUPP;
1409
1410         copied = 0;
1411
1412         skb = skb_recv_datagram(sk, flags, noblock, &err);
1413         if (skb == NULL)
1414                 goto out;
1415
1416         data_skb = skb;
1417
1418 #ifdef CONFIG_COMPAT_NETLINK_MESSAGES
1419         if (unlikely(skb_shinfo(skb)->frag_list)) {
1420                 /*
1421                  * If this skb has a frag_list, then here that means that we
1422                  * will have to use the frag_list skb's data for compat tasks
1423                  * and the regular skb's data for normal (non-compat) tasks.
1424                  *
1425                  * If we need to send the compat skb, assign it to the
1426                  * 'data_skb' variable so that it will be used below for data
1427                  * copying. We keep 'skb' for everything else, including
1428                  * freeing both later.
1429                  */
1430                 if (flags & MSG_CMSG_COMPAT)
1431                         data_skb = skb_shinfo(skb)->frag_list;
1432         }
1433 #endif
1434
1435         msg->msg_namelen = 0;
1436
1437         copied = data_skb->len;
1438         if (len < copied) {
1439                 msg->msg_flags |= MSG_TRUNC;
1440                 copied = len;
1441         }
1442
1443         skb_reset_transport_header(data_skb);
1444         err = skb_copy_datagram_iovec(data_skb, 0, msg->msg_iov, copied);
1445
1446         if (msg->msg_name) {
1447                 struct sockaddr_nl *addr = (struct sockaddr_nl *)msg->msg_name;
1448                 addr->nl_family = AF_NETLINK;
1449                 addr->nl_pad    = 0;
1450                 addr->nl_pid    = NETLINK_CB(skb).portid;
1451                 addr->nl_groups = netlink_group_mask(NETLINK_CB(skb).dst_group);
1452                 msg->msg_namelen = sizeof(*addr);
1453         }
1454
1455         if (nlk->flags & NETLINK_RECV_PKTINFO)
1456                 netlink_cmsg_recv_pktinfo(msg, skb);
1457
1458         if (NULL == siocb->scm) {
1459                 memset(&scm, 0, sizeof(scm));
1460                 siocb->scm = &scm;
1461         }
1462         siocb->scm->creds = *NETLINK_CREDS(skb);
1463         if (flags & MSG_TRUNC)
1464                 copied = data_skb->len;
1465
1466         skb_free_datagram(sk, skb);
1467
1468         if (nlk->cb && atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf / 2) {
1469                 ret = netlink_dump(sk);
1470                 if (ret) {
1471                         sk->sk_err = ret;
1472                         sk->sk_error_report(sk);
1473                 }
1474         }
1475
1476         scm_recv(sock, msg, siocb->scm, flags);
1477 out:
1478         netlink_rcv_wake(sk);
1479         return err ? : copied;
1480 }
1481
1482 static void netlink_data_ready(struct sock *sk, int len)
1483 {
1484         BUG();
1485 }
1486
1487 /*
1488  *      We export these functions to other modules. They provide a
1489  *      complete set of kernel non-blocking support for message
1490  *      queueing.
1491  */
1492
1493 struct sock *
1494 __netlink_kernel_create(struct net *net, int unit, struct module *module,
1495                         struct netlink_kernel_cfg *cfg)
1496 {
1497         struct socket *sock;
1498         struct sock *sk;
1499         struct netlink_sock *nlk;
1500         struct listeners *listeners = NULL;
1501         struct mutex *cb_mutex = cfg ? cfg->cb_mutex : NULL;
1502         unsigned int groups;
1503
1504         BUG_ON(!nl_table);
1505
1506         if (unit < 0 || unit >= MAX_LINKS)
1507                 return NULL;
1508
1509         if (sock_create_lite(PF_NETLINK, SOCK_DGRAM, unit, &sock))
1510                 return NULL;
1511
1512         /*
1513          * We have to just have a reference on the net from sk, but don't
1514          * get_net it. Besides, we cannot get and then put the net here.
1515          * So we create one inside init_net and the move it to net.
1516          */
1517
1518         if (__netlink_create(&init_net, sock, cb_mutex, unit) < 0)
1519                 goto out_sock_release_nosk;
1520
1521         sk = sock->sk;
1522         sk_change_net(sk, net);
1523
1524         if (!cfg || cfg->groups < 32)
1525                 groups = 32;
1526         else
1527                 groups = cfg->groups;
1528
1529         listeners = kzalloc(sizeof(*listeners) + NLGRPSZ(groups), GFP_KERNEL);
1530         if (!listeners)
1531                 goto out_sock_release;
1532
1533         sk->sk_data_ready = netlink_data_ready;
1534         if (cfg && cfg->input)
1535                 nlk_sk(sk)->netlink_rcv = cfg->input;
1536
1537         if (netlink_insert(sk, net, 0))
1538                 goto out_sock_release;
1539
1540         nlk = nlk_sk(sk);
1541         nlk->flags |= NETLINK_KERNEL_SOCKET;
1542
1543         netlink_table_grab();
1544         if (!nl_table[unit].registered) {
1545                 nl_table[unit].groups = groups;
1546                 rcu_assign_pointer(nl_table[unit].listeners, listeners);
1547                 nl_table[unit].cb_mutex = cb_mutex;
1548                 nl_table[unit].module = module;
1549                 if (cfg) {
1550                         nl_table[unit].bind = cfg->bind;
1551                         nl_table[unit].flags = cfg->flags;
1552                 }
1553                 nl_table[unit].registered = 1;
1554         } else {
1555                 kfree(listeners);
1556                 nl_table[unit].registered++;
1557         }
1558         netlink_table_ungrab();
1559         return sk;
1560
1561 out_sock_release:
1562         kfree(listeners);
1563         netlink_kernel_release(sk);
1564         return NULL;
1565
1566 out_sock_release_nosk:
1567         sock_release(sock);
1568         return NULL;
1569 }
1570 EXPORT_SYMBOL(__netlink_kernel_create);
1571
1572 void
1573 netlink_kernel_release(struct sock *sk)
1574 {
1575         sk_release_kernel(sk);
1576 }
1577 EXPORT_SYMBOL(netlink_kernel_release);
1578
1579 int __netlink_change_ngroups(struct sock *sk, unsigned int groups)
1580 {
1581         struct listeners *new, *old;
1582         struct netlink_table *tbl = &nl_table[sk->sk_protocol];
1583
1584         if (groups < 32)
1585                 groups = 32;
1586
1587         if (NLGRPSZ(tbl->groups) < NLGRPSZ(groups)) {
1588                 new = kzalloc(sizeof(*new) + NLGRPSZ(groups), GFP_ATOMIC);
1589                 if (!new)
1590                         return -ENOMEM;
1591                 old = nl_deref_protected(tbl->listeners);
1592                 memcpy(new->masks, old->masks, NLGRPSZ(tbl->groups));
1593                 rcu_assign_pointer(tbl->listeners, new);
1594
1595                 kfree_rcu(old, rcu);
1596         }
1597         tbl->groups = groups;
1598
1599         return 0;
1600 }
1601
1602 /**
1603  * netlink_change_ngroups - change number of multicast groups
1604  *
1605  * This changes the number of multicast groups that are available
1606  * on a certain netlink family. Note that it is not possible to
1607  * change the number of groups to below 32. Also note that it does
1608  * not implicitly call netlink_clear_multicast_users() when the
1609  * number of groups is reduced.
1610  *
1611  * @sk: The kernel netlink socket, as returned by netlink_kernel_create().
1612  * @groups: The new number of groups.
1613  */
1614 int netlink_change_ngroups(struct sock *sk, unsigned int groups)
1615 {
1616         int err;
1617
1618         netlink_table_grab();
1619         err = __netlink_change_ngroups(sk, groups);
1620         netlink_table_ungrab();
1621
1622         return err;
1623 }
1624
1625 void __netlink_clear_multicast_users(struct sock *ksk, unsigned int group)
1626 {
1627         struct sock *sk;
1628         struct netlink_table *tbl = &nl_table[ksk->sk_protocol];
1629
1630         sk_for_each_bound(sk, &tbl->mc_list)
1631                 netlink_update_socket_mc(nlk_sk(sk), group, 0);
1632 }
1633
1634 /**
1635  * netlink_clear_multicast_users - kick off multicast listeners
1636  *
1637  * This function removes all listeners from the given group.
1638  * @ksk: The kernel netlink socket, as returned by
1639  *      netlink_kernel_create().
1640  * @group: The multicast group to clear.
1641  */
1642 void netlink_clear_multicast_users(struct sock *ksk, unsigned int group)
1643 {
1644         netlink_table_grab();
1645         __netlink_clear_multicast_users(ksk, group);
1646         netlink_table_ungrab();
1647 }
1648
1649 struct nlmsghdr *
1650 __nlmsg_put(struct sk_buff *skb, u32 portid, u32 seq, int type, int len, int flags)
1651 {
1652         struct nlmsghdr *nlh;
1653         int size = nlmsg_msg_size(len);
1654
1655         nlh = (struct nlmsghdr*)skb_put(skb, NLMSG_ALIGN(size));
1656         nlh->nlmsg_type = type;
1657         nlh->nlmsg_len = size;
1658         nlh->nlmsg_flags = flags;
1659         nlh->nlmsg_pid = portid;
1660         nlh->nlmsg_seq = seq;
1661         if (!__builtin_constant_p(size) || NLMSG_ALIGN(size) - size != 0)
1662                 memset(nlmsg_data(nlh) + len, 0, NLMSG_ALIGN(size) - size);
1663         return nlh;
1664 }
1665 EXPORT_SYMBOL(__nlmsg_put);
1666
1667 /*
1668  * It looks a bit ugly.
1669  * It would be better to create kernel thread.
1670  */
1671
1672 static int netlink_dump(struct sock *sk)
1673 {
1674         struct netlink_sock *nlk = nlk_sk(sk);
1675         struct netlink_callback *cb;
1676         struct sk_buff *skb = NULL;
1677         struct nlmsghdr *nlh;
1678         int len, err = -ENOBUFS;
1679         int alloc_size;
1680
1681         mutex_lock(nlk->cb_mutex);
1682
1683         cb = nlk->cb;
1684         if (cb == NULL) {
1685                 err = -EINVAL;
1686                 goto errout_skb;
1687         }
1688
1689         alloc_size = max_t(int, cb->min_dump_alloc, NLMSG_GOODSIZE);
1690
1691         skb = sock_rmalloc(sk, alloc_size, 0, GFP_KERNEL);
1692         if (!skb)
1693                 goto errout_skb;
1694
1695         len = cb->dump(skb, cb);
1696
1697         if (len > 0) {
1698                 mutex_unlock(nlk->cb_mutex);
1699
1700                 if (sk_filter(sk, skb))
1701                         kfree_skb(skb);
1702                 else
1703                         __netlink_sendskb(sk, skb);
1704                 return 0;
1705         }
1706
1707         nlh = nlmsg_put_answer(skb, cb, NLMSG_DONE, sizeof(len), NLM_F_MULTI);
1708         if (!nlh)
1709                 goto errout_skb;
1710
1711         nl_dump_check_consistent(cb, nlh);
1712
1713         memcpy(nlmsg_data(nlh), &len, sizeof(len));
1714
1715         if (sk_filter(sk, skb))
1716                 kfree_skb(skb);
1717         else
1718                 __netlink_sendskb(sk, skb);
1719
1720         if (cb->done)
1721                 cb->done(cb);
1722         nlk->cb = NULL;
1723         mutex_unlock(nlk->cb_mutex);
1724
1725         module_put(cb->module);
1726         netlink_consume_callback(cb);
1727         return 0;
1728
1729 errout_skb:
1730         mutex_unlock(nlk->cb_mutex);
1731         kfree_skb(skb);
1732         return err;
1733 }
1734
1735 int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb,
1736                          const struct nlmsghdr *nlh,
1737                          struct netlink_dump_control *control)
1738 {
1739         struct netlink_callback *cb;
1740         struct sock *sk;
1741         struct netlink_sock *nlk;
1742         int ret;
1743
1744         cb = kzalloc(sizeof(*cb), GFP_KERNEL);
1745         if (cb == NULL)
1746                 return -ENOBUFS;
1747
1748         cb->dump = control->dump;
1749         cb->done = control->done;
1750         cb->nlh = nlh;
1751         cb->data = control->data;
1752         cb->module = control->module;
1753         cb->min_dump_alloc = control->min_dump_alloc;
1754         atomic_inc(&skb->users);
1755         cb->skb = skb;
1756
1757         sk = netlink_lookup(sock_net(ssk), ssk->sk_protocol, NETLINK_CB(skb).portid);
1758         if (sk == NULL) {
1759                 netlink_destroy_callback(cb);
1760                 return -ECONNREFUSED;
1761         }
1762         nlk = nlk_sk(sk);
1763
1764         mutex_lock(nlk->cb_mutex);
1765         /* A dump is in progress... */
1766         if (nlk->cb) {
1767                 mutex_unlock(nlk->cb_mutex);
1768                 netlink_destroy_callback(cb);
1769                 ret = -EBUSY;
1770                 goto out;
1771         }
1772         /* add reference of module which cb->dump belongs to */
1773         if (!try_module_get(cb->module)) {
1774                 mutex_unlock(nlk->cb_mutex);
1775                 netlink_destroy_callback(cb);
1776                 ret = -EPROTONOSUPPORT;
1777                 goto out;
1778         }
1779
1780         nlk->cb = cb;
1781         mutex_unlock(nlk->cb_mutex);
1782
1783         ret = netlink_dump(sk);
1784 out:
1785         sock_put(sk);
1786
1787         if (ret)
1788                 return ret;
1789
1790         /* We successfully started a dump, by returning -EINTR we
1791          * signal not to send ACK even if it was requested.
1792          */
1793         return -EINTR;
1794 }
1795 EXPORT_SYMBOL(__netlink_dump_start);
1796
1797 void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err)
1798 {
1799         struct sk_buff *skb;
1800         struct nlmsghdr *rep;
1801         struct nlmsgerr *errmsg;
1802         size_t payload = sizeof(*errmsg);
1803
1804         /* error messages get the original request appened */
1805         if (err)
1806                 payload += nlmsg_len(nlh);
1807
1808         skb = nlmsg_new(payload, GFP_KERNEL);
1809         if (!skb) {
1810                 struct sock *sk;
1811
1812                 sk = netlink_lookup(sock_net(in_skb->sk),
1813                                     in_skb->sk->sk_protocol,
1814                                     NETLINK_CB(in_skb).portid);
1815                 if (sk) {
1816                         sk->sk_err = ENOBUFS;
1817                         sk->sk_error_report(sk);
1818                         sock_put(sk);
1819                 }
1820                 return;
1821         }
1822
1823         rep = __nlmsg_put(skb, NETLINK_CB(in_skb).portid, nlh->nlmsg_seq,
1824                           NLMSG_ERROR, payload, 0);
1825         errmsg = nlmsg_data(rep);
1826         errmsg->error = err;
1827         memcpy(&errmsg->msg, nlh, err ? nlh->nlmsg_len : sizeof(*nlh));
1828         netlink_unicast(in_skb->sk, skb, NETLINK_CB(in_skb).portid, MSG_DONTWAIT);
1829 }
1830 EXPORT_SYMBOL(netlink_ack);
1831
1832 int netlink_rcv_skb(struct sk_buff *skb, int (*cb)(struct sk_buff *,
1833                                                      struct nlmsghdr *))
1834 {
1835         struct nlmsghdr *nlh;
1836         int err;
1837
1838         while (skb->len >= nlmsg_total_size(0)) {
1839                 int msglen;
1840
1841                 nlh = nlmsg_hdr(skb);
1842                 err = 0;
1843
1844                 if (nlh->nlmsg_len < NLMSG_HDRLEN || skb->len < nlh->nlmsg_len)
1845                         return 0;
1846
1847                 /* Only requests are handled by the kernel */
1848                 if (!(nlh->nlmsg_flags & NLM_F_REQUEST))
1849                         goto ack;
1850
1851                 /* Skip control messages */
1852                 if (nlh->nlmsg_type < NLMSG_MIN_TYPE)
1853                         goto ack;
1854
1855                 err = cb(skb, nlh);
1856                 if (err == -EINTR)
1857                         goto skip;
1858
1859 ack:
1860                 if (nlh->nlmsg_flags & NLM_F_ACK || err)
1861                         netlink_ack(skb, nlh, err);
1862
1863 skip:
1864                 msglen = NLMSG_ALIGN(nlh->nlmsg_len);
1865                 if (msglen > skb->len)
1866                         msglen = skb->len;
1867                 skb_pull(skb, msglen);
1868         }
1869
1870         return 0;
1871 }
1872 EXPORT_SYMBOL(netlink_rcv_skb);
1873
1874 /**
1875  * nlmsg_notify - send a notification netlink message
1876  * @sk: netlink socket to use
1877  * @skb: notification message
1878  * @portid: destination netlink portid for reports or 0
1879  * @group: destination multicast group or 0
1880  * @report: 1 to report back, 0 to disable
1881  * @flags: allocation flags
1882  */
1883 int nlmsg_notify(struct sock *sk, struct sk_buff *skb, u32 portid,
1884                  unsigned int group, int report, gfp_t flags)
1885 {
1886         int err = 0;
1887
1888         if (group) {
1889                 int exclude_portid = 0;
1890
1891                 if (report) {
1892                         atomic_inc(&skb->users);
1893                         exclude_portid = portid;
1894                 }
1895
1896                 /* errors reported via destination sk->sk_err, but propagate
1897                  * delivery errors if NETLINK_BROADCAST_ERROR flag is set */
1898                 err = nlmsg_multicast(sk, skb, exclude_portid, group, flags);
1899         }
1900
1901         if (report) {
1902                 int err2;
1903
1904                 err2 = nlmsg_unicast(sk, skb, portid);
1905                 if (!err || err == -ESRCH)
1906                         err = err2;
1907         }
1908
1909         return err;
1910 }
1911 EXPORT_SYMBOL(nlmsg_notify);
1912
1913 #ifdef CONFIG_PROC_FS
1914 struct nl_seq_iter {
1915         struct seq_net_private p;
1916         int link;
1917         int hash_idx;
1918 };
1919
1920 static struct sock *netlink_seq_socket_idx(struct seq_file *seq, loff_t pos)
1921 {
1922         struct nl_seq_iter *iter = seq->private;
1923         int i, j;
1924         struct sock *s;
1925         loff_t off = 0;
1926
1927         for (i = 0; i < MAX_LINKS; i++) {
1928                 struct nl_portid_hash *hash = &nl_table[i].hash;
1929
1930                 for (j = 0; j <= hash->mask; j++) {
1931                         sk_for_each(s, &hash->table[j]) {
1932                                 if (sock_net(s) != seq_file_net(seq))
1933                                         continue;
1934                                 if (off == pos) {
1935                                         iter->link = i;
1936                                         iter->hash_idx = j;
1937                                         return s;
1938                                 }
1939                                 ++off;
1940                         }
1941                 }
1942         }
1943         return NULL;
1944 }
1945
1946 static void *netlink_seq_start(struct seq_file *seq, loff_t *pos)
1947         __acquires(nl_table_lock)
1948 {
1949         read_lock(&nl_table_lock);
1950         return *pos ? netlink_seq_socket_idx(seq, *pos - 1) : SEQ_START_TOKEN;
1951 }
1952
1953 static void *netlink_seq_next(struct seq_file *seq, void *v, loff_t *pos)
1954 {
1955         struct sock *s;
1956         struct nl_seq_iter *iter;
1957         int i, j;
1958
1959         ++*pos;
1960
1961         if (v == SEQ_START_TOKEN)
1962                 return netlink_seq_socket_idx(seq, 0);
1963
1964         iter = seq->private;
1965         s = v;
1966         do {
1967                 s = sk_next(s);
1968         } while (s && sock_net(s) != seq_file_net(seq));
1969         if (s)
1970                 return s;
1971
1972         i = iter->link;
1973         j = iter->hash_idx + 1;
1974
1975         do {
1976                 struct nl_portid_hash *hash = &nl_table[i].hash;
1977
1978                 for (; j <= hash->mask; j++) {
1979                         s = sk_head(&hash->table[j]);
1980                         while (s && sock_net(s) != seq_file_net(seq))
1981                                 s = sk_next(s);
1982                         if (s) {
1983                                 iter->link = i;
1984                                 iter->hash_idx = j;
1985                                 return s;
1986                         }
1987                 }
1988
1989                 j = 0;
1990         } while (++i < MAX_LINKS);
1991
1992         return NULL;
1993 }
1994
1995 static void netlink_seq_stop(struct seq_file *seq, void *v)
1996         __releases(nl_table_lock)
1997 {
1998         read_unlock(&nl_table_lock);
1999 }
2000
2001
2002 static int netlink_seq_show(struct seq_file *seq, void *v)
2003 {
2004         if (v == SEQ_START_TOKEN) {
2005                 seq_puts(seq,
2006                          "sk       Eth Pid    Groups   "
2007                          "Rmem     Wmem     Dump     Locks     Drops     Inode\n");
2008         } else {
2009                 struct sock *s = v;
2010                 struct netlink_sock *nlk = nlk_sk(s);
2011
2012                 seq_printf(seq, "%pK %-3d %-6u %08x %-8d %-8d %pK %-8d %-8d %-8lu\n",
2013                            s,
2014                            s->sk_protocol,
2015                            nlk->portid,
2016                            nlk->groups ? (u32)nlk->groups[0] : 0,
2017                            sk_rmem_alloc_get(s),
2018                            sk_wmem_alloc_get(s),
2019                            nlk->cb,
2020                            atomic_read(&s->sk_refcnt),
2021                            atomic_read(&s->sk_drops),
2022                            sock_i_ino(s)
2023                         );
2024
2025         }
2026         return 0;
2027 }
2028
2029 static const struct seq_operations netlink_seq_ops = {
2030         .start  = netlink_seq_start,
2031         .next   = netlink_seq_next,
2032         .stop   = netlink_seq_stop,
2033         .show   = netlink_seq_show,
2034 };
2035
2036
2037 static int netlink_seq_open(struct inode *inode, struct file *file)
2038 {
2039         return seq_open_net(inode, file, &netlink_seq_ops,
2040                                 sizeof(struct nl_seq_iter));
2041 }
2042
2043 static const struct file_operations netlink_seq_fops = {
2044         .owner          = THIS_MODULE,
2045         .open           = netlink_seq_open,
2046         .read           = seq_read,
2047         .llseek         = seq_lseek,
2048         .release        = seq_release_net,
2049 };
2050
2051 #endif
2052
2053 int netlink_register_notifier(struct notifier_block *nb)
2054 {
2055         return atomic_notifier_chain_register(&netlink_chain, nb);
2056 }
2057 EXPORT_SYMBOL(netlink_register_notifier);
2058
2059 int netlink_unregister_notifier(struct notifier_block *nb)
2060 {
2061         return atomic_notifier_chain_unregister(&netlink_chain, nb);
2062 }
2063 EXPORT_SYMBOL(netlink_unregister_notifier);
2064
2065 static const struct proto_ops netlink_ops = {
2066         .family =       PF_NETLINK,
2067         .owner =        THIS_MODULE,
2068         .release =      netlink_release,
2069         .bind =         netlink_bind,
2070         .connect =      netlink_connect,
2071         .socketpair =   sock_no_socketpair,
2072         .accept =       sock_no_accept,
2073         .getname =      netlink_getname,
2074         .poll =         datagram_poll,
2075         .ioctl =        sock_no_ioctl,
2076         .listen =       sock_no_listen,
2077         .shutdown =     sock_no_shutdown,
2078         .setsockopt =   netlink_setsockopt,
2079         .getsockopt =   netlink_getsockopt,
2080         .sendmsg =      netlink_sendmsg,
2081         .recvmsg =      netlink_recvmsg,
2082         .mmap =         sock_no_mmap,
2083         .sendpage =     sock_no_sendpage,
2084 };
2085
2086 static const struct net_proto_family netlink_family_ops = {
2087         .family = PF_NETLINK,
2088         .create = netlink_create,
2089         .owner  = THIS_MODULE,  /* for consistency 8) */
2090 };
2091
2092 static int __net_init netlink_net_init(struct net *net)
2093 {
2094 #ifdef CONFIG_PROC_FS
2095         if (!proc_create("netlink", 0, net->proc_net, &netlink_seq_fops))
2096                 return -ENOMEM;
2097 #endif
2098         return 0;
2099 }
2100
2101 static void __net_exit netlink_net_exit(struct net *net)
2102 {
2103 #ifdef CONFIG_PROC_FS
2104         remove_proc_entry("netlink", net->proc_net);
2105 #endif
2106 }
2107
2108 static void __init netlink_add_usersock_entry(void)
2109 {
2110         struct listeners *listeners;
2111         int groups = 32;
2112
2113         listeners = kzalloc(sizeof(*listeners) + NLGRPSZ(groups), GFP_KERNEL);
2114         if (!listeners)
2115                 panic("netlink_add_usersock_entry: Cannot allocate listeners\n");
2116
2117         netlink_table_grab();
2118
2119         nl_table[NETLINK_USERSOCK].groups = groups;
2120         rcu_assign_pointer(nl_table[NETLINK_USERSOCK].listeners, listeners);
2121         nl_table[NETLINK_USERSOCK].module = THIS_MODULE;
2122         nl_table[NETLINK_USERSOCK].registered = 1;
2123         nl_table[NETLINK_USERSOCK].flags = NL_CFG_F_NONROOT_SEND;
2124
2125         netlink_table_ungrab();
2126 }
2127
2128 static struct pernet_operations __net_initdata netlink_net_ops = {
2129         .init = netlink_net_init,
2130         .exit = netlink_net_exit,
2131 };
2132
2133 static int __init netlink_proto_init(void)
2134 {
2135         int i;
2136         unsigned long limit;
2137         unsigned int order;
2138         int err = proto_register(&netlink_proto, 0);
2139
2140         if (err != 0)
2141                 goto out;
2142
2143         BUILD_BUG_ON(sizeof(struct netlink_skb_parms) > FIELD_SIZEOF(struct sk_buff, cb));
2144
2145         nl_table = kcalloc(MAX_LINKS, sizeof(*nl_table), GFP_KERNEL);
2146         if (!nl_table)
2147                 goto panic;
2148
2149         if (totalram_pages >= (128 * 1024))
2150                 limit = totalram_pages >> (21 - PAGE_SHIFT);
2151         else
2152                 limit = totalram_pages >> (23 - PAGE_SHIFT);
2153
2154         order = get_bitmask_order(limit) - 1 + PAGE_SHIFT;
2155         limit = (1UL << order) / sizeof(struct hlist_head);
2156         order = get_bitmask_order(min(limit, (unsigned long)UINT_MAX)) - 1;
2157
2158         for (i = 0; i < MAX_LINKS; i++) {
2159                 struct nl_portid_hash *hash = &nl_table[i].hash;
2160
2161                 hash->table = nl_portid_hash_zalloc(1 * sizeof(*hash->table));
2162                 if (!hash->table) {
2163                         while (i-- > 0)
2164                                 nl_portid_hash_free(nl_table[i].hash.table,
2165                                                  1 * sizeof(*hash->table));
2166                         kfree(nl_table);
2167                         goto panic;
2168                 }
2169                 hash->max_shift = order;
2170                 hash->shift = 0;
2171                 hash->mask = 0;
2172                 hash->rehash_time = jiffies;
2173         }
2174
2175         netlink_add_usersock_entry();
2176
2177         sock_register(&netlink_family_ops);
2178         register_pernet_subsys(&netlink_net_ops);
2179         /* The netlink device handler may be needed early. */
2180         rtnetlink_init();
2181 out:
2182         return err;
2183 panic:
2184         panic("netlink_init: Cannot allocate nl_table\n");
2185 }
2186
2187 core_initcall(netlink_proto_init);