lkml.org 
[lkml]   [2000]   [Aug]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH] part2 - checking kmalloc, init_etherdev and other fixes
Hi,

This message was sent to Linus, but the limit for the list is
40000 bytes, so I'm breaking it in two pieces so that interested
reviewers in this list can comment on the patch. This is the
second part.

This patch mostly includes checks for kmalloc and init_etherdev
in the net drivers, but also fixes some bugs on some drivers,
please take a look and consider aplying.

- Arnaldo


diff -uNr linux-2.4.0-test6-pre7/drivers/net/hplance.c linux-2.4.0-test6-pre7.acme/drivers/net/hplance.c
--- linux-2.4.0-test6-pre7/drivers/net/hplance.c Mon Jun 19 17:30:58 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/hplance.c Tue Aug 8 00:08:27 2000
@@ -106,8 +106,10 @@
struct hplance_private *lp;
int i;

- if (dev == NULL)
- dev = init_etherdev(0, sizeof(struct hplance_private));
+ if (dev == NULL) {
+ if ((dev = init_etherdev(0, sizeof(struct hplance_private))) == NULL)
+ return -ENOMEM;
+ }
else
{
dev->priv = kmalloc(sizeof(struct hplance_private), GFP_KERNEL);
diff -uNr linux-2.4.0-test6-pre7/drivers/net/hydra.c linux-2.4.0-test6-pre7.acme/drivers/net/hydra.c
--- linux-2.4.0-test6-pre7/drivers/net/hydra.c Sun Feb 13 17:21:42 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/hydra.c Mon Aug 7 22:17:52 2000
@@ -13,6 +13,11 @@
/* The Amiganet is a Zorro-II board made by Hydra Systems. It contains a */
/* NS8390 NIC (network interface controller) clone, 16 or 64K on-board RAM */
/* and 10BASE-2 (thin coax) and AUI connectors. */
+/* */
+/* Changes */
+/* Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 08/06/2000 */
+/* - check init_etherdev in hydra_probe */
+/* - dev->priv is already zeroed by init_etherdev */


#include <linux/module.h>
@@ -176,8 +181,13 @@
strcpy(z->name, "Hydra Ethernet Card");

dev = init_etherdev(NULL, sizeof(struct hydra_private));
- memset(dev->priv, 0, sizeof(struct hydra_private));
-
+
+ if (!dev) {
+ release_mem_region(base_addr, 0x20);
+ release_mem_region(board, 0x4000);
+ continue;
+ }
+
for(j = 0; j < ETHER_ADDR_LEN; j++)
dev->dev_addr[j] = *((u8 *)ZTWO_VADDR(board + HYDRA_ADDRPROM + 2*j));

diff -uNr linux-2.4.0-test6-pre7/drivers/net/ibmlana.c linux-2.4.0-test6-pre7.acme/drivers/net/ibmlana.c
--- linux-2.4.0-test6-pre7/drivers/net/ibmlana.c Fri Jul 28 06:34:44 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/ibmlana.c Mon Aug 7 22:17:52 2000
@@ -70,6 +70,10 @@
June 1st, 2000
corrected version codes, added support for the latest 2.3 changes

+ Fixes:
+ Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 08/03/2000
+ - check kmalloc return in ibmlana_probe
+
*************************************************************************/

#include <linux/version.h>
@@ -1046,7 +1050,7 @@
/* can't work without an MCA bus ;-) */

if (MCA_bus == 0)
- return ENODEV;
+ return -ENODEV;

/* start address of 1 --> forced detection */

@@ -1055,10 +1059,17 @@

/* search through slots */

- if (dev != NULL) {
- base = dev->mem_start;
- irq = dev->irq;
- }
+ base = dev->mem_start;
+ irq = dev->irq;
+
+ /* allocate structure */
+
+ priv = dev->priv =
+ (ibmlana_priv *) kmalloc(sizeof(ibmlana_priv), GFP_KERNEL);
+
+ if (!priv)
+ return -ENOMEM;
+
slot = mca_find_adapter(IBM_LANA_ID, startslot);

while (slot != -1) {
@@ -1101,7 +1112,7 @@
/* nothing found ? */

if (slot == -1)
- return ((base != 0) || (irq != 0)) ? ENXIO : ENODEV;
+ return ((base != 0) || (irq != 0)) ? -ENXIO : -ENODEV;

/* announce success */
printk("%s: IBM LAN Adapter/A found in slot %d\n", dev->name,
@@ -1124,10 +1135,6 @@
mca_mark_as_used(slot);
#endif

- /* allocate structure */
-
- priv = dev->priv =
- (ibmlana_priv *) kmalloc(sizeof(ibmlana_priv), GFP_KERNEL);
priv->slot = slot;
priv->realirq = irq;
priv->medium = medium;
diff -uNr linux-2.4.0-test6-pre7/drivers/net/jazzsonic.c linux-2.4.0-test6-pre7.acme/drivers/net/jazzsonic.c
--- linux-2.4.0-test6-pre7/drivers/net/jazzsonic.c Thu Aug 26 18:28:05 1999
+++ linux-2.4.0-test6-pre7.acme/drivers/net/jazzsonic.c Mon Aug 7 22:17:52 2000
@@ -11,6 +11,10 @@
* A driver for the onboard Sonic ethernet controller on Mips Jazz
* systems (Acer Pica-61, Mips Magnum 4000, Olivetti M700 and
* perhaps others, too)
+ *
+ * Changes:
+ * Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 08/06/2000
+ * - check init_etherdev return in sonic_probe1
*/

#include <linux/kernel.h>
@@ -144,11 +148,12 @@
return -ENODEV;
}

- request_region(base_addr, 0x100, "SONIC");
-
/* Allocate a new 'dev' if needed. */
if (dev == NULL)
- dev = init_etherdev(0, sizeof(struct sonic_local));
+ if ((dev = init_etherdev(0, sizeof(struct sonic_local))) == NULL)
+ return -ENOMEM;
+
+ request_region(base_addr, 0x100, "SONIC");

if (sonic_debug && version_printed++ == 0)
printk(version);
diff -uNr linux-2.4.0-test6-pre7/drivers/net/lance.c linux-2.4.0-test6-pre7.acme/drivers/net/lance.c
--- linux-2.4.0-test6-pre7/drivers/net/lance.c Mon Jun 19 17:30:58 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/lance.c Mon Aug 7 22:17:52 2000
@@ -23,6 +23,8 @@
- added PCnetPCI II (79C970A) to chip table
Paul Gortmaker (gpg109@rsphy1.anu.edu.au):
- hopefully fix above so Linux/Alpha can use ISA cards too.
+ Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 08/03/2000
+ - checking kmalloc return in some places in lance_probe1
8/20/96 Fixed 7990 autoIRQ failure and reversed unneeded alignment -djb
v1.12 10/27/97 Module support -djb
v1.14 2/3/98 Module support modified, made PCI support optional -djb
@@ -488,9 +490,21 @@
lp->name = chipname;
lp->rx_buffs = (unsigned long)kmalloc(PKT_BUF_SZ*RX_RING_SIZE,
GFP_DMA | GFP_KERNEL);
- if (lance_need_isa_bounce_buffers)
+
+ if (!lp->rx_buffs) {
+ kfree(lp);
+ return -ENODEV;
+ }
+
+ if (lance_need_isa_bounce_buffers) {
lp->tx_bounce_buffs = kmalloc(PKT_BUF_SZ*TX_RING_SIZE,
GFP_DMA | GFP_KERNEL);
+ if (!lp->tx_bounce_buffs) {
+ kfree(lp);
+ kfree((void *)lp->rx_buffs);
+ return -ENODEV;
+ }
+ }
else
lp->tx_bounce_buffs = NULL;

diff -uNr linux-2.4.0-test6-pre7/drivers/net/lne390.c linux-2.4.0-test6-pre7.acme/drivers/net/lne390.c
--- linux-2.4.0-test6-pre7/drivers/net/lne390.c Mon Jun 19 17:30:58 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/lne390.c Tue Aug 8 00:09:34 2000
@@ -164,8 +164,11 @@

/* We should have a "dev" from Space.c or the static module table. */
if (dev == NULL) {
- printk("lne390.c: Passed a NULL device.\n");
- dev = init_etherdev(0, 0);
+ printk(KERN_ERR "lne390.c: Passed a NULL device.\n");
+ if ((dev = init_etherdev(0, 0)) == NULL) {
+ printk(KERN_ERR "lne390.c: init_etherdev failed, out of memory.\n");
+ return -ENOMEM;
+ }
}

/* Allocate dev->priv and fill in 8390 specific dev fields. */
diff -uNr linux-2.4.0-test6-pre7/drivers/net/mac89x0.c linux-2.4.0-test6-pre7.acme/drivers/net/mac89x0.c
--- linux-2.4.0-test6-pre7/drivers/net/mac89x0.c Mon Jun 19 17:30:58 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/mac89x0.c Mon Aug 7 22:17:52 2000
@@ -48,6 +48,10 @@
I/O space and NuBus interrupts for these cards, but neglected to
provide anything even remotely resembling a NuBus ROM. Therefore we
have to probe for them in a brain-damaged ISA-like fashion.
+
+ Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 07/30/2000
+ - check if kmalloc(dev->priv) in mac89x0_probe was successful
+ - the same for init_module
*/

static char *version =
@@ -215,6 +219,10 @@
/* Initialize the net_device structure. */
if (dev->priv == NULL) {
dev->priv = kmalloc(sizeof(struct net_local), GFP_KERNEL);
+
+ if (!dev->priv)
+ return -ENOMEM;
+
memset(dev->priv, 0, sizeof(struct net_local));
}
lp = (struct net_local *)dev->priv;
@@ -637,6 +645,11 @@
dev_cs89x0.name = namespace;
dev_cs89x0.init = mac89x0_probe;
dev_cs89x0.priv = kmalloc(sizeof(struct net_local), GFP_KERNEL);
+
+ if (!dev_cs89x0.priv) {
+ printk(KERN_WARNING "mac89x0.c: out of memory\n");
+ return -ENOMEM;
+ }
memset(dev_cs89x0.priv, 0, sizeof(struct net_local));
lp = (struct net_local *)dev_cs89x0.priv;

diff -uNr linux-2.4.0-test6-pre7/drivers/net/mace.c linux-2.4.0-test6-pre7.acme/drivers/net/mace.c
--- linux-2.4.0-test6-pre7/drivers/net/mace.c Sun Feb 13 16:47:01 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/mace.c Mon Aug 7 22:17:52 2000
@@ -3,6 +3,11 @@
* Apple Powermacs. Assumes it's under a DBDMA controller.
*
* Copyright (C) 1996 Paul Mackerras.
+ *
+ * Changes:
+ * Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * - check init_etherdev return in mace_probe1
+ * - init_etherdev zeroes dev->priv, so no need here.
*/

#include <linux/module.h>
@@ -133,7 +138,12 @@
}

dev = init_etherdev(0, PRIV_BYTES);
- memset(dev->priv, 0, PRIV_BYTES);
+
+ if (!dev) {
+ printk(KERN_ERR "init_etherdev failed, out of memory for MACE %s\n",
+ mace->full_name);
+ return;
+ }

mp = (struct mace_data *) dev->priv;
dev->base_addr = mace->addrs[0].address;
diff -uNr linux-2.4.0-test6-pre7/drivers/net/macsonic.c linux-2.4.0-test6-pre7.acme/drivers/net/macsonic.c
--- linux-2.4.0-test6-pre7/drivers/net/macsonic.c Tue Feb 1 05:43:51 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/macsonic.c Mon Aug 7 22:17:52 2000
@@ -20,6 +20,12 @@
* and duplicating packets. Needs more testing.
*
* 99/01/03 MSch: upgraded to version 0.92 of the core driver, fixed.
+ *
+ * Fixes:
+ * Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 08/03/2000
+ * - check kmalloc return in mac_onboard_sonic_probe and mac_nubus_sonic_probe
+ * - check init_etherdev return
+ * - dev->priv already zeroed by init_etherdev
*/

#include <linux/kernel.h>
@@ -318,16 +324,21 @@
dev = init_etherdev(dev, sizeof(struct sonic_local));
/* methinks this will always be true but better safe than sorry */
if (dev->priv == NULL)
- dev->priv = kmalloc(sizeof(struct sonic_local), GFP_KERNEL);
+ if ((dev->priv = kmalloc(sizeof(struct sonic_local), GFP_KERNEL)) == NULL)
+ return -ENOMEM;
+
+ memset(dev->priv, 0, sizeof(struct sonic_local));
} else {
dev = init_etherdev(NULL, sizeof(struct sonic_local));
+
+ if (!dev)
+ return -ENOMEM;
}

