Patch "cdc_ncm: do not call usbnet_link_change from cdc_ncm_bind" has been added to the 4.4-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 4.4-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-4.4 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
@@ -952,8 +952,6 @@ EXPORT_SYMBOL_GPL(cdc_ncm_select_altsettstatic int cdc_ncm_bind (struct usbnet *dev,struct usb_interface *intf) { -int ret; -/* MBIM backwards compatible function? */ if (cdc_ncm_select_altsetting (intf) !=CDC_NCM_COMM_ALTSETTING_NCM )return -ENODEV ;
@@ -962,16 +960,7 @@ static int cdc_ncm_bind(struct usbnet *d* Additionally, generic NCM devices are assumed to accept arbitrarily * placed NDP. */ - ret =cdc_ncm_bind_common (dev, intf,CDC_NCM_DATA_ALTSETTING_NCM ,0 ); - -/* -* 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,CDC_NCM_DATA_ALTSETTING_NCM ,0 ); }static void cdc_ncm_align_tail (struct sk_buff *skb,size_t modulus,size_t remainder,size_t max)
@@ -1554,7 +1543,8 @@ static void cdc_ncm_status(struct usbnetstatic 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, .manage_power = usbnet_manage_power,
@@ -1567,7 +1557,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, .manage_power = usbnet_manage_power,
@@ -1580,7 +1570,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, .manage_power = usbnet_manage_power,
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/cdc_ncm-do-not-call-usbnet_link_change-from-cdc_ncm_bind.patch