* [PATCH] 2.2: cs89x0, fix more kmallocs unchecked
@ 2000-12-23 22:18 Arnaldo Carvalho de Melo
0 siblings, 0 replies; only message in thread
From: Arnaldo Carvalho de Melo @ 2000-12-23 22:18 UTC (permalink / raw)
To: Alan Cox; +Cc: linux-kernel
Alan,
I talked with Russell in private and this patch fixes some issues
with the previous one, included in 2.2.19-pre3, and it also checks for
another kmalloc result in init_module.
Another question, by what I saw the HAVE_DEVLIST thing is not used
anymore (dunno if it ever was used), should we get rid of it in this and in
some other old drivers?
- Arnaldo
--- linux-2.2.19-3/drivers/net/cs89x0.c Sat Dec 23 18:13:25 2000
+++ linux-2.2.19-3.acme/drivers/net/cs89x0.c Sat Dec 23 20:08:24 2000
@@ -28,11 +28,12 @@
Alan Cox : Removed 1.2 support, added 2.1 extra counters.
- Arnaldo Melo : release resources on failure in cs89x0_probe1
+ Arnaldo Melo : release resources on failure in cs89x0_probe1 and
+ init_module
*/
static char *version =
-"cs89x0.c:v1.03 11/26/96 Russell Nelson <nelson@crynwr.com>\n";
+"cs89x0.c:v1.04 11/26/96 Russell Nelson <nelson@crynwr.com>\n";
/* ======================= configure the driver here ======================= */
@@ -251,7 +252,6 @@
struct net_local *lp;
static unsigned version_printed = 0;
int i;
- char priv_alloced_here = 0;
unsigned rev_type = 0;
int eeprom_buff[CHKSUM_LEN];
@@ -261,7 +261,6 @@
if (!dev->priv)
return -ENOMEM;
memset(dev->priv, 0, sizeof(struct net_local));
- priv_alloced_here = 1;
}
lp = (struct net_local *)dev->priv;
@@ -394,10 +393,8 @@
printk("\n");
return 0;
-err: if (priv_alloced_here) {
- kfree(dev->priv);
- dev->priv = NULL;
- }
+err: kfree(dev->priv);
+ dev->priv = NULL;
return -ENODEV;
}
@@ -1053,6 +1050,7 @@
init_module(void)
{
struct net_local *lp;
+ int ret;
net_debug = debug;
dev_cs89x0.name = namespace;
@@ -1060,6 +1058,8 @@
dev_cs89x0.base_addr = io;
dev_cs89x0.init = cs89x0_probe;
dev_cs89x0.priv = kmalloc(sizeof(struct net_local), GFP_KERNEL);
+ if (!dev_cs89x0.priv)
+ return -ENOMEM;
memset(dev_cs89x0.priv, 0, sizeof(struct net_local));
lp = (struct net_local *)dev_cs89x0.priv;
@@ -1076,16 +1076,21 @@
if (duplex==-1)
lp->auto_neg_cnf = AUTO_NEG_ENABLE;
+ ret = -EPERM;
if (io == 0) {
printk(KERN_NOTICE "cs89x0.c: Module autoprobing not allowed.\n");
printk(KERN_NOTICE "cs89x0.c: Append io=0xNNN\n");
- return -EPERM;
+ goto err;
}
+ ret = -ENXIO;
if (register_netdev(&dev_cs89x0) != 0) {
printk(KERN_WARNING "cs89x0.c: No card found at 0x%x\n", io);
- return -ENXIO;
+ goto err;
}
return 0;
+err: kfree(dev_cs89x0.priv);
+ dev_cs89x0.priv = NULL;
+ return ret;
}
void
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2000-12-24 0:39 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2000-12-23 22:18 [PATCH] 2.2: cs89x0, fix more kmallocs unchecked Arnaldo Carvalho de Melo
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.