if (dev == NULL)
return -ENOMEM;

lp = (struct sonic_local*) dev->priv;
- memset(lp, 0, sizeof(struct sonic_local));
/* Danger! My arms are flailing wildly! You *must* set this
before using sonic_read() */

@@ -514,16 +525,20 @@
dev = init_etherdev(dev, sizeof(struct sonic_local));
/* methinks this will always be true but better safe than sorry */
if (dev->priv == NULL)
- dev->priv = kmalloc(sizeof(struct sonic_local), GFP_KERNEL);
+ if ((dev->priv = kmalloc(sizeof(struct sonic_local), GFP_KERNEL)) == NULL)
+ return -ENOMEM;
+ memset(dev->priv, 0, sizeof(struct sonic_local));
} else {
dev = init_etherdev(NULL, sizeof(struct sonic_local));
+
+ if (!dev)
+ return -ENOMEM;
}

if (dev == NULL)
return -ENOMEM;

lp = (struct sonic_local*) dev->priv;
- memset(lp, 0, sizeof(struct sonic_local));
/* Danger! My arms are flailing wildly! You *must* set this
before using sonic_read() */
lp->reg_offset = reg_offset;
diff -uNr linux-2.4.0-test6-pre7/drivers/net/myri_sbus.c linux-2.4.0-test6-pre7.acme/drivers/net/myri_sbus.c
--- linux-2.4.0-test6-pre7/drivers/net/myri_sbus.c Mon Jun 19 17:30:58 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/myri_sbus.c Tue Aug 8 00:10:10 2000
@@ -892,6 +892,9 @@
DET(("myri_ether_init(%p,%p,%d):\n", dev, sdev, num));
dev = init_etherdev(0, sizeof(struct myri_eth));

