wifi: iwlwifi: add a validity check of queue_id in iwl_txq_reclaim
authorMiri Korenblit <miriam.rachel.korenblit@intel.com>
Thu, 13 Apr 2023 07:44:03 +0000 (10:44 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 13 Apr 2023 14:29:59 +0000 (16:29 +0200)
This function receives the queue id to reclaim packets from. Currently
we're passing to it the queue id we received from the FW in the flush
response. We don't do any check of this value and it might be invalid.
In such case we will refer to a pointer to a queue which might be NULL.
Fix this by adding a validity check of the queue id before using it.

Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230413102635.a9c3fd32bce7.I5fbdcf3b1b80eb96a907116c166f19dc0aae7cb8@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/queue/tx.c

index 726185d6fab8b724ee680daa660b4be2b0776fba..d1c39c214f95ae5980a66b3bab1ca70710380701 100644 (file)
@@ -1554,14 +1554,18 @@ void iwl_txq_reclaim(struct iwl_trans *trans, int txq_id, int ssn,
                     struct sk_buff_head *skbs)
 {
        struct iwl_txq *txq = trans->txqs.txq[txq_id];
-       int tfd_num = iwl_txq_get_cmd_index(txq, ssn);
-       int read_ptr = iwl_txq_get_cmd_index(txq, txq->read_ptr);
-       int last_to_free;
+       int tfd_num, read_ptr, last_to_free;
 
        /* This function is not meant to release cmd queue*/
        if (WARN_ON(txq_id == trans->txqs.cmd.q_id))
                return;
 
+       if (WARN_ON(!txq))
+               return;
+
+       tfd_num = iwl_txq_get_cmd_index(txq, ssn);
+       read_ptr = iwl_txq_get_cmd_index(txq, txq->read_ptr);
+
        spin_lock_bh(&txq->lock);
 
        if (!test_bit(txq_id, trans->txqs.queue_used)) {