1 From 568f9d646f493553bd2b9afdef083b9c6c15c882 Mon Sep 17 00:00:00 2001
2 From: Kangjie Lu <kjlu@umn.edu>
3 Date: Tue, 12 Mar 2019 03:05:02 -0500
4 Subject: net: cw1200: fix a NULL pointer dereference
6 [ Upstream commit 0ed2a005347400500a39ea7c7318f1fea57fb3ca ]
8 In case create_singlethread_workqueue fails, the fix free the
9 hardware and returns NULL to avoid NULL pointer dereference.
11 Signed-off-by: Kangjie Lu <kjlu@umn.edu>
12 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
13 Signed-off-by: Sasha Levin <sashal@kernel.org>
15 drivers/net/wireless/cw1200/main.c | 5 +++++
16 1 file changed, 5 insertions(+)
18 diff --git a/drivers/net/wireless/cw1200/main.c b/drivers/net/wireless/cw1200/main.c
19 index 0e51e27d2e3f1..317daa968e037 100644
20 --- a/drivers/net/wireless/cw1200/main.c
21 +++ b/drivers/net/wireless/cw1200/main.c
22 @@ -345,6 +345,11 @@ static struct ieee80211_hw *cw1200_init_common(const u8 *macaddr,
23 mutex_init(&priv->wsm_cmd_mux);
24 mutex_init(&priv->conf_mutex);
25 priv->workqueue = create_singlethread_workqueue("cw1200_wq");
26 + if (!priv->workqueue) {
27 + ieee80211_free_hw(hw);
31 sema_init(&priv->scan.lock, 1);
32 INIT_WORK(&priv->scan.work, cw1200_scan_work);
33 INIT_DELAYED_WORK(&priv->scan.probe_work, cw1200_probe_work);