Commit 9cf671d6 authored by Emmanuel Grumbach's avatar Emmanuel Grumbach Committed by Luca Coelho
Browse files

iwlwifi: pcie: NULLify pointers after free



Remember that those pointers have been freed by setting them
to NULL. Otherwise, we'd keep rxq pointing to random memory
which would prevent us from trying to re-allocate the Rx
resources if we call rx_alloc again.

Also, propagate the allocation failure to the caller of
iwl_pcie_nic_init so that we won't go further in the
start flow.

Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20210210135352.996b400d2f1c.I630379c504644700322f57b259383ae0af8d1975@changeid


Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
parent 28db1862
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -834,8 +834,11 @@ static int iwl_pcie_rx_alloc(struct iwl_trans *trans)
		trans_pcie->base_rb_stts_dma = 0;
	}
	kfree(trans_pcie->rx_pool);
	trans_pcie->rx_pool = NULL;
	kfree(trans_pcie->global_table);
	trans_pcie->global_table = NULL;
	kfree(trans_pcie->rxq);
	trans_pcie->rxq = NULL;

	return ret;
}
+6 −2
Original line number Diff line number Diff line
@@ -523,11 +523,15 @@ static int iwl_pcie_nic_init(struct iwl_trans *trans)
	iwl_op_mode_nic_config(trans->op_mode);

	/* Allocate the RX queue, or reset if it is already allocated */
	iwl_pcie_rx_init(trans);
	ret = iwl_pcie_rx_init(trans);
	if (ret)
		return ret;

	/* Allocate or reset and init all Tx and Command queues */
	if (iwl_pcie_tx_init(trans))
	if (iwl_pcie_tx_init(trans)) {
		iwl_pcie_rx_free(trans);
		return -ENOMEM;
	}

	if (trans->trans_cfg->base_params->shadow_reg_enable) {
		/* enable shadow regs in HW */