]> Git Repo - linux.git/commitdiff
wifi: iwlwifi: mvm: check vif for NULL/ERR_PTR before dereference
authorMiri Korenblit <[email protected]>
Wed, 3 Jul 2024 03:43:15 +0000 (06:43 +0300)
committerJohannes Berg <[email protected]>
Wed, 3 Jul 2024 14:06:54 +0000 (16:06 +0200)
iwl_mvm_get_bss_vif might return a NULL or ERR_PTR. Some of the callers
check only the NULL case, and some doesn't check at all.

Some of the callers even have a pointer to the mvmvif of the bss vif,
so we don't even need to call this function, and can simply get the vif
from mvmvif. Do it for those cases, and for the others - properly check
if IS_ERR_OR_NULL

Fixes: ec0d43d26f2c ("wifi: iwlwifi: mvm: Activate EMLSR based on traffic volume")
Signed-off-by: Miri Korenblit <[email protected]>
Link: https://patch.msgid.link/20240703064027.a661f8c65aac.I45cf09b01af8ee3d55828863958ead741ea43b7f@changeid
Signed-off-by: Johannes Berg <[email protected]>
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
drivers/net/wireless/intel/iwlwifi/mvm/ops.c
drivers/net/wireless/intel/iwlwifi/mvm/rx.c

index d8c72da617ae3b44de782b9e6ae28b701b277efe..dac6155ae1bd0d910b55001512d88b6c6c0d1122 100644 (file)
@@ -1656,7 +1656,8 @@ static void iwl_mvm_prevent_esr_done_wk(struct wiphy *wiphy,
        struct iwl_mvm_vif *mvmvif =
                container_of(wk, struct iwl_mvm_vif, prevent_esr_done_wk.work);
        struct iwl_mvm *mvm = mvmvif->mvm;
-       struct ieee80211_vif *vif = iwl_mvm_get_bss_vif(mvm);
+       struct ieee80211_vif *vif =
+               container_of((void *)mvmvif, struct ieee80211_vif, drv_priv);
 
        mutex_lock(&mvm->mutex);
        iwl_mvm_unblock_esr(mvm, vif, IWL_MVM_ESR_BLOCKED_PREVENTION);
@@ -1682,7 +1683,8 @@ static void iwl_mvm_unblock_esr_tpt(struct wiphy *wiphy, struct wiphy_work *wk)
        struct iwl_mvm_vif *mvmvif =
                container_of(wk, struct iwl_mvm_vif, unblock_esr_tpt_wk);
        struct iwl_mvm *mvm = mvmvif->mvm;
-       struct ieee80211_vif *vif = iwl_mvm_get_bss_vif(mvm);
+       struct ieee80211_vif *vif =
+               container_of((void *)mvmvif, struct ieee80211_vif, drv_priv);
 
        mutex_lock(&mvm->mutex);
        iwl_mvm_unblock_esr(mvm, vif, IWL_MVM_ESR_BLOCKED_TPT);
index ac6f6e40b418ef0d29a19822b387c27e40ac3c9f..d343432474db03937db622fa3b1ac5ddf7dca3ec 100644 (file)
@@ -153,7 +153,7 @@ static void iwl_mvm_rx_esr_mode_notif(struct iwl_mvm *mvm,
        struct ieee80211_vif *vif = iwl_mvm_get_bss_vif(mvm);
 
        /* FW recommendations is only for entering EMLSR */
-       if (!vif || iwl_mvm_vif_from_mac80211(vif)->esr_active)
+       if (IS_ERR_OR_NULL(vif) || iwl_mvm_vif_from_mac80211(vif)->esr_active)
                return;
 
        if (le32_to_cpu(notif->action) == ESR_RECOMMEND_ENTER)
index 773cc2bdcb0be4ae28a515e9afa32940670cd42d..6e933907f98524950b7798d9b28d16f9469ebca4 100644 (file)
@@ -966,7 +966,7 @@ static void iwl_mvm_update_esr_mode_tpt(struct iwl_mvm *mvm)
 
        lockdep_assert_held(&mvm->mutex);
 
-       if (!bss_vif)
+       if (IS_ERR_OR_NULL(bss_vif))
                return;
 
        mvmvif = iwl_mvm_vif_from_mac80211(bss_vif);
This page took 0.069265 seconds and 4 git commands to generate.