[PATCH AUTOSEL for 4.9 092/190] rndis_wlan: add return value validation

2018-03-07 Thread Sasha Levin
From: Pan Bian 

[ Upstream commit 9dc7efd3978aa67ae598129d2a3f240b390ce508 ]

Function create_singlethread_workqueue() will return a NULL pointer if
there is no enough memory, and its return value should be validated
before using. However, in function rndis_wlan_bind(), its return value
is not checked. This may cause NULL dereference bugs. This patch fixes
it.

Signed-off-by: Pan Bian 
Signed-off-by: Kalle Valo 
Signed-off-by: Sasha Levin 
---
 drivers/net/wireless/rndis_wlan.c | 4 
 1 file changed, 4 insertions(+)

diff --git a/drivers/net/wireless/rndis_wlan.c 
b/drivers/net/wireless/rndis_wlan.c
index 603c90470225..15b2350d9f45 100644
--- a/drivers/net/wireless/rndis_wlan.c
+++ b/drivers/net/wireless/rndis_wlan.c
@@ -3427,6 +3427,10 @@ static int rndis_wlan_bind(struct usbnet *usbdev, struct 
usb_interface *intf)
 
/* because rndis_command() sleeps we need to use workqueue */
priv->workqueue = create_singlethread_workqueue("rndis_wlan");
+   if (!priv->workqueue) {
+   wiphy_free(wiphy);
+   return -ENOMEM;
+   }
INIT_WORK(>work, rndis_wlan_worker);
INIT_DELAYED_WORK(>dev_poller_work, rndis_device_poller);
INIT_DELAYED_WORK(>scan_work, rndis_get_scan_results);
-- 
2.14.1


[PATCH AUTOSEL for 4.9 092/190] rndis_wlan: add return value validation

2018-03-07 Thread Sasha Levin
From: Pan Bian 

[ Upstream commit 9dc7efd3978aa67ae598129d2a3f240b390ce508 ]

Function create_singlethread_workqueue() will return a NULL pointer if
there is no enough memory, and its return value should be validated
before using. However, in function rndis_wlan_bind(), its return value
is not checked. This may cause NULL dereference bugs. This patch fixes
it.

Signed-off-by: Pan Bian 
Signed-off-by: Kalle Valo 
Signed-off-by: Sasha Levin 
---
 drivers/net/wireless/rndis_wlan.c | 4 
 1 file changed, 4 insertions(+)

diff --git a/drivers/net/wireless/rndis_wlan.c 
b/drivers/net/wireless/rndis_wlan.c
index 603c90470225..15b2350d9f45 100644
--- a/drivers/net/wireless/rndis_wlan.c
+++ b/drivers/net/wireless/rndis_wlan.c
@@ -3427,6 +3427,10 @@ static int rndis_wlan_bind(struct usbnet *usbdev, struct 
usb_interface *intf)
 
/* because rndis_command() sleeps we need to use workqueue */
priv->workqueue = create_singlethread_workqueue("rndis_wlan");
+   if (!priv->workqueue) {
+   wiphy_free(wiphy);
+   return -ENOMEM;
+   }
INIT_WORK(>work, rndis_wlan_worker);
INIT_DELAYED_WORK(>dev_poller_work, rndis_device_poller);
INIT_DELAYED_WORK(>scan_work, rndis_get_scan_results);
-- 
2.14.1