Skip to content

Commit 0fbd782

Browse files
JiangJiasopsiff
authored andcommitted
iwlwifi: Add missing check for alloc_ordered_workqueue
[ Upstream commit 90a0d9f339960448a3acc1437a46730f975efd6a ] Add check for the return value of alloc_ordered_workqueue since it may return NULL pointer. Fixes: b481de9 ("[IWLWIFI]: add iwlwifi wireless drivers") Signed-off-by: Jiasheng Jiang <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Miri Korenblit <[email protected]> Signed-off-by: Sasha Levin <[email protected]> (cherry picked from commit 7dd6350307af6521b6240b295c93b7eec4daebe6)
1 parent 865fb7d commit 0fbd782

File tree

1 file changed

+9
-2
lines changed
  • drivers/net/wireless/intel/iwlwifi/dvm

1 file changed

+9
-2
lines changed

drivers/net/wireless/intel/iwlwifi/dvm/main.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1048,9 +1048,11 @@ static void iwl_bg_restart(struct work_struct *data)
10481048
*
10491049
*****************************************************************************/
10501050

1051-
static void iwl_setup_deferred_work(struct iwl_priv *priv)
1051+
static int iwl_setup_deferred_work(struct iwl_priv *priv)
10521052
{
10531053
priv->workqueue = alloc_ordered_workqueue(DRV_NAME, 0);
1054+
if (!priv->workqueue)
1055+
return -ENOMEM;
10541056

10551057
INIT_WORK(&priv->restart, iwl_bg_restart);
10561058
INIT_WORK(&priv->beacon_update, iwl_bg_beacon_update);
@@ -1067,6 +1069,8 @@ static void iwl_setup_deferred_work(struct iwl_priv *priv)
10671069
timer_setup(&priv->statistics_periodic, iwl_bg_statistics_periodic, 0);
10681070

10691071
timer_setup(&priv->ucode_trace, iwl_bg_ucode_trace, 0);
1072+
1073+
return 0;
10701074
}
10711075

10721076
void iwl_cancel_deferred_work(struct iwl_priv *priv)
@@ -1454,7 +1458,9 @@ static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans,
14541458
/********************
14551459
* 6. Setup services
14561460
********************/
1457-
iwl_setup_deferred_work(priv);
1461+
if (iwl_setup_deferred_work(priv))
1462+
goto out_uninit_drv;
1463+
14581464
iwl_setup_rx_handlers(priv);
14591465

14601466
iwl_power_initialize(priv);
@@ -1492,6 +1498,7 @@ static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans,
14921498
iwl_cancel_deferred_work(priv);
14931499
destroy_workqueue(priv->workqueue);
14941500
priv->workqueue = NULL;
1501+
out_uninit_drv:
14951502
iwl_uninit_drv(priv);
14961503
out_free_eeprom_blob:
14971504
kfree(priv->eeprom_blob);

0 commit comments

Comments
 (0)