+ if (!dev)
+ return -ENOMEM;
+
if (version_printed++ == 0)
printk(version);

diff -uNr linux-2.4.0-test6-pre7/drivers/net/ne.c linux-2.4.0-test6-pre7.acme/drivers/net/ne.c
--- linux-2.4.0-test6-pre7/drivers/net/ne.c Sat Jul 8 23:38:16 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/ne.c Tue Aug 8 00:10:48 2000
@@ -332,7 +332,10 @@
if (dev == NULL)
{
printk(KERN_ERR "ne.c: Passed a NULL device.\n");
- dev = init_etherdev(0, 0);
+ if ((dev = init_etherdev(0, 0)) == NULL) {
+ printk(KERN_ERR "ne.c: init_etherdev failed, out of memory.\n");
+ return -ENOMEM;
+ }
}

if (ei_debug && version_printed++ == 0)
diff -uNr linux-2.4.0-test6-pre7/drivers/net/ne2.c linux-2.4.0-test6-pre7.acme/drivers/net/ne2.c
--- linux-2.4.0-test6-pre7/drivers/net/ne2.c Mon Jun 19 17:30:58 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/ne2.c Mon Aug 7 22:17:52 2000
@@ -46,6 +46,9 @@
Mon Nov 16 15:28:23 CET 1998 (Wim Dumon)
- pass 'dev' as last parameter of request_irq in stead of 'NULL'

