Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c928febf authored by Ben Hutchings's avatar Ben Hutchings Committed by David S. Miller
Browse files

starfire: clean up properly if firmware loading fails

netdev_open() will return without cleaning up net device or hardware state
if firmware loading fails.  This results in a BUG() on a second attempt to
bring the interface up, reported in
<http://bugzilla.kernel.org/show_bug.cgi?id=15091>, and probably has even
worse effects if the driver is removed afterwards.

Call netdev_close() to clean up on failure.

Addresses http://bugzilla.kernel.org/show_bug.cgi?id=15091



Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
Reported-by: default avatarMichael Moffatt <michael@moffatt.org.nz>
Tested-by: default avatarMichael Moffatt <michael@moffatt.org.nz>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: <stable@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c92b544b
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -1063,7 +1063,7 @@ static int netdev_open(struct net_device *dev)
	if (retval) {
		printk(KERN_ERR "starfire: Failed to load firmware \"%s\"\n",
		       FIRMWARE_RX);
		return retval;
		goto out_init;
	}
	if (fw_rx->size % 4) {
		printk(KERN_ERR "starfire: bogus length %zu in \"%s\"\n",
@@ -1108,6 +1108,9 @@ static int netdev_open(struct net_device *dev)
	release_firmware(fw_tx);
out_rx:
	release_firmware(fw_rx);
out_init:
	if (retval)
		netdev_close(dev);
	return retval;
}