projects
/
openwrt
/
svn-archive
/
archive.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
37aa9bc
)
Check the return values of kmalloc()
author
Michael Büsch
<mb@bu3sch.de>
Thu, 13 Mar 2008 15:22:46 +0000
(15:22 +0000)
committer
Michael Büsch
<mb@bu3sch.de>
Thu, 13 Mar 2008 15:22:46 +0000
(15:22 +0000)
SVN-Revision: 10599
package/switch/src/switch-core.c
patch
|
blob
|
history
diff --git
a/package/switch/src/switch-core.c
b/package/switch/src/switch-core.c
index e0aa541f4fd6a492a1a63ab65a41f424531cd841..87aa9729ccbd05c7e82063e8034c3edcac3507de 100644
(file)
--- a/
package/switch/src/switch-core.c
+++ b/
package/switch/src/switch-core.c
@@
-158,6
+158,8
@@
static void add_handler(switch_driver *driver, const switch_config *handler, str
switch_proc_handler *tmp;
tmp = (switch_proc_handler *) kmalloc(sizeof(switch_proc_handler), GFP_KERNEL);
switch_proc_handler *tmp;
tmp = (switch_proc_handler *) kmalloc(sizeof(switch_proc_handler), GFP_KERNEL);
+ if (!tmp)
+ return;
INIT_LIST_HEAD(&tmp->list);
tmp->parent = parent;
tmp->nr = nr;
INIT_LIST_HEAD(&tmp->list);
tmp->parent = parent;
tmp->nr = nr;
@@
-239,11
+241,26
@@
static int do_register(switch_driver *driver)
switch_priv *priv;
int i;
char buf[4];
switch_priv *priv;
int i;
char buf[4];
-
- if ((priv = kmalloc(sizeof(switch_priv), GFP_KERNEL)) == NULL)
- return -ENOBUFS;
+
+ priv = kmalloc(sizeof(switch_priv), GFP_KERNEL);
+ if (!priv)
+ return -ENOMEM;
driver->data = (void *) priv;
driver->data = (void *) priv;
+ priv->ports = kmalloc((driver->ports + 1) * sizeof(struct proc_dir_entry *),
+ GFP_KERNEL);
+ if (!priv->ports) {
+ kfree(priv);
+ return -ENOMEM;
+ }
+ priv->vlans = kmalloc((driver->vlans + 1) * sizeof(struct proc_dir_entry *),
+ GFP_KERNEL);
+ if (!priv->vlans) {
+ kfree(priv->ports);
+ kfree(priv);
+ return -ENOMEM;
+ }
+
INIT_LIST_HEAD(&priv->data.list);
priv->nr = drv_num++;
INIT_LIST_HEAD(&priv->data.list);
priv->nr = drv_num++;
@@
-254,7
+271,6
@@
static int do_register(switch_driver *driver)
}
priv->port_dir = proc_mkdir("port", priv->driver_dir);
}
priv->port_dir = proc_mkdir("port", priv->driver_dir);
- priv->ports = kmalloc((driver->ports + 1) * sizeof(struct proc_dir_entry *), GFP_KERNEL);
for (i = 0; i < driver->ports; i++) {
sprintf(buf, "%d", i);
priv->ports[i] = proc_mkdir(buf, priv->port_dir);
for (i = 0; i < driver->ports; i++) {
sprintf(buf, "%d", i);
priv->ports[i] = proc_mkdir(buf, priv->port_dir);
@@
-264,7
+280,6
@@
static int do_register(switch_driver *driver)
priv->ports[i] = NULL;
priv->vlan_dir = proc_mkdir("vlan", priv->driver_dir);
priv->ports[i] = NULL;
priv->vlan_dir = proc_mkdir("vlan", priv->driver_dir);
- priv->vlans = kmalloc((driver->vlans + 1) * sizeof(struct proc_dir_entry *), GFP_KERNEL);
for (i = 0; i < driver->vlans; i++) {
sprintf(buf, "%d", i);
priv->vlans[i] = proc_mkdir(buf, priv->vlan_dir);
for (i = 0; i < driver->vlans; i++) {
sprintf(buf, "%d", i);
priv->vlans[i] = proc_mkdir(buf, priv->vlan_dir);
@@
-339,6
+354,8
@@
switch_vlan_config *switch_parse_vlan(switch_driver *driver, char *buf)
int j, u, p, s;
c = kmalloc(sizeof(switch_vlan_config), GFP_KERNEL);
int j, u, p, s;
c = kmalloc(sizeof(switch_vlan_config), GFP_KERNEL);
+ if (!c)
+ return NULL;
memset(c, 0, sizeof(switch_vlan_config));
while (isspace(*buf)) buf++;
memset(c, 0, sizeof(switch_vlan_config));
while (isspace(*buf)) buf++;
@@
-392,7
+409,7
@@
int switch_register_driver(switch_driver *driver)
struct list_head *pos;
switch_driver *new;
int ret;
struct list_head *pos;
switch_driver *new;
int ret;
-
+
list_for_each(pos, &drivers.list) {
if (strcmp(list_entry(pos, switch_driver, list)->name, driver->name) == 0) {
printk("Switch driver '%s' already exists in the kernel\n", driver->name);
list_for_each(pos, &drivers.list) {
if (strcmp(list_entry(pos, switch_driver, list)->name, driver->name) == 0) {
printk("Switch driver '%s' already exists in the kernel\n", driver->name);
@@
-405,6
+422,8
@@
int switch_register_driver(switch_driver *driver)
}
new = kmalloc(sizeof(switch_driver), GFP_KERNEL);
}
new = kmalloc(sizeof(switch_driver), GFP_KERNEL);
+ if (!new)
+ return -ENOMEM;
memcpy(new, driver, sizeof(switch_driver));
new->name = strdup(driver->name);
new->interface = strdup(driver->interface);
memcpy(new, driver, sizeof(switch_driver));
new->name = strdup(driver->name);
new->interface = strdup(driver->interface);