Patch "cdc_ncm: do not call usbnet_link_change from cdc_ncm_bind" has been added to the 3.14-stable tree
This is a note to let you know that I've just added the patch titled
cdc_ncm: do not call usbnet_link_change from cdc_ncm_bind
to the 3.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
cdc_ncm-do-not-call-usbnet_link_change-from-cdc_ncm_bind.patch
and it can be found in the queue-3.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
4d06dd537f95683aba3651098ae288b7cbff8274Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <[email protected]>
Date: Mon, 7 Mar 2016 21:15:36 +0100
Subject: cdc_ncm: do not call usbnet_link_change from cdc_ncm_bind
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Bjørn Mork <[email protected]>
commit 4d06dd537f95683aba3651098ae288b7cbff8274 upstream.
usbnet_link_change will call schedule_work and should be avoided if bind is failing. Otherwise we will end up with scheduled work referring to a netdev which has gone away.
Instead of making the call conditional, we can just defer it to usbnet_probe, using the driver_info flag made for this purpose.
--- drivers/net/usb/cdc_ncm.c | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-)
drivers/net/usb/cdc_ncm.c +5 -15
@@ -571,24 +571,13 @@ EXPORT_SYMBOL_GPL(cdc_ncm_select_altsettstatic int cdc_ncm_bind (struct usbnet *dev,struct usb_interface *intf) { -int ret; -/* MBIM backwards compatible function? */ cdc_ncm_select_altsetting (dev, intf);if (cdc_ncm_comm_intf_is_mbim (intf->cur_altsetting))return -ENODEV ;/* NCM data altsetting is always 1 */ - ret =cdc_ncm_bind_common (dev, intf,1 ); - -/* -* We should get an event when network connection is "connected" or -* "disconnected". Set network connection in "disconnected" state -* (carrier is OFF) during attach, so the IP network stack does not -* start IPv6 negotiation and more. -*/ -usbnet_link_change (dev,0 ,0 ); -return ret; +return cdc_ncm_bind_common (dev, intf,1 ); }static void cdc_ncm_align_tail (struct sk_buff *skb,size_t modulus,size_t remainder,size_t max)
@@ -1117,7 +1106,8 @@ static int cdc_ncm_check_connect(structstatic const struct driver_info cdc_ncm_info = { .description ="CDC NCM" , - .flags =FLAG_POINTTOPOINT |FLAG_NO_SETINT |FLAG_MULTI_PACKET , + .flags =FLAG_POINTTOPOINT |FLAG_NO_SETINT |FLAG_MULTI_PACKET + |FLAG_LINK_INTR , .bind = cdc_ncm_bind, .unbind = cdc_ncm_unbind, .check_connect = cdc_ncm_check_connect,
@@ -1131,7 +1121,7 @@ static const struct driver_info cdc_ncm_static const struct driver_info wwan_info = { .description ="Mobile Broadband Network Device" , .flags =FLAG_POINTTOPOINT |FLAG_NO_SETINT |FLAG_MULTI_PACKET - |FLAG_WWAN , + |FLAG_LINK_INTR |FLAG_WWAN , .bind = cdc_ncm_bind, .unbind = cdc_ncm_unbind, .check_connect = cdc_ncm_check_connect,
@@ -1145,7 +1135,7 @@ static const struct driver_info wwan_infstatic const struct driver_info wwan_noarp_info = { .description ="Mobile Broadband Network Device (NO ARP)" , .flags =FLAG_POINTTOPOINT |FLAG_NO_SETINT |FLAG_MULTI_PACKET - |FLAG_WWAN |FLAG_NOARP , + |FLAG_LINK_INTR |FLAG_WWAN |FLAG_NOARP , .bind = cdc_ncm_bind, .unbind = cdc_ncm_unbind, .check_connect = cdc_ncm_check_connect,
Patches currently in stable-queue which might be from [email protected] are
queue-3.14/cdc_ncm-do-not-call-usbnet_link_change-from-cdc_ncm_bind.patch