Commit 8f55564c authored by Johannes Berg's avatar Johannes Berg

wifi: iwlwifi: fw: pnvm: fix uefi reduced TX power loading

There are a number of issues here:
 * if trans->reduce_power_loaded is already true, we call
   iwl_trans_set_reduce_power() with an uninitialized len
   value
 * in this case we also clobber a previous load/setting
 * if iwl_uefi_get_reduced_power() returns an ERR_PTR() we
   try to kfree() it

Move the iwl_trans_set_reduce_power() call into the success
case only to fix these issues.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarGregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230314194113.aa2cf2281f5d.I33b4ab3427f1921c184c52fecd0f46781a89dc8a@changeidSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent c2db0175
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
/* /*
* Copyright(c) 2020-2021 Intel Corporation * Copyright(c) 2020-2022 Intel Corporation
*/ */
#include "iwl-drv.h" #include "iwl-drv.h"
...@@ -318,7 +318,6 @@ int iwl_pnvm_load(struct iwl_trans *trans, ...@@ -318,7 +318,6 @@ int iwl_pnvm_load(struct iwl_trans *trans,
kfree(data); kfree(data);
skip_parse: skip_parse:
data = NULL;
/* now try to get the reduce power table, if not loaded yet */ /* now try to get the reduce power table, if not loaded yet */
if (!trans->reduce_power_loaded) { if (!trans->reduce_power_loaded) {
data = iwl_uefi_get_reduced_power(trans, &len); data = iwl_uefi_get_reduced_power(trans, &len);
...@@ -329,19 +328,16 @@ int iwl_pnvm_load(struct iwl_trans *trans, ...@@ -329,19 +328,16 @@ int iwl_pnvm_load(struct iwl_trans *trans,
* trying again over and over. * trying again over and over.
*/ */
trans->reduce_power_loaded = true; trans->reduce_power_loaded = true;
} else {
goto skip_reduce_power; ret = iwl_trans_set_reduce_power(trans, data, len);
if (ret)
IWL_DEBUG_FW(trans,
"Failed to set reduce power table %d\n",
ret);
kfree(data);
} }
} }
ret = iwl_trans_set_reduce_power(trans, data, len);
if (ret)
IWL_DEBUG_FW(trans,
"Failed to set reduce power table %d\n",
ret);
kfree(data);
skip_reduce_power:
iwl_init_notification_wait(notif_wait, &pnvm_wait, iwl_init_notification_wait(notif_wait, &pnvm_wait,
ntf_cmds, ARRAY_SIZE(ntf_cmds), ntf_cmds, ARRAY_SIZE(ntf_cmds),
iwl_pnvm_complete_fn, trans); iwl_pnvm_complete_fn, trans);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment