Commit fab2caf6 authored by Akinobu Mita's avatar Akinobu Mita Committed by David S. Miller

[NETLINK]: Call panic if nl_table allocation fails

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: default avatarAkinobu Mita <mita@miraclelinux.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3fdf3f0c
...@@ -1273,8 +1273,7 @@ netlink_kernel_create(int unit, unsigned int groups, ...@@ -1273,8 +1273,7 @@ netlink_kernel_create(int unit, unsigned int groups,
struct netlink_sock *nlk; struct netlink_sock *nlk;
unsigned long *listeners = NULL; unsigned long *listeners = NULL;
if (!nl_table) BUG_ON(!nl_table);
return NULL;
if (unit<0 || unit>=MAX_LINKS) if (unit<0 || unit>=MAX_LINKS)
return NULL; return NULL;
...@@ -1745,11 +1744,8 @@ static int __init netlink_proto_init(void) ...@@ -1745,11 +1744,8 @@ static int __init netlink_proto_init(void)
netlink_skb_parms_too_large(); netlink_skb_parms_too_large();
nl_table = kcalloc(MAX_LINKS, sizeof(*nl_table), GFP_KERNEL); nl_table = kcalloc(MAX_LINKS, sizeof(*nl_table), GFP_KERNEL);
if (!nl_table) { if (!nl_table)
enomem: goto panic;
printk(KERN_CRIT "netlink_init: Cannot allocate nl_table\n");
return -ENOMEM;
}
if (num_physpages >= (128 * 1024)) if (num_physpages >= (128 * 1024))
max = num_physpages >> (21 - PAGE_SHIFT); max = num_physpages >> (21 - PAGE_SHIFT);
...@@ -1769,7 +1765,7 @@ static int __init netlink_proto_init(void) ...@@ -1769,7 +1765,7 @@ static int __init netlink_proto_init(void)
nl_pid_hash_free(nl_table[i].hash.table, nl_pid_hash_free(nl_table[i].hash.table,
1 * sizeof(*hash->table)); 1 * sizeof(*hash->table));
kfree(nl_table); kfree(nl_table);
goto enomem; goto panic;
} }
memset(hash->table, 0, 1 * sizeof(*hash->table)); memset(hash->table, 0, 1 * sizeof(*hash->table));
hash->max_shift = order; hash->max_shift = order;
...@@ -1786,6 +1782,8 @@ static int __init netlink_proto_init(void) ...@@ -1786,6 +1782,8 @@ static int __init netlink_proto_init(void)
rtnetlink_init(); rtnetlink_init();
out: out:
return err; return err;
panic:
panic("netlink_init: Cannot allocate nl_table\n");
} }
core_initcall(netlink_proto_init); core_initcall(netlink_proto_init);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment