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

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@changeid


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent c2db0175
Loading
Loading
Loading
Loading
+8 −12
Original line number Diff line number Diff line
// 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"
@@ -318,7 +318,6 @@ int iwl_pnvm_load(struct iwl_trans *trans,
	kfree(data);

skip_parse:
	data = NULL;
	/* now try to get the reduce power table, if not loaded yet */
	if (!trans->reduce_power_loaded) {
		data = iwl_uefi_get_reduced_power(trans, &len);
@@ -329,19 +328,16 @@ int iwl_pnvm_load(struct iwl_trans *trans,
			 * trying again over and over.
			 */
			trans->reduce_power_loaded = true;

			goto skip_reduce_power;
		}
	}

		} else {
			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,
				   ntf_cmds, ARRAY_SIZE(ntf_cmds),
				   iwl_pnvm_complete_fn, trans);