From patchwork Thu Apr 2 08:57:20 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Dumon X-Patchwork-Id: 25521 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id B9B52DDE98 for ; Thu, 2 Apr 2009 19:57:41 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755482AbZDBI5a (ORCPT ); Thu, 2 Apr 2009 04:57:30 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1756725AbZDBI52 (ORCPT ); Thu, 2 Apr 2009 04:57:28 -0400 Received: from mailer1.option.com ([81.246.70.162]:44012 "EHLO mailer1.option.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753470AbZDBI5Z (ORCPT ); Thu, 2 Apr 2009 04:57:25 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: An4CAAga1EkKAAAZ/2dsb2JhbAAIzyWDfQY Received: from unknown (HELO smtp3.option.com) ([10.0.0.25]) by mailer1.option.local with ESMTP; 02 Apr 2009 10:57:20 +0200 Received: from raptor ([10.30.11.12]) by smtp3.option.com with Microsoft SMTPSVC(6.0.3790.3959); Thu, 2 Apr 2009 10:57:20 +0200 Received: by raptor (sSMTP sendmail emulation); Thu, 02 Apr 2009 10:57:20 +0200 Date: Thu, 2 Apr 2009 10:57:20 +0200 From: Jan Dumon To: David Miller Cc: linux-usb@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH 1/2] hso: fix for crash when unplugging the device Message-ID: <20090402085720.GA8663@raptor> MIME-Version: 1.0 Content-Disposition: inline Organization: Option User-Agent: Mutt/1.5.16 (2007-06-09) X-OriginalArrivalTime: 02 Apr 2009 08:57:20.0855 (UTC) FILETIME=[084A8E70:01C9B371] Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jan Dumon 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 --- -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c index 28d1424..779a007 100644 --- a/drivers/net/usb/hso.c +++ b/drivers/net/usb/hso.c @@ -5,6 +5,7 @@ * Copyright (C) 2008 Option International * Filip Aben * Denis Joseph Barrow + * Jan Dumon * Copyright (C) 2007 Andrew Bird (Sphere Systems Ltd) * * Copyright (C) 2008 Greg Kroah-Hartman @@ -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); } @@ -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); } }