+ Sun Aug 6 17:15:09 BRT 2000 (Arnaldo Carvalho de Melo <acme@conectiva.com.br>)
+ - check init_etherdev return in ne2_probe1
+
* WARNING
-------
This is alpha-test software. It is not guaranteed to work. As a
@@ -210,7 +213,10 @@
/* We should have a "dev" from Space.c or the static module table. */
if (dev == NULL) {
printk(KERN_ERR "ne2.c: Passed a NULL device.\n");
- dev = init_etherdev(0, 0);
+ if ((dev = init_etherdev(0, 0)) == NULL) {
+ printk(KERN_ERR "ne2.c: init_etherdev failed, out of memory.\n");
+ return -ENOMEM;
+ }
}

if (ei_debug && version_printed++ == 0)
diff -uNr linux-2.4.0-test6-pre7/drivers/net/ne3210.c linux-2.4.0-test6-pre7.acme/drivers/net/ne3210.c
--- linux-2.4.0-test6-pre7/drivers/net/ne3210.c Mon Jun 19 17:30:59 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/ne3210.c Tue Aug 8 00:25:51 2000
@@ -160,7 +160,10 @@
/* We should have a "dev" from Space.c or the static module table. */
if (dev == NULL) {
printk("ne3210.c: Passed a NULL device.\n");
- dev = init_etherdev(0, 0);
+ if ((dev = init_etherdev(0, 0)) == NULL) {
+ printk("ne3210.c: init_etherdev failed, out of memory\n");
+ return -ENOMEM;
+ }
}

