Skip to content

Commit

Permalink
[NET]: Call uninit if necessary in register_netdevice
Browse files Browse the repository at this point in the history
This patch makes register_netdevice call dev->uninit if the regsitration
fails after dev->init has completed successfully.  Very few drivers use
the init/uninit calls but at least one (drivers/net/wan/sealevel.c) may
leak without this change.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Herbert Xu authored and David S. Miller committed Jul 31, 2007
1 parent ccc7911 commit 7ce1b0e
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions net/core/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -3337,7 +3337,7 @@ int register_netdevice(struct net_device *dev)

if (!dev_valid_name(dev->name)) {
ret = -EINVAL;
goto out;
goto err_uninit;
}

dev->ifindex = dev_new_index();
Expand All @@ -3351,7 +3351,7 @@ int register_netdevice(struct net_device *dev)
= hlist_entry(p, struct net_device, name_hlist);
if (!strncmp(d->name, dev->name, IFNAMSIZ)) {
ret = -EEXIST;
goto out;
goto err_uninit;
}
}

Expand Down Expand Up @@ -3411,7 +3411,7 @@ int register_netdevice(struct net_device *dev)

ret = netdev_register_sysfs(dev);
if (ret)
goto out;
goto err_uninit;
dev->reg_state = NETREG_REGISTERED;

/*
Expand All @@ -3436,6 +3436,11 @@ int register_netdevice(struct net_device *dev)

out:
return ret;

err_uninit:
if (dev->uninit)
dev->uninit(dev);
goto out;
}

/**
Expand Down

0 comments on commit 7ce1b0e

Please sign in to comment.