linux-can.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/1] Fixed disconnect bug by removing erroneous use of kfree()
@ 2016-02-23  1:17 Maximilain Schneider
  2016-02-24  8:27 ` Marc Kleine-Budde
  0 siblings, 1 reply; 2+ messages in thread
From: Maximilain Schneider @ 2016-02-23  1:17 UTC (permalink / raw)
  To: linux-can@vger.kernel.org

From b0a5029680d544faf07bcf636084b3fcafe59953 Mon Sep 17 00:00:00 2001
From: Maximilian Schneider <max@schneidersoft.net>
Date: Tue, 23 Feb 2016 01:03:53 +0000
Subject: [PATCH 1/1] Fixed disconnect bug by removing erroneous use of kfree()
 and revised disconnect routine.

Signed-off-by: Maximilian Schneider <max@schneidersoft.net>
---
 drivers/net/can/usb/gs_usb.c | 25 ++++++++++++-------------
 1 file changed, 12 insertions(+), 13 deletions(-)

diff --git a/drivers/net/can/usb/gs_usb.c b/drivers/net/can/usb/gs_usb.c
index 5eee62b..dcb3473 100644
--- a/drivers/net/can/usb/gs_usb.c
+++ b/drivers/net/can/usb/gs_usb.c
@@ -826,9 +826,8 @@ static struct gs_can *gs_make_candev(unsigned int channel, struct usb_interface
 static void gs_destroy_candev(struct gs_can *dev)
 {
 	unregister_candev(dev->netdev);
-	free_candev(dev->netdev);
 	usb_kill_anchored_urbs(&dev->tx_submitted);
-	kfree(dev);
+	free_candev(dev->netdev);
 }
 
 static int gs_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
@@ -913,12 +912,15 @@ static int gs_usb_probe(struct usb_interface *intf, const struct usb_device_id *
 	for (i = 0; i < icount; i++) {
 		dev->canch[i] = gs_make_candev(i, intf);
 		if (IS_ERR_OR_NULL(dev->canch[i])) {
+			/* save error code to return later */
+			rc = PTR_ERR(dev->canch[i]);
+
 			/* on failure destroy previously created candevs */
 			icount = i;
-			for (i = 0; i < icount; i++) {
+			for (i = 0; i < icount; i++)
 				gs_destroy_candev(dev->canch[i]);
-				dev->canch[i] = NULL;
-			}
+
+			usb_kill_anchored_urbs(&dev->rx_submitted);
 			kfree(dev);
 			return rc;
 		}
@@ -939,16 +941,12 @@ static void gs_usb_disconnect(struct usb_interface *intf)
 		return;
 	}
 
-	for (i = 0; i < GS_MAX_INTF; i++) {
-		struct gs_can *can = dev->canch[i];
-
-		if (!can)
-			continue;
-
-		gs_destroy_candev(can);
-	}
+	for (i = 0; i < GS_MAX_INTF; i++)
+		if (dev->canch[i])
+			gs_destroy_candev(dev->canch[i]);
 
 	usb_kill_anchored_urbs(&dev->rx_submitted);
+	kfree(dev);
 }
 
 static const struct usb_device_id gs_usb_table[] = {
@@ -972,3 +970,4 @@ MODULE_DESCRIPTION(
 "Socket CAN device driver for Geschwister Schneider Technologie-, "
 "Entwicklungs- und Vertriebs UG. USB2.0 to CAN interfaces.");
 MODULE_LICENSE("GPL v2");
+
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH 1/1] Fixed disconnect bug by removing erroneous use of kfree()
  2016-02-23  1:17 [PATCH 1/1] Fixed disconnect bug by removing erroneous use of kfree() Maximilain Schneider
@ 2016-02-24  8:27 ` Marc Kleine-Budde
  0 siblings, 0 replies; 2+ messages in thread
From: Marc Kleine-Budde @ 2016-02-24  8:27 UTC (permalink / raw)
  To: Maximilain Schneider, linux-can@vger.kernel.org

[-- Attachment #1: Type: text/plain, Size: 810 bytes --]

On 02/23/2016 02:17 AM, Maximilain Schneider wrote:
> From b0a5029680d544faf07bcf636084b3fcafe59953 Mon Sep 17 00:00:00 2001
> From: Maximilian Schneider <max@schneidersoft.net>
> Date: Tue, 23 Feb 2016 01:03:53 +0000
> Subject: [PATCH 1/1] Fixed disconnect bug by removing erroneous use of kfree()
>  and revised disconnect routine.


Can you please probive a patch description, too. No need to resend the
patch, I'll add it while applying the patch.

> Signed-off-by: Maximilian Schneider <max@schneidersoft.net>

Marc
-- 
Pengutronix e.K.                  | Marc Kleine-Budde           |
Industrial Linux Solutions        | Phone: +49-231-2826-924     |
Vertretung West/Dortmund          | Fax:   +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686  | http://www.pengutronix.de   |


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 455 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-02-24  8:27 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-02-23  1:17 [PATCH 1/1] Fixed disconnect bug by removing erroneous use of kfree() Maximilain Schneider
2016-02-24  8:27 ` Marc Kleine-Budde

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).