[NETLINK]: Call panic if nl_table allocation fails
authorAkinobu Mita <mita@miraclelinux.com>
Tue, 29 Aug 2006 09:15:24 +0000 (02:15 -0700)
committerDavid S. Miller <davem@sunset.davemloft.net>
Wed, 30 Aug 2006 04:22:18 +0000 (21:22 -0700)
This patch makes crash happen if initialization of nl_table fails
in initcalls. It is better than getting use after free crash later.

Signed-off-by: Akinobu Mita <mita@miraclelinux.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/netlink/af_netlink.c

index b85c1f9f12885409a6ac744003fa2c2e2a655077..8b85036ba8e3939f367a02f9bbf74818d55236ab 100644 (file)
@@ -1273,8 +1273,7 @@ netlink_kernel_create(int unit, unsigned int groups,
        struct netlink_sock *nlk;
        unsigned long *listeners = NULL;
 
-       if (!nl_table)
-               return NULL;
+       BUG_ON(!nl_table);
 
        if (unit<0 || unit>=MAX_LINKS)
                return NULL;
@@ -1745,11 +1744,8 @@ static int __init netlink_proto_init(void)
                netlink_skb_parms_too_large();
 
        nl_table = kcalloc(MAX_LINKS, sizeof(*nl_table), GFP_KERNEL);
-       if (!nl_table) {
-enomem:
-               printk(KERN_CRIT "netlink_init: Cannot allocate nl_table\n");
-               return -ENOMEM;
-       }
+       if (!nl_table)
+               goto panic;
 
        if (num_physpages >= (128 * 1024))
                max = num_physpages >> (21 - PAGE_SHIFT);
@@ -1769,7 +1765,7 @@ enomem:
                                nl_pid_hash_free(nl_table[i].hash.table,
                                                 1 * sizeof(*hash->table));
                        kfree(nl_table);
-                       goto enomem;
+                       goto panic;
                }
                memset(hash->table, 0, 1 * sizeof(*hash->table));
                hash->max_shift = order;
@@ -1786,6 +1782,8 @@ enomem:
        rtnetlink_init();
 out:
        return err;
+panic:
+       panic("netlink_init: Cannot allocate nl_table\n");
 }
 
 core_initcall(netlink_proto_init);