/* Allocate dev->priv and fill in 8390 specific dev fields. */
diff -uNr linux-2.4.0-test6-pre7/drivers/net/oaknet.c linux-2.4.0-test6-pre7.acme/drivers/net/oaknet.c
--- linux-2.4.0-test6-pre7/drivers/net/oaknet.c Mon Jun 19 17:30:56 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/oaknet.c Mon Aug 7 22:17:52 2000
@@ -12,6 +12,10 @@
* Additional inspiration from the "tcd8390.c" driver from TiVo, Inc.
* and "enetLib.c" from IBM.
*
+ * Changes:
+ * Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 08/06/2000
+ * - check init_etherdev return in oaknet_init
+ *
*/

#include <linux/module.h>
@@ -117,7 +121,7 @@

if ((reg0 = ei_ibp(ioaddr)) == 0xFF) {
release_region(OAKNET_IO_BASE, OAKNET_IO_SIZE);
- return (ENODEV);
+ return (-ENODEV);
}

/*
@@ -140,7 +144,7 @@
dev->base_addr = 0;

release_region(dev->base_addr, OAKNET_IO_SIZE);
- return (ENODEV);
+ return (-ENODEV);
}

/*
@@ -148,7 +152,9 @@
* our own device structure.
*/

- dev = init_etherdev(0, 0);
+ if ((dev = init_etherdev(0, 0)) == NULL)
+ return -ENOMEM;
+
oaknet_devs = dev;

/*
@@ -181,6 +187,7 @@
printk("%s: unable to request interrupt %d.\n",
dev->name, dev->irq);
kfree(dev->priv);
+ dev->priv = NULL;
release_region(dev->base_addr, OAKNET_IO_SIZE);
return (EAGAIN);
}
diff -uNr linux-2.4.0-test6-pre7/drivers/net/rtl8129.c linux-2.4.0-test6-pre7.acme/drivers/net/rtl8129.c
--- linux-2.4.0-test6-pre7/drivers/net/rtl8129.c Tue Jul 11 15:12:24 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/rtl8129.c Tue Aug 8 00:27:10 2000
@@ -16,6 +16,10 @@
http://cesdis.gsfc.nasa.gov/linux/drivers/rtl8139.html

Twister-tuning table provided by Kinston <shangh@realtek.com.tw>.
+
+ Fixes:
+ Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 08/03/2000
+ - check kmalloc return in rtl8129_probe1
*/

static const char *version =
@@ -407,6 +411,18 @@

dev = init_etherdev(NULL, 0);

+ if (!dev)
+ return NULL;
+
+ /* Some data structures must be quadword aligned. */
+ tp = kmalloc(sizeof(*tp), GFP_KERNEL | GFP_DMA);
+
+ if (!tp)
+ return NULL;
+
+ memset(tp, 0, sizeof(*tp));
+ dev->priv = tp;
+
printk(KERN_INFO "%s: %s at %#lx, IRQ %d, ",
dev->name, pci_tbl[chip_idx].name, ioaddr, irq);

@@ -431,11 +447,6 @@

dev->base_addr = ioaddr;
dev->irq = irq;
-
- /* Some data structures must be quadword aligned. */
- tp = kmalloc(sizeof(*tp), GFP_KERNEL | GFP_DMA);
- memset(tp, 0, sizeof(*tp));
- dev->priv = tp;

tp->next_module = root_rtl8129_dev;
root_rtl8129_dev = dev;
diff -uNr linux-2.4.0-test6-pre7/drivers/net/sb1000.c linux-2.4.0-test6-pre7.acme/drivers/net/sb1000.c
--- linux-2.4.0-test6-pre7/drivers/net/sb1000.c Fri Jul 28 06:34:45 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/sb1000.c Mon Aug 7 22:17:52 2000
@@ -209,13 +209,10 @@
"S/N %#8.8x, IRQ %d.\n", dev->name, dev->base_addr,
dev->rmem_end, serial_number, dev->irq);

