diff options
Diffstat (limited to 'net/rose/af_rose.c')
-rw-r--r-- | net/rose/af_rose.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c index 5acb1680524a..829fdbc4400b 100644 --- a/net/rose/af_rose.c +++ b/net/rose/af_rose.c | |||
@@ -1472,22 +1472,25 @@ static const char banner[] = KERN_INFO "F6FBB/G4KLX ROSE for Linux. Version 0.62 | |||
1472 | static int __init rose_proto_init(void) | 1472 | static int __init rose_proto_init(void) |
1473 | { | 1473 | { |
1474 | int i; | 1474 | int i; |
1475 | int rc = proto_register(&rose_proto, 0); | 1475 | int rc; |
1476 | 1476 | ||
1477 | if (rose_ndevs > 0x7FFFFFFF/sizeof(struct net_device *)) { | ||
1478 | printk(KERN_ERR "ROSE: rose_proto_init - rose_ndevs parameter to large\n"); | ||
1479 | rc = -EINVAL; | ||
1480 | goto out; | ||
1481 | } | ||
1482 | |||
1483 | rc = proto_register(&rose_proto, 0); | ||
1477 | if (rc != 0) | 1484 | if (rc != 0) |
1478 | goto out; | 1485 | goto out; |
1479 | 1486 | ||
1480 | rose_callsign = null_ax25_address; | 1487 | rose_callsign = null_ax25_address; |
1481 | 1488 | ||
1482 | if (rose_ndevs > 0x7FFFFFFF/sizeof(struct net_device *)) { | ||
1483 | printk(KERN_ERR "ROSE: rose_proto_init - rose_ndevs parameter to large\n"); | ||
1484 | return -1; | ||
1485 | } | ||
1486 | |||
1487 | dev_rose = kmalloc(rose_ndevs * sizeof(struct net_device *), GFP_KERNEL); | 1489 | dev_rose = kmalloc(rose_ndevs * sizeof(struct net_device *), GFP_KERNEL); |
1488 | if (dev_rose == NULL) { | 1490 | if (dev_rose == NULL) { |
1489 | printk(KERN_ERR "ROSE: rose_proto_init - unable to allocate device structure\n"); | 1491 | printk(KERN_ERR "ROSE: rose_proto_init - unable to allocate device structure\n"); |
1490 | return -1; | 1492 | rc = -ENOMEM; |
1493 | goto out_proto_unregister; | ||
1491 | } | 1494 | } |
1492 | 1495 | ||
1493 | memset(dev_rose, 0x00, rose_ndevs * sizeof(struct net_device*)); | 1496 | memset(dev_rose, 0x00, rose_ndevs * sizeof(struct net_device*)); |
@@ -1500,10 +1503,12 @@ static int __init rose_proto_init(void) | |||
1500 | name, rose_setup); | 1503 | name, rose_setup); |
1501 | if (!dev) { | 1504 | if (!dev) { |
1502 | printk(KERN_ERR "ROSE: rose_proto_init - unable to allocate memory\n"); | 1505 | printk(KERN_ERR "ROSE: rose_proto_init - unable to allocate memory\n"); |
1506 | rc = -ENOMEM; | ||
1503 | goto fail; | 1507 | goto fail; |
1504 | } | 1508 | } |
1505 | if (register_netdev(dev)) { | 1509 | rc = register_netdev(dev); |
1506 | printk(KERN_ERR "ROSE: netdevice regeistration failed\n"); | 1510 | if (rc) { |
1511 | printk(KERN_ERR "ROSE: netdevice registration failed\n"); | ||
1507 | free_netdev(dev); | 1512 | free_netdev(dev); |
1508 | goto fail; | 1513 | goto fail; |
1509 | } | 1514 | } |
@@ -1536,8 +1541,9 @@ fail: | |||
1536 | free_netdev(dev_rose[i]); | 1541 | free_netdev(dev_rose[i]); |
1537 | } | 1542 | } |
1538 | kfree(dev_rose); | 1543 | kfree(dev_rose); |
1544 | out_proto_unregister: | ||
1539 | proto_unregister(&rose_proto); | 1545 | proto_unregister(&rose_proto); |
1540 | return -ENOMEM; | 1546 | goto out; |
1541 | } | 1547 | } |
1542 | module_init(rose_proto_init); | 1548 | module_init(rose_proto_init); |
1543 | 1549 | ||