Skip to content

Commit 628ccfc

Browse files
Yang Yingliangjcmvbkbc
authored andcommitted
xtensa: iss: fix handling error cases in iss_net_configure()
The 'pdev' and 'netdev' need to be released in error cases of iss_net_configure(). Change the return type of iss_net_configure() to void, because it's not used. Fixes: 7282bee ("[PATCH] xtensa: Architecture support for Tensilica Xtensa Part 8") Reported-by: Hulk Robot <[email protected]> Signed-off-by: Yang Yingliang <[email protected]> Signed-off-by: Max Filippov <[email protected]>
1 parent 8864fb8 commit 628ccfc

File tree

1 file changed

+15
-17
lines changed

1 file changed

+15
-17
lines changed

arch/xtensa/platforms/iss/network.c

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -475,16 +475,15 @@ static void iss_net_pdev_release(struct device *dev)
475475
free_netdev(lp->dev);
476476
}
477477

478-
static int iss_net_configure(int index, char *init)
478+
static void iss_net_configure(int index, char *init)
479479
{
480480
struct net_device *dev;
481481
struct iss_net_private *lp;
482-
int err;
483482

484483
dev = alloc_etherdev(sizeof(*lp));
485484
if (dev == NULL) {
486485
pr_err("eth_configure: failed to allocate device\n");
487-
return 1;
486+
return;
488487
}
489488

490489
/* Initialize private element. */
@@ -511,22 +510,24 @@ static int iss_net_configure(int index, char *init)
511510
if (!tuntap_probe(lp, index, init)) {
512511
pr_err("%s: invalid arguments. Skipping device!\n",
513512
dev->name);
514-
goto errout;
513+
goto err_free_netdev;
515514
}
516515

517516
pr_info("Netdevice %d (%pM)\n", index, dev->dev_addr);
518517

519518
/* sysfs register */
520519

521520
if (!driver_registered) {
522-
platform_driver_register(&iss_net_driver);
521+
if (platform_driver_register(&iss_net_driver))
522+
goto err_free_netdev;
523523
driver_registered = 1;
524524
}
525525

526526
lp->pdev.id = index;
527527
lp->pdev.name = DRIVER_NAME;
528528
lp->pdev.dev.release = iss_net_pdev_release;
529-
platform_device_register(&lp->pdev);
529+
if (platform_device_register(&lp->pdev))
530+
goto err_free_netdev;
530531
SET_NETDEV_DEV(dev, &lp->pdev.dev);
531532

532533
dev->netdev_ops = &iss_netdev_ops;
@@ -535,23 +536,20 @@ static int iss_net_configure(int index, char *init)
535536
dev->irq = -1;
536537

537538
rtnl_lock();
538-
err = register_netdevice(dev);
539-
rtnl_unlock();
540-
541-
if (err) {
539+
if (register_netdevice(dev)) {
540+
rtnl_unlock();
542541
pr_err("%s: error registering net device!\n", dev->name);
543-
/* XXX: should we call ->remove() here? */
544-
free_netdev(dev);
545-
return 1;
542+
platform_device_unregister(&lp->pdev);
543+
return;
546544
}
545+
rtnl_unlock();
547546

548547
timer_setup(&lp->tl, iss_net_user_timer_expire, 0);
549548

550-
return 0;
549+
return;
551550

552-
errout:
553-
/* FIXME: unregister; free, etc.. */
554-
return -EIO;
551+
err_free_netdev:
552+
free_netdev(dev);
555553
}
556554

557555
/* ------------------------------------------------------------------------- */

0 commit comments

Comments
 (0)