summaryrefslogtreecommitdiffstats
path: root/drivers/net/arcnet.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/arcnet.c')
-rw-r--r--drivers/net/arcnet.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/drivers/net/arcnet.c b/drivers/net/arcnet.c
index 491a50257..5e61ca6bc 100644
--- a/drivers/net/arcnet.c
+++ b/drivers/net/arcnet.c
@@ -471,9 +471,16 @@ arcnet_open(struct device *dev)
#ifdef CONFIG_ARCNET_1051
/* Initialize the RFC1051-encap protocol driver */
- lp->sdev=(struct device *)kmalloc(sizeof(struct device),GFP_KERNEL);
+ lp->sdev=(struct device *)kmalloc(sizeof(struct device)+10,GFP_KERNEL);
+ if(lp->sdev = NULL)
+ {
+ if(lp->edev)
+ kfree(lp->edev);
+ lp->edev=NULL;
+ return -ENOMEM;
+ }
memcpy(lp->sdev,dev,sizeof(struct device));
- lp->sdev->name=(char *)kmalloc(10,GFP_KERNEL);
+ lp->sdev->name=(char *)(lp+1);
sprintf(lp->sdev->name,"%ss",dev->name);
lp->sdev->init=arcnetS_init;
register_netdevice(lp->sdev);
@@ -562,7 +569,6 @@ arcnet_close(struct device *dev)
/* free the RFC1051-encap protocol device */
lp->sdev->priv=NULL;
unregister_netdevice(lp->sdev);
- kfree(lp->sdev->name);
kfree(lp->sdev);
lp->sdev=NULL;
#endif
@@ -1991,7 +1997,7 @@ struct device arcnet_devs[MAX_ARCNET_DEVS];
int arcnet_num_devs=0;
char arcnet_dev_names[MAX_ARCNET_DEVS][10];
-__initfunc(void arcnet_init(void))
+void __init arcnet_init(void)
{
int c;
@@ -2041,7 +2047,7 @@ __initfunc(void arcnet_init(void))
#ifdef MODULE
int init_module(void)
#else
-__initfunc(static int init_module(void))
+static int __init init_module(void)
#endif
{
#ifdef ALPHA_WARNING