}
 
 /* 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);
        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);
 
        return hso_dev;
 exit:
-       hso_free_net_device(hso_dev);
+       hso_free_net_device(hso_dev, true);
        return NULL;
 }
 
                                rfkill_unregister(rfk);
                                rfkill_destroy(rfk);
                        }
-                       hso_free_net_device(network_table[i]);
+                       hso_free_net_device(network_table[i], false);
                }
        }
 }