- dev = init_etherdev(dev, 0);
+ dev = init_etherdev(dev, sizeof(struct sb1000_private));

- /* Make up a SB1000-specific-data structure. */
- dev->priv = kmalloc(sizeof(struct sb1000_private), GFP_KERNEL);
- if (dev->priv == NULL)
+ if (!dev)
return -ENOMEM;
- memset(dev->priv, 0, sizeof(struct sb1000_private));

if (sb1000_debug > 0)
printk(KERN_NOTICE "%s", version);
diff -uNr linux-2.4.0-test6-pre7/drivers/net/seeq8005.c linux-2.4.0-test6-pre7.acme/drivers/net/seeq8005.c
--- linux-2.4.0-test6-pre7/drivers/net/seeq8005.c Mon Jun 19 17:42:38 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/seeq8005.c Tue Aug 8 00:29:07 2000
@@ -272,7 +272,8 @@

/* Allocate a new 'dev' if needed. */
if (dev == NULL)
- dev = init_etherdev(0, sizeof(struct net_local));
+ if ((dev = init_etherdev(0, sizeof(struct net_local))) == NULL)
+ return -ENOMEM;

if (net_debug && version_printed++ == 0)
printk(version);
diff -uNr linux-2.4.0-test6-pre7/drivers/net/sk_mca.c linux-2.4.0-test6-pre7.acme/drivers/net/sk_mca.c
--- linux-2.4.0-test6-pre7/drivers/net/sk_mca.c Fri Jul 28 06:34:46 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/sk_mca.c Mon Aug 7 22:17:52 2000
@@ -79,6 +79,10 @@
June 1st, 2000
added changes for recent 2.3 kernels

+ Fixes:
+ Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 08/03/2000
+ - check kmalloc return in skmca_probe
+
*************************************************************************/

#include <linux/kernel.h>
@@ -1136,7 +1140,14 @@
/* nothing found ? */

if (slot == -1)
- return ((base != 0) || (irq != 0)) ? ENXIO : ENODEV;
+ return ((base != 0) || (irq != 0)) ? -ENXIO : -ENODEV;
+
+ /* allocate structure */
+ priv = dev->priv =
+ (skmca_priv *) kmalloc(sizeof(skmca_priv), GFP_KERNEL);
+
+ if (!priv)
+ return -ENOMEM;

/* make procfs entries */

@@ -1155,9 +1166,6 @@
printk("%s: SKNet %s adapter found in slot %d\n", dev->name,
junior ? "Junior MC2" : "MC2+", slot + 1);

- /* allocate structure */
- priv = dev->priv =
- (skmca_priv *) kmalloc(sizeof(skmca_priv), GFP_KERNEL);
priv->slot = slot;
priv->macbase = base + 0x3fc0;
priv->ioregaddr = base + 0x3ff0;
diff -uNr linux-2.4.0-test6-pre7/drivers/net/smc-ultra.c linux-2.4.0-test6-pre7.acme/drivers/net/smc-ultra.c
--- linux-2.4.0-test6-pre7/drivers/net/smc-ultra.c Mon Jun 19 17:42:39 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/smc-ultra.c Tue Aug 8 00:29:26 2000
@@ -154,7 +154,8 @@
return -ENODEV;

if (dev == NULL)
- dev = init_etherdev(0, 0);
+ if ((dev = init_etherdev(0, 0)) == NULL)
+ return -ENOMEM;

if (ei_debug && version_printed++ == 0)
printk(version);
diff -uNr linux-2.4.0-test6-pre7/drivers/net/smc-ultra32.c linux-2.4.0-test6-pre7.acme/drivers/net/smc-ultra32.c
--- linux-2.4.0-test6-pre7/drivers/net/smc-ultra32.c Mon Jun 19 17:42:39 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/smc-ultra32.c Tue Aug 8 00:29:55 2000
@@ -151,7 +151,10 @@
/* We should have a "dev" from Space.c or the static module table. */
if (dev == NULL) {
printk("smc-ultra32.c: Passed a NULL device.\n");
- dev = init_etherdev(0, 0);
+ if ((dev = init_etherdev(0, 0))) {
+ printk("smc-ultra32.c: Passed a NULL device.\n");
+ return -ENOMEM;
+ }
}

