Skip to content

Commit

Permalink
hso: fix bailout in error case of probe
Browse files Browse the repository at this point in the history
The driver tries to reuse code for disconnect in case
of a failed probe.
If resources need to be freed after an error in probe, the
netdev must not be freed because it has never been registered.
Fix it by telling the helper which path we are in.

Signed-off-by: Oliver Neukum <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
oneukum authored and davem330 committed Aug 6, 2020
1 parent 8ed54f1 commit 5fcfb6d
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions drivers/net/usb/hso.c
Original file line number Diff line number Diff line change
Expand Up @@ -2357,7 +2357,7 @@ static int remove_net_device(struct hso_device *hso_dev)
}

/* Frees our network device */
static void hso_free_net_device(struct hso_device *hso_dev)
static void hso_free_net_device(struct hso_device *hso_dev, bool bailout)
{
int i;
struct hso_net *hso_net = dev2net(hso_dev);
Expand All @@ -2380,7 +2380,7 @@ static void hso_free_net_device(struct hso_device *hso_dev)
kfree(hso_net->mux_bulk_tx_buf);
hso_net->mux_bulk_tx_buf = NULL;

if (hso_net->net)
if (hso_net->net && !bailout)
free_netdev(hso_net->net);

kfree(hso_dev);
Expand Down Expand Up @@ -2556,7 +2556,7 @@ static struct hso_device *hso_create_net_device(struct usb_interface *interface,

return hso_dev;
exit:
hso_free_net_device(hso_dev);
hso_free_net_device(hso_dev, true);
return NULL;
}

Expand Down Expand Up @@ -3133,7 +3133,7 @@ static void hso_free_interface(struct usb_interface *interface)
rfkill_unregister(rfk);
rfkill_destroy(rfk);
}
hso_free_net_device(network_table[i]);
hso_free_net_device(network_table[i], false);
}
}
}
Expand Down

0 comments on commit 5fcfb6d

Please sign in to comment.