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