if (ei_debug && version_printed++ == 0)
diff -uNr linux-2.4.0-test6-pre7/drivers/net/stnic.c linux-2.4.0-test6-pre7.acme/drivers/net/stnic.c
--- linux-2.4.0-test6-pre7/drivers/net/stnic.c Fri Jul 28 06:34:46 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/stnic.c Tue Aug 8 00:30:20 2000
@@ -105,6 +105,10 @@

/* New style probing API */
dev = init_etherdev (0, 0);
+
+ if (!dev)
+ return -ENOMEM;
+
stnic_dev = dev;

/* Allocate dev->priv and fill in 8390 specific dev fields. */
diff -uNr linux-2.4.0-test6-pre7/drivers/net/sun3lance.c linux-2.4.0-test6-pre7.acme/drivers/net/sun3lance.c
--- linux-2.4.0-test6-pre7/drivers/net/sun3lance.c Mon Jan 31 16:30:00 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/sun3lance.c Tue Aug 8 00:30:47 2000
@@ -18,7 +18,7 @@
There are more assumptions made throughout this driver, it almost
certainly still needs work, but it does work at least for RARP/BOOTP and
mounting the root NFS filesystem.
-
+
*/

static char *version = "sun3lance.c: v1.1 11/17/1999 Sam Creasey (sammy@oh.verio.com)\n";
@@ -303,7 +303,11 @@

init_etherdev( dev, sizeof(struct lance_private) );
if (!dev->priv)
- dev->priv = kmalloc( sizeof(struct lance_private), GFP_KERNEL );
+ if ((dev->priv = kmalloc( sizeof(struct lance_private), GFP_KERNEL)) == NULL) {
+ printk("lance: lance_probe: kmalloc(dev->priv) failed!\n");
+ return 0;
+ }
+
lp = (struct lance_private *)dev->priv;
MEM = (struct lance_memory *)sun3_dvma_malloc(sizeof(struct
lance_memory));
diff -uNr linux-2.4.0-test6-pre7/drivers/net/sunbmac.c linux-2.4.0-test6-pre7.acme/drivers/net/sunbmac.c
--- linux-2.4.0-test6-pre7/drivers/net/sunbmac.c Tue Jul 11 19:46:08 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/sunbmac.c Tue Aug 8 00:30:57 2000
@@ -1061,6 +1061,9 @@
/* Get a new device struct for this interface. */
dev = init_etherdev(0, sizeof(struct bigmac));

+ if (!dev)
+ return -ENOMEM;
+
if (version_printed++ == 0)
printk(KERN_INFO "%s", version);

