]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
wifi: iwlwifi: pcie: fix NULL pointer dereference in iwl_pcie_irq_rx_msix_handler()
authorAnjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
Wed, 14 Jun 2023 09:41:32 +0000 (12:41 +0300)
committerRoxana Nicolescu <roxana.nicolescu@canonical.com>
Mon, 2 Oct 2023 15:19:36 +0000 (17:19 +0200)
BugLink: https://bugs.launchpad.net/bugs/2034469
[ Upstream commit 1902f1953b8ba100ee8705cb8a6f1a9795550eca ]

rxq can be NULL only when trans_pcie->rxq is NULL and entry->entry
is zero. For the case when entry->entry is not equal to 0, rxq
won't be NULL even if trans_pcie->rxq is NULL. Modify checker to
check for trans_pcie->rxq.

Fixes: abc599efa67b ("iwlwifi: pcie: don't crash when rx queues aren't allocated in interrupt")
Signed-off-by: Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230614123446.5a5eb3889a4a.I375a1d58f16b48cd2044e7b7caddae512d7c86fd@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
drivers/net/wireless/intel/iwlwifi/pcie/rx.c

index 9c9f87fe8377701c9e7eb5bb9de9620153cdf1b3..b455e981faa1faac2539b3ad313393011ae487d3 100644 (file)
@@ -1620,14 +1620,14 @@ irqreturn_t iwl_pcie_irq_rx_msix_handler(int irq, void *dev_id)
        struct msix_entry *entry = dev_id;
        struct iwl_trans_pcie *trans_pcie = iwl_pcie_get_trans_pcie(entry);
        struct iwl_trans *trans = trans_pcie->trans;
-       struct iwl_rxq *rxq = &trans_pcie->rxq[entry->entry];
+       struct iwl_rxq *rxq;
 
        trace_iwlwifi_dev_irq_msix(trans->dev, entry, false, 0, 0);
 
        if (WARN_ON(entry->entry >= trans->num_rx_queues))
                return IRQ_NONE;
 
-       if (!rxq) {
+       if (!trans_pcie->rxq) {
                if (net_ratelimit())
                        IWL_ERR(trans,
                                "[%d] Got MSI-X interrupt before we have Rx queues\n",
@@ -1635,6 +1635,7 @@ irqreturn_t iwl_pcie_irq_rx_msix_handler(int irq, void *dev_id)
                return IRQ_NONE;
        }
 
+       rxq = &trans_pcie->rxq[entry->entry];
        lock_map_acquire(&trans->sync_cmd_lockdep_map);
        IWL_DEBUG_ISR(trans, "[%d] Got interrupt\n", entry->entry);