Skip to content

Commit

Permalink
hso: fix for crash when unplugging the device
Browse files Browse the repository at this point in the history
Changed the order in which things are freed. This fixes an oops when
unplugging the device while network traffic is ongoing.

Signed-off-by: Jan Dumon <j.dumon@option.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Jan Dumon authored and David S. Miller committed Apr 2, 2009
1 parent b6bc978 commit 3b7d2b3
Showing 1 changed file with 11 additions and 8 deletions.
19 changes: 11 additions & 8 deletions drivers/net/usb/hso.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
* Copyright (C) 2008 Option International
* Filip Aben <f.aben@option.com>
* Denis Joseph Barrow <d.barow@option.com>
* Jan Dumon <j.dumon@option.com>
* Copyright (C) 2007 Andrew Bird (Sphere Systems Ltd)
* <ajb@spheresystems.co.uk>
* Copyright (C) 2008 Greg Kroah-Hartman <gregkh@suse.de>
Expand Down Expand Up @@ -2417,20 +2418,22 @@ static void hso_free_net_device(struct hso_device *hso_dev)
if (!hso_net)
return;

remove_net_device(hso_net->parent);

if (hso_net->net) {
unregister_netdev(hso_net->net);
free_netdev(hso_net->net);
}

/* start freeing */
for (i = 0; i < MUX_BULK_RX_BUF_COUNT; i++) {
usb_free_urb(hso_net->mux_bulk_rx_urb_pool[i]);
kfree(hso_net->mux_bulk_rx_buf_pool[i]);
hso_net->mux_bulk_rx_buf_pool[i] = NULL;
}
usb_free_urb(hso_net->mux_bulk_tx_urb);
kfree(hso_net->mux_bulk_tx_buf);

remove_net_device(hso_net->parent);

if (hso_net->net) {
unregister_netdev(hso_net->net);
free_netdev(hso_net->net);
}
hso_net->mux_bulk_tx_buf = NULL;

kfree(hso_dev);
}
Expand Down Expand Up @@ -2620,12 +2623,12 @@ static void hso_free_tiomget(struct hso_serial *serial)
{
struct hso_tiocmget *tiocmget = serial->tiocmget;
if (tiocmget) {
kfree(tiocmget);
if (tiocmget->urb) {
usb_free_urb(tiocmget->urb);
tiocmget->urb = NULL;
}
serial->tiocmget = NULL;
kfree(tiocmget);

}
}
Expand Down

0 comments on commit 3b7d2b3

Please sign in to comment.