diff -uNr linux-2.4.0-test6-pre7/drivers/net/sunhme.c linux-2.4.0-test6-pre7.acme/drivers/net/sunhme.c
--- linux-2.4.0-test6-pre7/drivers/net/sunhme.c Mon Jun 19 17:42:39 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/sunhme.c Tue Aug 8 00:31:28 2000
@@ -2528,6 +2528,9 @@
}
if (dev == NULL) {
dev = init_etherdev(0, sizeof(struct happy_meal));
+
+ if (dev == NULL)
+ return -ENOMEM;
} else {
dev->priv = kmalloc(sizeof(struct happy_meal), GFP_KERNEL);
if (dev->priv == NULL)
@@ -2712,6 +2715,9 @@
}
if (dev == NULL) {
dev = init_etherdev(0, sizeof(struct happy_meal));
+
+ if (dev == NULL)
+ return -ENOMEM;
} else {
dev->priv = kmalloc(sizeof(struct happy_meal), GFP_KERNEL);
if (dev->priv == NULL)
diff -uNr linux-2.4.0-test6-pre7/drivers/net/sunlance.c linux-2.4.0-test6-pre7.acme/drivers/net/sunlance.c
--- linux-2.4.0-test6-pre7/drivers/net/sunlance.c Thu Jul 6 02:15:25 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/sunlance.c Tue Aug 8 00:32:24 2000
@@ -1319,6 +1319,9 @@

if (dev == NULL) {
dev = init_etherdev (0, sizeof (struct lance_private) + 8);
+
+ if (dev == NULL)
+ return -ENOMEM;
} else {
dev->priv = kmalloc(sizeof (struct lance_private) + 8,
GFP_KERNEL);
diff -uNr linux-2.4.0-test6-pre7/drivers/net/sunqe.c linux-2.4.0-test6-pre7.acme/drivers/net/sunqe.c
--- linux-2.4.0-test6-pre7/drivers/net/sunqe.c Mon Jun 19 17:42:39 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/sunqe.c Mon Aug 7 22:17:53 2000
@@ -5,10 +5,15 @@
* if you make it look like a LANCE.
*
* Copyright (C) 1996, 1999 David S. Miller (davem@redhat.com)
+ *
+ * Changes:
+ * Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 08/06/2000
+ * - check init_etherdev return in qec_ether_init
+ * - no need to check dev->priv, init_etherdev checks it
*/

static char *version =
- "sunqe.c:v2.9 9/11/99 David S. Miller (davem@redhat.com)\n";
+ "sunqe.c:v2.10 8/6/2000 David S. Miller (davem@redhat.com)\n";

#include <linux/module.h>

@@ -749,6 +754,10 @@
int i, j, res = ENOMEM;

dev = init_etherdev(0, sizeof(struct sunqe));
+
+ if (dev == NULL)
+ return -ENOMEM;
+
qe_devs[0] = dev;
qeps[0] = (struct sunqe *) dev->priv;
qeps[0]->channel = 0;
@@ -762,7 +771,7 @@
qe_devs[1] = qe_devs[2] = qe_devs[3] = NULL;
for (i = 1; i < 4; i++) {
qe_devs[i] = init_etherdev(0, sizeof(struct sunqe));
- if (qe_devs[i] == NULL || qe_devs[i]->priv == NULL)
+ if (qe_devs[i] == NULL)
goto qec_free_devs;
qeps[i] = (struct sunqe *) qe_devs[i]->priv;
for (j = 0; j < 6; j++)
diff -uNr linux-2.4.0-test6-pre7/drivers/net/tlan.c linux-2.4.0-test6-pre7.acme/drivers/net/tlan.c
--- linux-2.4.0-test6-pre7/drivers/net/tlan.c Mon Jun 19 17:42:39 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/tlan.c Mon Aug 7 22:17:53 2000
@@ -32,6 +32,8 @@
* new PCI BIOS interface.
* Alan Cox <alan@redhat.com>: Fixed the out of memory
* handling.
+ * Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 08/03/2000
+ * - check kmalloc(dev->priv) return in tlan_probe
*
* Torben Mathiasen <torben.mathiasen@compaq.com> New Maintainer!
*
@@ -422,11 +424,14 @@
printk(KERN_ERR "TLAN: Could not allocate memory for device.\n");
return -ENOMEM;
}
- priv = dev->priv;
if (dev->priv == NULL) {
dev->priv = kmalloc(sizeof(TLanPrivateInfo), GFP_KERNEL);
- priv = dev->priv;
+ if (!dev->priv) {
+ printk(KERN_ERR "TLAN: Could not allocate memory for device.\n");
+ return -ENOMEM;
+ }
}
+ priv = dev->priv;
memset(priv, 0, sizeof(TLanPrivateInfo));

pad_allocated = 1;
diff -uNr linux-2.4.0-test6-pre7/drivers/net/wd.c linux-2.4.0-test6-pre7.acme/drivers/net/wd.c
--- linux-2.4.0-test6-pre7/drivers/net/wd.c Mon Jun 19 17:42:38 2000
+++ linux-2.4.0-test6-pre7.acme/drivers/net/wd.c Tue Aug 8 00:33:09 2000
@@ -126,8 +126,11 @@

/* We should have a "dev" from Space.c or the static module table. */
if (dev == NULL) {
- printk("wd.c: Passed a NULL device.\n");
- dev = init_etherdev(0, 0);
+ printk(KERN_ERR "wd.c: Passed a NULL device.\n");
+ if ((dev = init_etherdev(0, 0)) == NULL) {
+ printk(KERN_ERR "wd.c: Passed a NULL device.\n");
+ return -ENOMEM;
+ }
}

/* Check for semi-valid mem_start/end values if supplied. */
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:58    [W:0.698 / U:0.024 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site