Revert to Fedora kernel-2.6.17-1.2187_FC5 patched with vs2.0.2.1; there are too many...
[linux-2.6.git] / net / netlink / af_netlink.c
1 /*
2  * NETLINK      Kernel-user communication protocol.
3  *
4  *              Authors:        Alan Cox <alan@redhat.com>
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/config.h>
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/smp_lock.h>
50 #include <linux/notifier.h>
51 #include <linux/security.h>
52 #include <linux/jhash.h>
53 #include <linux/jiffies.h>
54 #include <linux/random.h>
55 #include <linux/bitops.h>
56 #include <linux/mm.h>
57 #include <linux/types.h>
58 #include <linux/audit.h>
59 #include <linux/selinux.h>
60 #include <linux/vs_base.h>
61 #include <linux/vs_context.h>
62 #include <linux/vs_network.h>
63 #include <linux/vs_limit.h>
64
65 #include <net/sock.h>
66 #include <net/scm.h>
67 #include <net/netlink.h>
68
69 #define NLGRPSZ(x)      (ALIGN(x, sizeof(unsigned long) * 8) / 8)
70
71 struct netlink_sock {
72         /* struct sock has to be the first member of netlink_sock */
73         struct sock             sk;
74         u32                     pid;
75         u32                     dst_pid;
76         u32                     dst_group;
77         u32                     flags;
78         u32                     subscriptions;
79         u32                     ngroups;
80         unsigned long           *groups;
81         unsigned long           state;
82         wait_queue_head_t       wait;
83         struct netlink_callback *cb;
84         spinlock_t              cb_lock;
85         void                    (*data_ready)(struct sock *sk, int bytes);
86         struct module           *module;
87 };
88
89 #define NETLINK_KERNEL_SOCKET   0x1
90 #define NETLINK_RECV_PKTINFO    0x2
91
92 static inline struct netlink_sock *nlk_sk(struct sock *sk)
93 {
94         return (struct netlink_sock *)sk;
95 }
96
97 struct nl_pid_hash {
98         struct hlist_head *table;
99         unsigned long rehash_time;
100
101         unsigned int mask;
102         unsigned int shift;
103
104         unsigned int entries;
105         unsigned int max_shift;
106
107         u32 rnd;
108 };
109
110 struct netlink_table {
111         struct nl_pid_hash hash;
112         struct hlist_head mc_list;
113         unsigned long *listeners;
114         unsigned int nl_nonroot;
115         unsigned int groups;
116         struct module *module;
117         int registered;
118 };
119
120 static struct netlink_table *nl_table;
121
122 static DECLARE_WAIT_QUEUE_HEAD(nl_table_wait);
123
124 static int netlink_dump(struct sock *sk);
125 static void netlink_destroy_callback(struct netlink_callback *cb);
126
127 static DEFINE_RWLOCK(nl_table_lock);
128 static atomic_t nl_table_users = ATOMIC_INIT(0);
129
130 static ATOMIC_NOTIFIER_HEAD(netlink_chain);
131
132 static u32 netlink_group_mask(u32 group)
133 {
134         return group ? 1 << (group - 1) : 0;
135 }
136
137 static struct hlist_head *nl_pid_hashfn(struct nl_pid_hash *hash, u32 pid)
138 {
139         return &hash->table[jhash_1word(pid, hash->rnd) & hash->mask];
140 }
141
142 static void netlink_sock_destruct(struct sock *sk)
143 {
144         skb_queue_purge(&sk->sk_receive_queue);
145
146         if (!sock_flag(sk, SOCK_DEAD)) {
147                 printk("Freeing alive netlink socket %p\n", sk);
148                 return;
149         }
150         BUG_TRAP(!atomic_read(&sk->sk_rmem_alloc));
151         BUG_TRAP(!atomic_read(&sk->sk_wmem_alloc));
152         BUG_TRAP(!nlk_sk(sk)->cb);
153         BUG_TRAP(!nlk_sk(sk)->groups);
154 }
155
156 /* This lock without WQ_FLAG_EXCLUSIVE is good on UP and it is _very_ bad on SMP.
157  * Look, when several writers sleep and reader wakes them up, all but one
158  * immediately hit write lock and grab all the cpus. Exclusive sleep solves
159  * this, _but_ remember, it adds useless work on UP machines.
160  */
161
162 static void netlink_table_grab(void)
163 {
164         write_lock_bh(&nl_table_lock);
165
166         if (atomic_read(&nl_table_users)) {
167                 DECLARE_WAITQUEUE(wait, current);
168
169                 add_wait_queue_exclusive(&nl_table_wait, &wait);
170                 for(;;) {
171                         set_current_state(TASK_UNINTERRUPTIBLE);
172                         if (atomic_read(&nl_table_users) == 0)
173                                 break;
174                         write_unlock_bh(&nl_table_lock);
175                         schedule();
176                         write_lock_bh(&nl_table_lock);
177                 }
178
179                 __set_current_state(TASK_RUNNING);
180                 remove_wait_queue(&nl_table_wait, &wait);
181         }
182 }
183
184 static __inline__ void netlink_table_ungrab(void)
185 {
186         write_unlock_bh(&nl_table_lock);
187         wake_up(&nl_table_wait);
188 }
189
190 static __inline__ void
191 netlink_lock_table(void)
192 {
193         /* read_lock() synchronizes us to netlink_table_grab */
194
195         read_lock(&nl_table_lock);
196         atomic_inc(&nl_table_users);
197         read_unlock(&nl_table_lock);
198 }
199
200 static __inline__ void
201 netlink_unlock_table(void)
202 {
203         if (atomic_dec_and_test(&nl_table_users))
204                 wake_up(&nl_table_wait);
205 }
206
207 static __inline__ struct sock *netlink_lookup(int protocol, u32 pid)
208 {
209         struct nl_pid_hash *hash = &nl_table[protocol].hash;
210         struct hlist_head *head;
211         struct sock *sk;
212         struct hlist_node *node;
213
214         read_lock(&nl_table_lock);
215         head = nl_pid_hashfn(hash, pid);
216         sk_for_each(sk, node, head) {
217                 if (nlk_sk(sk)->pid == pid) {
218                         sock_hold(sk);
219                         goto found;
220                 }
221         }
222         sk = NULL;
223 found:
224         read_unlock(&nl_table_lock);
225         return sk;
226 }
227
228 static inline struct hlist_head *nl_pid_hash_alloc(size_t size)
229 {
230         if (size <= PAGE_SIZE)
231                 return kmalloc(size, GFP_ATOMIC);
232         else
233                 return (struct hlist_head *)
234                         __get_free_pages(GFP_ATOMIC, get_order(size));
235 }
236
237 static inline void nl_pid_hash_free(struct hlist_head *table, size_t size)
238 {
239         if (size <= PAGE_SIZE)
240                 kfree(table);
241         else
242                 free_pages((unsigned long)table, get_order(size));
243 }
244
245 static int nl_pid_hash_rehash(struct nl_pid_hash *hash, int grow)
246 {
247         unsigned int omask, mask, shift;
248         size_t osize, size;
249         struct hlist_head *otable, *table;
250         int i;
251
252         omask = mask = hash->mask;
253         osize = size = (mask + 1) * sizeof(*table);
254         shift = hash->shift;
255
256         if (grow) {
257                 if (++shift > hash->max_shift)
258                         return 0;
259                 mask = mask * 2 + 1;
260                 size *= 2;
261         }
262
263         table = nl_pid_hash_alloc(size);
264         if (!table)
265                 return 0;
266
267         memset(table, 0, size);
268         otable = hash->table;
269         hash->table = table;
270         hash->mask = mask;
271         hash->shift = shift;
272         get_random_bytes(&hash->rnd, sizeof(hash->rnd));
273
274         for (i = 0; i <= omask; i++) {
275                 struct sock *sk;
276                 struct hlist_node *node, *tmp;
277
278                 sk_for_each_safe(sk, node, tmp, &otable[i])
279                         __sk_add_node(sk, nl_pid_hashfn(hash, nlk_sk(sk)->pid));
280         }
281
282         nl_pid_hash_free(otable, osize);
283         hash->rehash_time = jiffies + 10 * 60 * HZ;
284         return 1;
285 }
286
287 static inline int nl_pid_hash_dilute(struct nl_pid_hash *hash, int len)
288 {
289         int avg = hash->entries >> hash->shift;
290
291         if (unlikely(avg > 1) && nl_pid_hash_rehash(hash, 1))
292                 return 1;
293
294         if (unlikely(len > avg) && time_after(jiffies, hash->rehash_time)) {
295                 nl_pid_hash_rehash(hash, 0);
296                 return 1;
297         }
298
299         return 0;
300 }
301
302 static const struct proto_ops netlink_ops;
303
304 static void
305 netlink_update_listeners(struct sock *sk)
306 {
307         struct netlink_table *tbl = &nl_table[sk->sk_protocol];
308         struct hlist_node *node;
309         unsigned long mask;
310         unsigned int i;
311
312         for (i = 0; i < NLGRPSZ(tbl->groups)/sizeof(unsigned long); i++) {
313                 mask = 0;
314                 sk_for_each_bound(sk, node, &tbl->mc_list)
315                         mask |= nlk_sk(sk)->groups[i];
316                 tbl->listeners[i] = mask;
317         }
318         /* this function is only called with the netlink table "grabbed", which
319          * makes sure updates are visible before bind or setsockopt return. */
320 }
321
322 static int netlink_insert(struct sock *sk, u32 pid)
323 {
324         struct nl_pid_hash *hash = &nl_table[sk->sk_protocol].hash;
325         struct hlist_head *head;
326         int err = -EADDRINUSE;
327         struct sock *osk;
328         struct hlist_node *node;
329         int len;
330
331         netlink_table_grab();
332         head = nl_pid_hashfn(hash, pid);
333         len = 0;
334         sk_for_each(osk, node, head) {
335                 if (nlk_sk(osk)->pid == pid)
336                         break;
337                 len++;
338         }
339         if (node)
340                 goto err;
341
342         err = -EBUSY;
343         if (nlk_sk(sk)->pid)
344                 goto err;
345
346         err = -ENOMEM;
347         if (BITS_PER_LONG > 32 && unlikely(hash->entries >= UINT_MAX))
348                 goto err;
349
350         if (len && nl_pid_hash_dilute(hash, len))
351                 head = nl_pid_hashfn(hash, pid);
352         hash->entries++;
353         nlk_sk(sk)->pid = pid;
354         sk_add_node(sk, head);
355         err = 0;
356
357 err:
358         netlink_table_ungrab();
359         return err;
360 }
361
362 static void netlink_remove(struct sock *sk)
363 {
364         netlink_table_grab();
365         if (sk_del_node_init(sk))
366                 nl_table[sk->sk_protocol].hash.entries--;
367         if (nlk_sk(sk)->subscriptions)
368                 __sk_del_bind_node(sk);
369         netlink_table_ungrab();
370 }
371
372 static struct proto netlink_proto = {
373         .name     = "NETLINK",
374         .owner    = THIS_MODULE,
375         .obj_size = sizeof(struct netlink_sock),
376 };
377
378 static int __netlink_create(struct socket *sock, int protocol)
379 {
380         struct sock *sk;
381         struct netlink_sock *nlk;
382
383         sock->ops = &netlink_ops;
384
385         sk = sk_alloc(PF_NETLINK, GFP_KERNEL, &netlink_proto, 1);
386         if (!sk)
387                 return -ENOMEM;
388
389         sock_init_data(sock, sk);
390
391         nlk = nlk_sk(sk);
392         spin_lock_init(&nlk->cb_lock);
393         init_waitqueue_head(&nlk->wait);
394
395         sk->sk_destruct = netlink_sock_destruct;
396         sk->sk_protocol = protocol;
397         return 0;
398 }
399
400 static int netlink_create(struct socket *sock, int protocol)
401 {
402         struct module *module = NULL;
403         struct netlink_sock *nlk;
404         unsigned int groups;
405         int err = 0;
406
407         sock->state = SS_UNCONNECTED;
408
409         if (sock->type != SOCK_RAW && sock->type != SOCK_DGRAM)
410                 return -ESOCKTNOSUPPORT;
411
412         if (protocol<0 || protocol >= MAX_LINKS)
413                 return -EPROTONOSUPPORT;
414
415         netlink_lock_table();
416 #ifdef CONFIG_KMOD
417         if (!nl_table[protocol].registered) {
418                 netlink_unlock_table();
419                 request_module("net-pf-%d-proto-%d", PF_NETLINK, protocol);
420                 netlink_lock_table();
421         }
422 #endif
423         if (nl_table[protocol].registered &&
424             try_module_get(nl_table[protocol].module))
425                 module = nl_table[protocol].module;
426         groups = nl_table[protocol].groups;
427         netlink_unlock_table();
428
429         if ((err = __netlink_create(sock, protocol)) < 0)
430                 goto out_module;
431
432         nlk = nlk_sk(sock->sk);
433         nlk->module = module;
434 out:
435         return err;
436
437 out_module:
438         module_put(module);
439         goto out;
440 }
441
442 static int netlink_release(struct socket *sock)
443 {
444         struct sock *sk = sock->sk;
445         struct netlink_sock *nlk;
446
447         if (!sk)
448                 return 0;
449
450         netlink_remove(sk);
451         nlk = nlk_sk(sk);
452
453         spin_lock(&nlk->cb_lock);
454         if (nlk->cb) {
455                 if (nlk->cb->done)
456                         nlk->cb->done(nlk->cb);
457                 netlink_destroy_callback(nlk->cb);
458                 nlk->cb = NULL;
459         }
460         spin_unlock(&nlk->cb_lock);
461
462         /* OK. Socket is unlinked, and, therefore,
463            no new packets will arrive */
464
465         sock_orphan(sk);
466         sock->sk = NULL;
467         wake_up_interruptible_all(&nlk->wait);
468
469         skb_queue_purge(&sk->sk_write_queue);
470
471         if (nlk->pid && !nlk->subscriptions) {
472                 struct netlink_notify n = {
473                                                 .protocol = sk->sk_protocol,
474                                                 .pid = nlk->pid,
475                                           };
476                 atomic_notifier_call_chain(&netlink_chain,
477                                 NETLINK_URELEASE, &n);
478         }       
479
480         if (nlk->module)
481                 module_put(nlk->module);
482
483         netlink_table_grab();
484         if (nlk->flags & NETLINK_KERNEL_SOCKET) {
485                 kfree(nl_table[sk->sk_protocol].listeners);
486                 nl_table[sk->sk_protocol].module = NULL;
487                 nl_table[sk->sk_protocol].registered = 0;
488         } else if (nlk->subscriptions)
489                 netlink_update_listeners(sk);
490         netlink_table_ungrab();
491
492         kfree(nlk->groups);
493         nlk->groups = NULL;
494
495         sock_put(sk);
496         return 0;
497 }
498
499 static int netlink_autobind(struct socket *sock)
500 {
501         struct sock *sk = sock->sk;
502         struct nl_pid_hash *hash = &nl_table[sk->sk_protocol].hash;
503         struct hlist_head *head;
504         struct sock *osk;
505         struct hlist_node *node;
506         s32 pid = current->tgid;
507         int err;
508         static s32 rover = -4097;
509
510 retry:
511         cond_resched();
512         netlink_table_grab();
513         head = nl_pid_hashfn(hash, pid);
514         sk_for_each(osk, node, head) {
515                 if (nlk_sk(osk)->pid == pid) {
516                         /* Bind collision, search negative pid values. */
517                         pid = rover--;
518                         if (rover > -4097)
519                                 rover = -4097;
520                         netlink_table_ungrab();
521                         goto retry;
522                 }
523         }
524         netlink_table_ungrab();
525
526         err = netlink_insert(sk, pid);
527         if (err == -EADDRINUSE)
528                 goto retry;
529
530         /* If 2 threads race to autobind, that is fine.  */
531         if (err == -EBUSY)
532                 err = 0;
533
534         return err;
535 }
536
537 static inline int netlink_capable(struct socket *sock, unsigned int flag) 
538
539         return (nl_table[sock->sk->sk_protocol].nl_nonroot & flag) ||
540                capable(CAP_NET_ADMIN);
541
542
543 static void
544 netlink_update_subscriptions(struct sock *sk, unsigned int subscriptions)
545 {
546         struct netlink_sock *nlk = nlk_sk(sk);
547
548         if (nlk->subscriptions && !subscriptions)
549                 __sk_del_bind_node(sk);
550         else if (!nlk->subscriptions && subscriptions)
551                 sk_add_bind_node(sk, &nl_table[sk->sk_protocol].mc_list);
552         nlk->subscriptions = subscriptions;
553 }
554
555 static int netlink_alloc_groups(struct sock *sk)
556 {
557         struct netlink_sock *nlk = nlk_sk(sk);
558         unsigned int groups;
559         int err = 0;
560
561         netlink_lock_table();
562         groups = nl_table[sk->sk_protocol].groups;
563         if (!nl_table[sk->sk_protocol].registered)
564                 err = -ENOENT;
565         netlink_unlock_table();
566
567         if (err)
568                 return err;
569
570         nlk->groups = kmalloc(NLGRPSZ(groups), GFP_KERNEL);
571         if (nlk->groups == NULL)
572                 return -ENOMEM;
573         memset(nlk->groups, 0, NLGRPSZ(groups));
574         nlk->ngroups = groups;
575         return 0;
576 }
577
578 static int netlink_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
579 {
580         struct sock *sk = sock->sk;
581         struct netlink_sock *nlk = nlk_sk(sk);
582         struct sockaddr_nl *nladdr = (struct sockaddr_nl *)addr;
583         int err;
584         
585         if (nladdr->nl_family != AF_NETLINK)
586                 return -EINVAL;
587
588         /* Only superuser is allowed to listen multicasts */
589         if (nladdr->nl_groups) {
590                 if (!netlink_capable(sock, NL_NONROOT_RECV))
591                         return -EPERM;
592                 if (nlk->groups == NULL) {
593                         err = netlink_alloc_groups(sk);
594                         if (err)
595                                 return err;
596                 }
597         }
598
599         if (nlk->pid) {
600                 if (nladdr->nl_pid != nlk->pid)
601                         return -EINVAL;
602         } else {
603                 err = nladdr->nl_pid ?
604                         netlink_insert(sk, nladdr->nl_pid) :
605                         netlink_autobind(sock);
606                 if (err)
607                         return err;
608         }
609
610         if (!nladdr->nl_groups && (nlk->groups == NULL || !(u32)nlk->groups[0]))
611                 return 0;
612
613         netlink_table_grab();
614         netlink_update_subscriptions(sk, nlk->subscriptions +
615                                          hweight32(nladdr->nl_groups) -
616                                          hweight32(nlk->groups[0]));
617         nlk->groups[0] = (nlk->groups[0] & ~0xffffffffUL) | nladdr->nl_groups; 
618         netlink_update_listeners(sk);
619         netlink_table_ungrab();
620
621         return 0;
622 }
623
624 static int netlink_connect(struct socket *sock, struct sockaddr *addr,
625                            int alen, int flags)
626 {
627         int err = 0;
628         struct sock *sk = sock->sk;
629         struct netlink_sock *nlk = nlk_sk(sk);
630         struct sockaddr_nl *nladdr=(struct sockaddr_nl*)addr;
631
632         if (addr->sa_family == AF_UNSPEC) {
633                 sk->sk_state    = NETLINK_UNCONNECTED;
634                 nlk->dst_pid    = 0;
635                 nlk->dst_group  = 0;
636                 return 0;
637         }
638         if (addr->sa_family != AF_NETLINK)
639                 return -EINVAL;
640
641         /* Only superuser is allowed to send multicasts */
642         if (nladdr->nl_groups && !netlink_capable(sock, NL_NONROOT_SEND))
643                 return -EPERM;
644
645         if (!nlk->pid)
646                 err = netlink_autobind(sock);
647
648         if (err == 0) {
649                 sk->sk_state    = NETLINK_CONNECTED;
650                 nlk->dst_pid    = nladdr->nl_pid;
651                 nlk->dst_group  = ffs(nladdr->nl_groups);
652         }
653
654         return err;
655 }
656
657 static int netlink_getname(struct socket *sock, struct sockaddr *addr, int *addr_len, int peer)
658 {
659         struct sock *sk = sock->sk;
660         struct netlink_sock *nlk = nlk_sk(sk);
661         struct sockaddr_nl *nladdr=(struct sockaddr_nl *)addr;
662         
663         nladdr->nl_family = AF_NETLINK;
664         nladdr->nl_pad = 0;
665         *addr_len = sizeof(*nladdr);
666
667         if (peer) {
668                 nladdr->nl_pid = nlk->dst_pid;
669                 nladdr->nl_groups = netlink_group_mask(nlk->dst_group);
670         } else {
671                 nladdr->nl_pid = nlk->pid;
672                 nladdr->nl_groups = nlk->groups ? nlk->groups[0] : 0;
673         }
674         return 0;
675 }
676
677 static void netlink_overrun(struct sock *sk)
678 {
679         if (!test_and_set_bit(0, &nlk_sk(sk)->state)) {
680                 sk->sk_err = ENOBUFS;
681                 sk->sk_error_report(sk);
682         }
683 }
684
685 static struct sock *netlink_getsockbypid(struct sock *ssk, u32 pid)
686 {
687         int protocol = ssk->sk_protocol;
688         struct sock *sock;
689         struct netlink_sock *nlk;
690
691         sock = netlink_lookup(protocol, pid);
692         if (!sock)
693                 return ERR_PTR(-ECONNREFUSED);
694
695         /* Don't bother queuing skb if kernel socket has no input function */
696         nlk = nlk_sk(sock);
697         if ((nlk->pid == 0 && !nlk->data_ready) ||
698             (sock->sk_state == NETLINK_CONNECTED &&
699              nlk->dst_pid != nlk_sk(ssk)->pid)) {
700                 sock_put(sock);
701                 return ERR_PTR(-ECONNREFUSED);
702         }
703         return sock;
704 }
705
706 struct sock *netlink_getsockbyfilp(struct file *filp)
707 {
708         struct inode *inode = filp->f_dentry->d_inode;
709         struct sock *sock;
710
711         if (!S_ISSOCK(inode->i_mode))
712                 return ERR_PTR(-ENOTSOCK);
713
714         sock = SOCKET_I(inode)->sk;
715         if (sock->sk_family != AF_NETLINK)
716                 return ERR_PTR(-EINVAL);
717
718         sock_hold(sock);
719         return sock;
720 }
721
722 /*
723  * Attach a skb to a netlink socket.
724  * The caller must hold a reference to the destination socket. On error, the
725  * reference is dropped. The skb is not send to the destination, just all
726  * all error checks are performed and memory in the queue is reserved.
727  * Return values:
728  * < 0: error. skb freed, reference to sock dropped.
729  * 0: continue
730  * 1: repeat lookup - reference dropped while waiting for socket memory.
731  */
732 int netlink_attachskb(struct sock *sk, struct sk_buff *skb, int nonblock,
733                 long timeo, struct sock *ssk)
734 {
735         struct netlink_sock *nlk;
736
737         nlk = nlk_sk(sk);
738
739         if (atomic_read(&sk->sk_rmem_alloc) > sk->sk_rcvbuf ||
740             test_bit(0, &nlk->state)) {
741                 DECLARE_WAITQUEUE(wait, current);
742                 if (!timeo) {
743                         if (!ssk || nlk_sk(ssk)->pid == 0)
744                                 netlink_overrun(sk);
745                         sock_put(sk);
746                         kfree_skb(skb);
747                         return -EAGAIN;
748                 }
749
750                 __set_current_state(TASK_INTERRUPTIBLE);
751                 add_wait_queue(&nlk->wait, &wait);
752
753                 if ((atomic_read(&sk->sk_rmem_alloc) > sk->sk_rcvbuf ||
754                      test_bit(0, &nlk->state)) &&
755                     !sock_flag(sk, SOCK_DEAD))
756                         timeo = schedule_timeout(timeo);
757
758                 __set_current_state(TASK_RUNNING);
759                 remove_wait_queue(&nlk->wait, &wait);
760                 sock_put(sk);
761
762                 if (signal_pending(current)) {
763                         kfree_skb(skb);
764                         return sock_intr_errno(timeo);
765                 }
766                 return 1;
767         }
768         skb_set_owner_r(skb, sk);
769         return 0;
770 }
771
772 int netlink_sendskb(struct sock *sk, struct sk_buff *skb, int protocol)
773 {
774         int len = skb->len;
775
776         skb_queue_tail(&sk->sk_receive_queue, skb);
777         sk->sk_data_ready(sk, len);
778         sock_put(sk);
779         return len;
780 }
781
782 void netlink_detachskb(struct sock *sk, struct sk_buff *skb)
783 {
784         kfree_skb(skb);
785         sock_put(sk);
786 }
787
788 static inline struct sk_buff *netlink_trim(struct sk_buff *skb,
789                                            gfp_t allocation)
790 {
791         int delta;
792
793         skb_orphan(skb);
794
795         delta = skb->end - skb->tail;
796         if (delta * 2 < skb->truesize)
797                 return skb;
798
799         if (skb_shared(skb)) {
800                 struct sk_buff *nskb = skb_clone(skb, allocation);
801                 if (!nskb)
802                         return skb;
803                 kfree_skb(skb);
804                 skb = nskb;
805         }
806
807         if (!pskb_expand_head(skb, 0, -delta, allocation))
808                 skb->truesize -= delta;
809
810         return skb;
811 }
812
813 int netlink_unicast(struct sock *ssk, struct sk_buff *skb, u32 pid, int nonblock)
814 {
815         struct sock *sk;
816         int err;
817         long timeo;
818
819         skb = netlink_trim(skb, gfp_any());
820
821         timeo = sock_sndtimeo(ssk, nonblock);
822 retry:
823         sk = netlink_getsockbypid(ssk, pid);
824         if (IS_ERR(sk)) {
825                 kfree_skb(skb);
826                 return PTR_ERR(sk);
827         }
828         err = netlink_attachskb(sk, skb, nonblock, timeo, ssk);
829         if (err == 1)
830                 goto retry;
831         if (err)
832                 return err;
833
834         return netlink_sendskb(sk, skb, ssk->sk_protocol);
835 }
836
837 int netlink_has_listeners(struct sock *sk, unsigned int group)
838 {
839         int res = 0;
840
841         BUG_ON(!(nlk_sk(sk)->flags & NETLINK_KERNEL_SOCKET));
842         if (group - 1 < nl_table[sk->sk_protocol].groups)
843                 res = test_bit(group - 1, nl_table[sk->sk_protocol].listeners);
844         return res;
845 }
846 EXPORT_SYMBOL_GPL(netlink_has_listeners);
847
848 static __inline__ int netlink_broadcast_deliver(struct sock *sk, struct sk_buff *skb)
849 {
850         struct netlink_sock *nlk = nlk_sk(sk);
851
852         if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf &&
853             !test_bit(0, &nlk->state)) {
854                 skb_set_owner_r(skb, sk);
855                 skb_queue_tail(&sk->sk_receive_queue, skb);
856                 sk->sk_data_ready(sk, skb->len);
857                 return atomic_read(&sk->sk_rmem_alloc) > sk->sk_rcvbuf;
858         }
859         return -1;
860 }
861
862 struct netlink_broadcast_data {
863         struct sock *exclude_sk;
864         u32 pid;
865         u32 group;
866         int failure;
867         int congested;
868         int delivered;
869         gfp_t allocation;
870         struct sk_buff *skb, *skb2;
871 };
872
873 static inline int do_one_broadcast(struct sock *sk,
874                                    struct netlink_broadcast_data *p)
875 {
876         struct netlink_sock *nlk = nlk_sk(sk);
877         int val;
878
879         if (p->exclude_sk == sk)
880                 goto out;
881
882         if (nlk->pid == p->pid || p->group - 1 >= nlk->ngroups ||
883             !test_bit(p->group - 1, nlk->groups))
884                 goto out;
885
886         if (p->failure) {
887                 netlink_overrun(sk);
888                 goto out;
889         }
890
891         sock_hold(sk);
892         if (p->skb2 == NULL) {
893                 if (skb_shared(p->skb)) {
894                         p->skb2 = skb_clone(p->skb, p->allocation);
895                 } else {
896                         p->skb2 = skb_get(p->skb);
897                         /*
898                          * skb ownership may have been set when
899                          * delivered to a previous socket.
900                          */
901                         skb_orphan(p->skb2);
902                 }
903         }
904         if (p->skb2 == NULL) {
905                 netlink_overrun(sk);
906                 /* Clone failed. Notify ALL listeners. */
907                 p->failure = 1;
908         } else if ((val = netlink_broadcast_deliver(sk, p->skb2)) < 0) {
909                 netlink_overrun(sk);
910         } else {
911                 p->congested |= val;
912                 p->delivered = 1;
913                 p->skb2 = NULL;
914         }
915         sock_put(sk);
916
917 out:
918         return 0;
919 }
920
921 int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, u32 pid,
922                       u32 group, gfp_t allocation)
923 {
924         struct netlink_broadcast_data info;
925         struct hlist_node *node;
926         struct sock *sk;
927
928         skb = netlink_trim(skb, allocation);
929
930         info.exclude_sk = ssk;
931         info.pid = pid;
932         info.group = group;
933         info.failure = 0;
934         info.congested = 0;
935         info.delivered = 0;
936         info.allocation = allocation;
937         info.skb = skb;
938         info.skb2 = NULL;
939
940         /* While we sleep in clone, do not allow to change socket list */
941
942         netlink_lock_table();
943
944         sk_for_each_bound(sk, node, &nl_table[ssk->sk_protocol].mc_list)
945                 do_one_broadcast(sk, &info);
946
947         kfree_skb(skb);
948
949         netlink_unlock_table();
950
951         if (info.skb2)
952                 kfree_skb(info.skb2);
953
954         if (info.delivered) {
955                 if (info.congested && (allocation & __GFP_WAIT))
956                         yield();
957                 return 0;
958         }
959         if (info.failure)
960                 return -ENOBUFS;
961         return -ESRCH;
962 }
963
964 struct netlink_set_err_data {
965         struct sock *exclude_sk;
966         u32 pid;
967         u32 group;
968         int code;
969 };
970
971 static inline int do_one_set_err(struct sock *sk,
972                                  struct netlink_set_err_data *p)
973 {
974         struct netlink_sock *nlk = nlk_sk(sk);
975
976         if (sk == p->exclude_sk)
977                 goto out;
978
979         if (nlk->pid == p->pid || p->group - 1 >= nlk->ngroups ||
980             !test_bit(p->group - 1, nlk->groups))
981                 goto out;
982
983         sk->sk_err = p->code;
984         sk->sk_error_report(sk);
985 out:
986         return 0;
987 }
988
989 void netlink_set_err(struct sock *ssk, u32 pid, u32 group, int code)
990 {
991         struct netlink_set_err_data info;
992         struct hlist_node *node;
993         struct sock *sk;
994
995         info.exclude_sk = ssk;
996         info.pid = pid;
997         info.group = group;
998         info.code = code;
999
1000         read_lock(&nl_table_lock);
1001
1002         sk_for_each_bound(sk, node, &nl_table[ssk->sk_protocol].mc_list)
1003                 do_one_set_err(sk, &info);
1004
1005         read_unlock(&nl_table_lock);
1006 }
1007
1008 static int netlink_setsockopt(struct socket *sock, int level, int optname,
1009                               char __user *optval, int optlen)
1010 {
1011         struct sock *sk = sock->sk;
1012         struct netlink_sock *nlk = nlk_sk(sk);
1013         int val = 0, err;
1014
1015         if (level != SOL_NETLINK)
1016                 return -ENOPROTOOPT;
1017
1018         if (optlen >= sizeof(int) &&
1019             get_user(val, (int __user *)optval))
1020                 return -EFAULT;
1021
1022         switch (optname) {
1023         case NETLINK_PKTINFO:
1024                 if (val)
1025                         nlk->flags |= NETLINK_RECV_PKTINFO;
1026                 else
1027                         nlk->flags &= ~NETLINK_RECV_PKTINFO;
1028                 err = 0;
1029                 break;
1030         case NETLINK_ADD_MEMBERSHIP:
1031         case NETLINK_DROP_MEMBERSHIP: {
1032                 unsigned int subscriptions;
1033                 int old, new = optname == NETLINK_ADD_MEMBERSHIP ? 1 : 0;
1034
1035                 if (!netlink_capable(sock, NL_NONROOT_RECV))
1036                         return -EPERM;
1037                 if (nlk->groups == NULL) {
1038                         err = netlink_alloc_groups(sk);
1039                         if (err)
1040                                 return err;
1041                 }
1042                 if (!val || val - 1 >= nlk->ngroups)
1043                         return -EINVAL;
1044                 netlink_table_grab();
1045                 old = test_bit(val - 1, nlk->groups);
1046                 subscriptions = nlk->subscriptions - old + new;
1047                 if (new)
1048                         __set_bit(val - 1, nlk->groups);
1049                 else
1050                         __clear_bit(val - 1, nlk->groups);
1051                 netlink_update_subscriptions(sk, subscriptions);
1052                 netlink_update_listeners(sk);
1053                 netlink_table_ungrab();
1054                 err = 0;
1055                 break;
1056         }
1057         default:
1058                 err = -ENOPROTOOPT;
1059         }
1060         return err;
1061 }
1062
1063 static int netlink_getsockopt(struct socket *sock, int level, int optname,
1064                               char __user *optval, int __user *optlen)
1065 {
1066         struct sock *sk = sock->sk;
1067         struct netlink_sock *nlk = nlk_sk(sk);
1068         int len, val, err;
1069
1070         if (level != SOL_NETLINK)
1071                 return -ENOPROTOOPT;
1072
1073         if (get_user(len, optlen))
1074                 return -EFAULT;
1075         if (len < 0)
1076                 return -EINVAL;
1077
1078         switch (optname) {
1079         case NETLINK_PKTINFO:
1080                 if (len < sizeof(int))
1081                         return -EINVAL;
1082                 len = sizeof(int);
1083                 val = nlk->flags & NETLINK_RECV_PKTINFO ? 1 : 0;
1084                 put_user(len, optlen);
1085                 put_user(val, optval);
1086                 err = 0;
1087                 break;
1088         default:
1089                 err = -ENOPROTOOPT;
1090         }
1091         return err;
1092 }
1093
1094 static void netlink_cmsg_recv_pktinfo(struct msghdr *msg, struct sk_buff *skb)
1095 {
1096         struct nl_pktinfo info;
1097
1098         info.group = NETLINK_CB(skb).dst_group;
1099         put_cmsg(msg, SOL_NETLINK, NETLINK_PKTINFO, sizeof(info), &info);
1100 }
1101
1102 static inline void netlink_rcv_wake(struct sock *sk)
1103 {
1104         struct netlink_sock *nlk = nlk_sk(sk);
1105
1106         if (skb_queue_empty(&sk->sk_receive_queue))
1107                 clear_bit(0, &nlk->state);
1108         if (!test_bit(0, &nlk->state))
1109                 wake_up_interruptible(&nlk->wait);
1110 }
1111
1112 static int netlink_sendmsg(struct kiocb *kiocb, struct socket *sock,
1113                            struct msghdr *msg, size_t len)
1114 {
1115         struct sock_iocb *siocb = kiocb_to_siocb(kiocb);
1116         struct sock *sk = sock->sk;
1117         struct netlink_sock *nlk = nlk_sk(sk);
1118         struct sockaddr_nl *addr=msg->msg_name;
1119         u32 dst_pid;
1120         u32 dst_group;
1121         struct sk_buff *skb;
1122         int err;
1123         struct scm_cookie scm;
1124
1125         if (msg->msg_flags&MSG_OOB)
1126                 return -EOPNOTSUPP;
1127
1128         if (NULL == siocb->scm)
1129                 siocb->scm = &scm;
1130         err = scm_send(sock, msg, siocb->scm);
1131         if (err < 0)
1132                 return err;
1133
1134         if (msg->msg_namelen) {
1135                 if (addr->nl_family != AF_NETLINK)
1136                         return -EINVAL;
1137                 dst_pid = addr->nl_pid;
1138                 dst_group = ffs(addr->nl_groups);
1139                 if (dst_group && !netlink_capable(sock, NL_NONROOT_SEND))
1140                         return -EPERM;
1141         } else {
1142                 dst_pid = nlk->dst_pid;
1143                 dst_group = nlk->dst_group;
1144         }
1145
1146         if (!nlk->pid) {
1147                 err = netlink_autobind(sock);
1148                 if (err)
1149                         goto out;
1150         }
1151
1152         err = -EMSGSIZE;
1153         if (len > sk->sk_sndbuf - 32)
1154                 goto out;
1155         err = -ENOBUFS;
1156         skb = alloc_skb(len, GFP_KERNEL);
1157         if (skb==NULL)
1158                 goto out;
1159
1160         NETLINK_CB(skb).pid     = nlk->pid;
1161         NETLINK_CB(skb).dst_pid = dst_pid;
1162         NETLINK_CB(skb).dst_group = dst_group;
1163         NETLINK_CB(skb).loginuid = audit_get_loginuid(current->audit_context);
1164         selinux_get_task_sid(current, &(NETLINK_CB(skb).sid));
1165         memcpy(NETLINK_CREDS(skb), &siocb->scm->creds, sizeof(struct ucred));
1166
1167         /* What can I do? Netlink is asynchronous, so that
1168            we will have to save current capabilities to
1169            check them, when this message will be delivered
1170            to corresponding kernel module.   --ANK (980802)
1171          */
1172
1173         err = -EFAULT;
1174         if (memcpy_fromiovec(skb_put(skb,len), msg->msg_iov, len)) {
1175                 kfree_skb(skb);
1176                 goto out;
1177         }
1178
1179         err = security_netlink_send(sk, skb);
1180         if (err) {
1181                 kfree_skb(skb);
1182                 goto out;
1183         }
1184
1185         if (dst_group) {
1186                 atomic_inc(&skb->users);
1187                 netlink_broadcast(sk, skb, dst_pid, dst_group, GFP_KERNEL);
1188         }
1189         err = netlink_unicast(sk, skb, dst_pid, msg->msg_flags&MSG_DONTWAIT);
1190
1191 out:
1192         return err;
1193 }
1194
1195 static int netlink_recvmsg(struct kiocb *kiocb, struct socket *sock,
1196                            struct msghdr *msg, size_t len,
1197                            int flags)
1198 {
1199         struct sock_iocb *siocb = kiocb_to_siocb(kiocb);
1200         struct scm_cookie scm;
1201         struct sock *sk = sock->sk;
1202         struct netlink_sock *nlk = nlk_sk(sk);
1203         int noblock = flags&MSG_DONTWAIT;
1204         size_t copied;
1205         struct sk_buff *skb;
1206         int err;
1207
1208         if (flags&MSG_OOB)
1209                 return -EOPNOTSUPP;
1210
1211         copied = 0;
1212
1213         skb = skb_recv_datagram(sk,flags,noblock,&err);
1214         if (skb==NULL)
1215                 goto out;
1216
1217         msg->msg_namelen = 0;
1218
1219         copied = skb->len;
1220         if (len < copied) {
1221                 msg->msg_flags |= MSG_TRUNC;
1222                 copied = len;
1223         }
1224
1225         skb->h.raw = skb->data;
1226         err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
1227
1228         if (msg->msg_name) {
1229                 struct sockaddr_nl *addr = (struct sockaddr_nl*)msg->msg_name;
1230                 addr->nl_family = AF_NETLINK;
1231                 addr->nl_pad    = 0;
1232                 addr->nl_pid    = NETLINK_CB(skb).pid;
1233                 addr->nl_groups = netlink_group_mask(NETLINK_CB(skb).dst_group);
1234                 msg->msg_namelen = sizeof(*addr);
1235         }
1236
1237         if (nlk->flags & NETLINK_RECV_PKTINFO)
1238                 netlink_cmsg_recv_pktinfo(msg, skb);
1239
1240         if (NULL == siocb->scm) {
1241                 memset(&scm, 0, sizeof(scm));
1242                 siocb->scm = &scm;
1243         }
1244         siocb->scm->creds = *NETLINK_CREDS(skb);
1245         skb_free_datagram(sk, skb);
1246
1247         if (nlk->cb && atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf / 2)
1248                 netlink_dump(sk);
1249
1250         scm_recv(sock, msg, siocb->scm, flags);
1251
1252 out:
1253         netlink_rcv_wake(sk);
1254         return err ? : copied;
1255 }
1256
1257 static void netlink_data_ready(struct sock *sk, int len)
1258 {
1259         struct netlink_sock *nlk = nlk_sk(sk);
1260
1261         if (nlk->data_ready)
1262                 nlk->data_ready(sk, len);
1263         netlink_rcv_wake(sk);
1264 }
1265
1266 /*
1267  *      We export these functions to other modules. They provide a 
1268  *      complete set of kernel non-blocking support for message
1269  *      queueing.
1270  */
1271
1272 struct sock *
1273 netlink_kernel_create(int unit, unsigned int groups,
1274                       void (*input)(struct sock *sk, int len),
1275                       struct module *module)
1276 {
1277         struct socket *sock;
1278         struct sock *sk;
1279         struct netlink_sock *nlk;
1280         unsigned long *listeners = NULL;
1281
1282         if (!nl_table)
1283                 return NULL;
1284
1285         if (unit<0 || unit>=MAX_LINKS)
1286                 return NULL;
1287
1288         if (sock_create_lite(PF_NETLINK, SOCK_DGRAM, unit, &sock))
1289                 return NULL;
1290
1291         if (__netlink_create(sock, unit) < 0)
1292                 goto out_sock_release;
1293
1294         if (groups < 32)
1295                 groups = 32;
1296
1297         listeners = kzalloc(NLGRPSZ(groups), GFP_KERNEL);
1298         if (!listeners)
1299                 goto out_sock_release;
1300
1301         sk = sock->sk;
1302         sk->sk_data_ready = netlink_data_ready;
1303         if (input)
1304                 nlk_sk(sk)->data_ready = input;
1305
1306         if (netlink_insert(sk, 0))
1307                 goto out_sock_release;
1308
1309         nlk = nlk_sk(sk);
1310         nlk->flags |= NETLINK_KERNEL_SOCKET;
1311
1312         netlink_table_grab();
1313         nl_table[unit].groups = groups;
1314         nl_table[unit].listeners = listeners;
1315         nl_table[unit].module = module;
1316         nl_table[unit].registered = 1;
1317         netlink_table_ungrab();
1318
1319         return sk;
1320
1321 out_sock_release:
1322         kfree(listeners);
1323         sock_release(sock);
1324         return NULL;
1325 }
1326
1327 void netlink_set_nonroot(int protocol, unsigned int flags)
1328
1329         if ((unsigned int)protocol < MAX_LINKS) 
1330                 nl_table[protocol].nl_nonroot = flags;
1331
1332
1333 static void netlink_destroy_callback(struct netlink_callback *cb)
1334 {
1335         if (cb->skb)
1336                 kfree_skb(cb->skb);
1337         kfree(cb);
1338 }
1339
1340 /*
1341  * It looks a bit ugly.
1342  * It would be better to create kernel thread.
1343  */
1344
1345 static int netlink_dump(struct sock *sk)
1346 {
1347         struct netlink_sock *nlk = nlk_sk(sk);
1348         struct netlink_callback *cb;
1349         struct sk_buff *skb;
1350         struct nlmsghdr *nlh;
1351         int len;
1352         
1353         skb = sock_rmalloc(sk, NLMSG_GOODSIZE, 0, GFP_KERNEL);
1354         if (!skb)
1355                 return -ENOBUFS;
1356
1357         spin_lock(&nlk->cb_lock);
1358
1359         cb = nlk->cb;
1360         if (cb == NULL) {
1361                 spin_unlock(&nlk->cb_lock);
1362                 kfree_skb(skb);
1363                 return -EINVAL;
1364         }
1365
1366         len = cb->dump(skb, cb);
1367
1368         if (len > 0) {
1369                 spin_unlock(&nlk->cb_lock);
1370                 skb_queue_tail(&sk->sk_receive_queue, skb);
1371                 sk->sk_data_ready(sk, len);
1372                 return 0;
1373         }
1374
1375         nlh = NLMSG_NEW_ANSWER(skb, cb, NLMSG_DONE, sizeof(len), NLM_F_MULTI);
1376         memcpy(NLMSG_DATA(nlh), &len, sizeof(len));
1377         skb_queue_tail(&sk->sk_receive_queue, skb);
1378         sk->sk_data_ready(sk, skb->len);
1379
1380         if (cb->done)
1381                 cb->done(cb);
1382         nlk->cb = NULL;
1383         spin_unlock(&nlk->cb_lock);
1384
1385         netlink_destroy_callback(cb);
1386         return 0;
1387
1388 nlmsg_failure:
1389         return -ENOBUFS;
1390 }
1391
1392 int netlink_dump_start(struct sock *ssk, struct sk_buff *skb,
1393                        struct nlmsghdr *nlh,
1394                        int (*dump)(struct sk_buff *skb, struct netlink_callback*),
1395                        int (*done)(struct netlink_callback*))
1396 {
1397         struct netlink_callback *cb;
1398         struct sock *sk;
1399         struct netlink_sock *nlk;
1400
1401         cb = kmalloc(sizeof(*cb), GFP_KERNEL);
1402         if (cb == NULL)
1403                 return -ENOBUFS;
1404
1405         memset(cb, 0, sizeof(*cb));
1406         cb->dump = dump;
1407         cb->done = done;
1408         cb->nlh = nlh;
1409         atomic_inc(&skb->users);
1410         cb->skb = skb;
1411
1412         sk = netlink_lookup(ssk->sk_protocol, NETLINK_CB(skb).pid);
1413         if (sk == NULL) {
1414                 netlink_destroy_callback(cb);
1415                 return -ECONNREFUSED;
1416         }
1417         nlk = nlk_sk(sk);
1418         /* A dump is in progress... */
1419         spin_lock(&nlk->cb_lock);
1420         if (nlk->cb) {
1421                 spin_unlock(&nlk->cb_lock);
1422                 netlink_destroy_callback(cb);
1423                 sock_put(sk);
1424                 return -EBUSY;
1425         }
1426         nlk->cb = cb;
1427         spin_unlock(&nlk->cb_lock);
1428
1429         netlink_dump(sk);
1430         sock_put(sk);
1431         return 0;
1432 }
1433
1434 void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err)
1435 {
1436         struct sk_buff *skb;
1437         struct nlmsghdr *rep;
1438         struct nlmsgerr *errmsg;
1439         int size;
1440
1441         if (err == 0)
1442                 size = NLMSG_SPACE(sizeof(struct nlmsgerr));
1443         else
1444                 size = NLMSG_SPACE(4 + NLMSG_ALIGN(nlh->nlmsg_len));
1445
1446         skb = alloc_skb(size, GFP_KERNEL);
1447         if (!skb) {
1448                 struct sock *sk;
1449
1450                 sk = netlink_lookup(in_skb->sk->sk_protocol,
1451                                     NETLINK_CB(in_skb).pid);
1452                 if (sk) {
1453                         sk->sk_err = ENOBUFS;
1454                         sk->sk_error_report(sk);
1455                         sock_put(sk);
1456                 }
1457                 return;
1458         }
1459
1460         rep = __nlmsg_put(skb, NETLINK_CB(in_skb).pid, nlh->nlmsg_seq,
1461                           NLMSG_ERROR, sizeof(struct nlmsgerr), 0);
1462         errmsg = NLMSG_DATA(rep);
1463         errmsg->error = err;
1464         memcpy(&errmsg->msg, nlh, err ? nlh->nlmsg_len : sizeof(struct nlmsghdr));
1465         netlink_unicast(in_skb->sk, skb, NETLINK_CB(in_skb).pid, MSG_DONTWAIT);
1466 }
1467
1468 static int netlink_rcv_skb(struct sk_buff *skb, int (*cb)(struct sk_buff *,
1469                                                      struct nlmsghdr *, int *))
1470 {
1471         unsigned int total_len;
1472         struct nlmsghdr *nlh;
1473         int err;
1474
1475         while (skb->len >= nlmsg_total_size(0)) {
1476                 nlh = (struct nlmsghdr *) skb->data;
1477
1478                 if (nlh->nlmsg_len < NLMSG_HDRLEN || skb->len < nlh->nlmsg_len)
1479                         return 0;
1480
1481                 total_len = min(NLMSG_ALIGN(nlh->nlmsg_len), skb->len);
1482
1483                 if (cb(skb, nlh, &err) < 0) {
1484                         /* Not an error, but we have to interrupt processing
1485                          * here. Note: that in this case we do not pull
1486                          * message from skb, it will be processed later.
1487                          */
1488                         if (err == 0)
1489                                 return -1;
1490                         netlink_ack(skb, nlh, err);
1491                 } else if (nlh->nlmsg_flags & NLM_F_ACK)
1492                         netlink_ack(skb, nlh, 0);
1493
1494                 skb_pull(skb, total_len);
1495         }
1496
1497         return 0;
1498 }
1499
1500 /**
1501  * nelink_run_queue - Process netlink receive queue.
1502  * @sk: Netlink socket containing the queue
1503  * @qlen: Place to store queue length upon entry
1504  * @cb: Callback function invoked for each netlink message found
1505  *
1506  * Processes as much as there was in the queue upon entry and invokes
1507  * a callback function for each netlink message found. The callback
1508  * function may refuse a message by returning a negative error code
1509  * but setting the error pointer to 0 in which case this function
1510  * returns with a qlen != 0.
1511  *
1512  * qlen must be initialized to 0 before the initial entry, afterwards
1513  * the function may be called repeatedly until qlen reaches 0.
1514  */
1515 void netlink_run_queue(struct sock *sk, unsigned int *qlen,
1516                        int (*cb)(struct sk_buff *, struct nlmsghdr *, int *))
1517 {
1518         struct sk_buff *skb;
1519
1520         if (!*qlen || *qlen > skb_queue_len(&sk->sk_receive_queue))
1521                 *qlen = skb_queue_len(&sk->sk_receive_queue);
1522
1523         for (; *qlen; (*qlen)--) {
1524                 skb = skb_dequeue(&sk->sk_receive_queue);
1525                 if (netlink_rcv_skb(skb, cb)) {
1526                         if (skb->len)
1527                                 skb_queue_head(&sk->sk_receive_queue, skb);
1528                         else {
1529                                 kfree_skb(skb);
1530                                 (*qlen)--;
1531                         }
1532                         break;
1533                 }
1534
1535                 kfree_skb(skb);
1536         }
1537 }
1538
1539 /**
1540  * netlink_queue_skip - Skip netlink message while processing queue.
1541  * @nlh: Netlink message to be skipped
1542  * @skb: Socket buffer containing the netlink messages.
1543  *
1544  * Pulls the given netlink message off the socket buffer so the next
1545  * call to netlink_queue_run() will not reconsider the message.
1546  */
1547 void netlink_queue_skip(struct nlmsghdr *nlh, struct sk_buff *skb)
1548 {
1549         int msglen = NLMSG_ALIGN(nlh->nlmsg_len);
1550
1551         if (msglen > skb->len)
1552                 msglen = skb->len;
1553
1554         skb_pull(skb, msglen);
1555 }
1556
1557 #ifdef CONFIG_PROC_FS
1558 struct nl_seq_iter {
1559         int link;
1560         int hash_idx;
1561 };
1562
1563 static struct sock *netlink_seq_socket_idx(struct seq_file *seq, loff_t pos)
1564 {
1565         struct nl_seq_iter *iter = seq->private;
1566         int i, j;
1567         struct sock *s;
1568         struct hlist_node *node;
1569         loff_t off = 0;
1570
1571         for (i=0; i<MAX_LINKS; i++) {
1572                 struct nl_pid_hash *hash = &nl_table[i].hash;
1573
1574                 for (j = 0; j <= hash->mask; j++) {
1575                         sk_for_each(s, node, &hash->table[j]) {
1576                                 if (off == pos) {
1577                                         iter->link = i;
1578                                         iter->hash_idx = j;
1579                                         return s;
1580                                 }
1581                                 ++off;
1582                         }
1583                 }
1584         }
1585         return NULL;
1586 }
1587
1588 static void *netlink_seq_start(struct seq_file *seq, loff_t *pos)
1589 {
1590         read_lock(&nl_table_lock);
1591         return *pos ? netlink_seq_socket_idx(seq, *pos - 1) : SEQ_START_TOKEN;
1592 }
1593
1594 static void *netlink_seq_next(struct seq_file *seq, void *v, loff_t *pos)
1595 {
1596         struct sock *s;
1597         struct nl_seq_iter *iter;
1598         int i, j;
1599
1600         ++*pos;
1601
1602         if (v == SEQ_START_TOKEN)
1603                 return netlink_seq_socket_idx(seq, 0);
1604                 
1605         s = sk_next(v);
1606         if (s)
1607                 return s;
1608
1609         iter = seq->private;
1610         i = iter->link;
1611         j = iter->hash_idx + 1;
1612
1613         do {
1614                 struct nl_pid_hash *hash = &nl_table[i].hash;
1615
1616                 for (; j <= hash->mask; j++) {
1617                         s = sk_head(&hash->table[j]);
1618                         if (s) {
1619                                 iter->link = i;
1620                                 iter->hash_idx = j;
1621                                 return s;
1622                         }
1623                 }
1624
1625                 j = 0;
1626         } while (++i < MAX_LINKS);
1627
1628         return NULL;
1629 }
1630
1631 static void netlink_seq_stop(struct seq_file *seq, void *v)
1632 {
1633         read_unlock(&nl_table_lock);
1634 }
1635
1636
1637 static int netlink_seq_show(struct seq_file *seq, void *v)
1638 {
1639         if (v == SEQ_START_TOKEN)
1640                 seq_puts(seq,
1641                          "sk       Eth Pid    Groups   "
1642                          "Rmem     Wmem     Dump     Locks\n");
1643         else {
1644                 struct sock *s = v;
1645                 struct netlink_sock *nlk = nlk_sk(s);
1646
1647                 seq_printf(seq, "%p %-3d %-6d %08x %-8d %-8d %p %d\n",
1648                            s,
1649                            s->sk_protocol,
1650                            nlk->pid,
1651                            nlk->groups ? (u32)nlk->groups[0] : 0,
1652                            atomic_read(&s->sk_rmem_alloc),
1653                            atomic_read(&s->sk_wmem_alloc),
1654                            nlk->cb,
1655                            atomic_read(&s->sk_refcnt)
1656                         );
1657
1658         }
1659         return 0;
1660 }
1661
1662 static struct seq_operations netlink_seq_ops = {
1663         .start  = netlink_seq_start,
1664         .next   = netlink_seq_next,
1665         .stop   = netlink_seq_stop,
1666         .show   = netlink_seq_show,
1667 };
1668
1669
1670 static int netlink_seq_open(struct inode *inode, struct file *file)
1671 {
1672         struct seq_file *seq;
1673         struct nl_seq_iter *iter;
1674         int err;
1675
1676         iter = kmalloc(sizeof(*iter), GFP_KERNEL);
1677         if (!iter)
1678                 return -ENOMEM;
1679
1680         err = seq_open(file, &netlink_seq_ops);
1681         if (err) {
1682                 kfree(iter);
1683                 return err;
1684         }
1685
1686         memset(iter, 0, sizeof(*iter));
1687         seq = file->private_data;
1688         seq->private = iter;
1689         return 0;
1690 }
1691
1692 static struct file_operations netlink_seq_fops = {
1693         .owner          = THIS_MODULE,
1694         .open           = netlink_seq_open,
1695         .read           = seq_read,
1696         .llseek         = seq_lseek,
1697         .release        = seq_release_private,
1698 };
1699
1700 #endif
1701
1702 int netlink_register_notifier(struct notifier_block *nb)
1703 {
1704         return atomic_notifier_chain_register(&netlink_chain, nb);
1705 }
1706
1707 int netlink_unregister_notifier(struct notifier_block *nb)
1708 {
1709         return atomic_notifier_chain_unregister(&netlink_chain, nb);
1710 }
1711                 
1712 static const struct proto_ops netlink_ops = {
1713         .family =       PF_NETLINK,
1714         .owner =        THIS_MODULE,
1715         .release =      netlink_release,
1716         .bind =         netlink_bind,
1717         .connect =      netlink_connect,
1718         .socketpair =   sock_no_socketpair,
1719         .accept =       sock_no_accept,
1720         .getname =      netlink_getname,
1721         .poll =         datagram_poll,
1722         .ioctl =        sock_no_ioctl,
1723         .listen =       sock_no_listen,
1724         .shutdown =     sock_no_shutdown,
1725         .setsockopt =   netlink_setsockopt,
1726         .getsockopt =   netlink_getsockopt,
1727         .sendmsg =      netlink_sendmsg,
1728         .recvmsg =      netlink_recvmsg,
1729         .mmap =         sock_no_mmap,
1730         .sendpage =     sock_no_sendpage,
1731 };
1732
1733 static struct net_proto_family netlink_family_ops = {
1734         .family = PF_NETLINK,
1735         .create = netlink_create,
1736         .owner  = THIS_MODULE,  /* for consistency 8) */
1737 };
1738
1739 extern void netlink_skb_parms_too_large(void);
1740
1741 static int __init netlink_proto_init(void)
1742 {
1743         struct sk_buff *dummy_skb;
1744         int i;
1745         unsigned long max;
1746         unsigned int order;
1747         int err = proto_register(&netlink_proto, 0);
1748
1749         if (err != 0)
1750                 goto out;
1751
1752         if (sizeof(struct netlink_skb_parms) > sizeof(dummy_skb->cb))
1753                 netlink_skb_parms_too_large();
1754
1755         nl_table = kmalloc(sizeof(*nl_table) * MAX_LINKS, GFP_KERNEL);
1756         if (!nl_table) {
1757 enomem:
1758                 printk(KERN_CRIT "netlink_init: Cannot allocate nl_table\n");
1759                 return -ENOMEM;
1760         }
1761
1762         memset(nl_table, 0, sizeof(*nl_table) * MAX_LINKS);
1763
1764         if (num_physpages >= (128 * 1024))
1765                 max = num_physpages >> (21 - PAGE_SHIFT);
1766         else
1767                 max = num_physpages >> (23 - PAGE_SHIFT);
1768
1769         order = get_bitmask_order(max) - 1 + PAGE_SHIFT;
1770         max = (1UL << order) / sizeof(struct hlist_head);
1771         order = get_bitmask_order(max > UINT_MAX ? UINT_MAX : max) - 1;
1772
1773         for (i = 0; i < MAX_LINKS; i++) {
1774                 struct nl_pid_hash *hash = &nl_table[i].hash;
1775
1776                 hash->table = nl_pid_hash_alloc(1 * sizeof(*hash->table));
1777                 if (!hash->table) {
1778                         while (i-- > 0)
1779                                 nl_pid_hash_free(nl_table[i].hash.table,
1780                                                  1 * sizeof(*hash->table));
1781                         kfree(nl_table);
1782                         goto enomem;
1783                 }
1784                 memset(hash->table, 0, 1 * sizeof(*hash->table));
1785                 hash->max_shift = order;
1786                 hash->shift = 0;
1787                 hash->mask = 0;
1788                 hash->rehash_time = jiffies;
1789         }
1790
1791         sock_register(&netlink_family_ops);
1792 #ifdef CONFIG_PROC_FS
1793         proc_net_fops_create("netlink", 0, &netlink_seq_fops);
1794 #endif
1795         /* The netlink device handler may be needed early. */ 
1796         rtnetlink_init();
1797 out:
1798         return err;
1799 }
1800
1801 core_initcall(netlink_proto_init);
1802
1803 EXPORT_SYMBOL(netlink_ack);
1804 EXPORT_SYMBOL(netlink_run_queue);
1805 EXPORT_SYMBOL(netlink_queue_skip);
1806 EXPORT_SYMBOL(netlink_broadcast);
1807 EXPORT_SYMBOL(netlink_dump_start);
1808 EXPORT_SYMBOL(netlink_kernel_create);
1809 EXPORT_SYMBOL(netlink_register_notifier);
1810 EXPORT_SYMBOL(netlink_set_err);
1811 EXPORT_SYMBOL(netlink_set_nonroot);
1812 EXPORT_SYMBOL(netlink_unicast);
1813 EXPORT_SYMBOL(netlink_unregister_notifier);
1814