Skip to content

Commit

Permalink
[NETLINK]: Call panic if nl_table allocation fails
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Akinobu Mita authored and David S. Miller committed Aug 30, 2006
1 parent 3fdf3f0 commit fab2caf
Showing 1 changed file with 6 additions and 8 deletions.
14 changes: 6 additions & 8 deletions net/netlink/af_netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand All @@ -1769,7 +1765,7 @@ static int __init netlink_proto_init(void)
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;
Expand All @@ -1786,6 +1782,8 @@ static int __init netlink_proto_init(void)
rtnetlink_init();
out:
return err;
panic:
panic("netlink_init: Cannot allocate nl_table\n");
}

core_initcall(netlink_proto_init);
Expand Down

0 comments on commit fab2caf

Please sign in to comment.