[bug report] mt76: add support for setting mcast rate

Dan Carpenter dan.carpenter at oracle.com
Tue Nov 16 03:33:21 PST 2021


Hello Ryder Lee,

This is a semi-automatic email about new static checker warnings.

The patch 33920b2bf048: "mt76: add support for setting mcast rate"
from Jul 21, 2021, leads to the following Smatch complaint:

    drivers/net/wireless/mediatek/mt76/mt7921/mac.c:906 mt7921_mac_write_txwi()
    error: we previously assumed 'vif' could be null (see line 852)

drivers/net/wireless/mediatek/mt76/mt7921/mac.c
   851	
   852		if (vif) {
                    ^^^
At the start of the function it assumes that "vif" can be NULL

   853			struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
   854	
   855			omac_idx = mvif->omac_idx;
   856			wmm_idx = mvif->wmm_idx;
   857		}
   858	
   859		if (beacon) {
   860			p_fmt = MT_TX_TYPE_FW;
   861			q_idx = MT_LMAC_BCN0;
   862		} else if (skb_get_queue_mapping(skb) >= MT_TXQ_PSD) {
   863			p_fmt = is_mmio ? MT_TX_TYPE_CT : MT_TX_TYPE_SF;
   864			q_idx = MT_LMAC_ALTX0;
   865		} else {
   866			p_fmt = is_mmio ? MT_TX_TYPE_CT : MT_TX_TYPE_SF;
   867			q_idx = wmm_idx * MT7921_MAX_WMM_SETS +
   868				mt7921_lmac_mapping(dev, skb_get_queue_mapping(skb));
   869		}
   870	
   871		val = FIELD_PREP(MT_TXD0_TX_BYTES, skb->len + sz_txd) |
   872		      FIELD_PREP(MT_TXD0_PKT_FMT, p_fmt) |
   873		      FIELD_PREP(MT_TXD0_Q_IDX, q_idx);
   874		txwi[0] = cpu_to_le32(val);
   875	
   876		val = MT_TXD1_LONG_FORMAT |
   877		      FIELD_PREP(MT_TXD1_WLAN_IDX, wcid->idx) |
   878		      FIELD_PREP(MT_TXD1_OWN_MAC, omac_idx);
   879	
   880		txwi[1] = cpu_to_le32(val);
   881		txwi[2] = 0;
   882	
   883		val = FIELD_PREP(MT_TXD3_REM_TX_COUNT, tx_count);
   884		if (key)
   885			val |= MT_TXD3_PROTECT_FRAME;
   886		if (info->flags & IEEE80211_TX_CTL_NO_ACK)
   887			val |= MT_TXD3_NO_ACK;
   888	
   889		txwi[3] = cpu_to_le32(val);
   890		txwi[4] = 0;
   891	
   892		val = FIELD_PREP(MT_TXD5_PID, pid);
   893		if (pid >= MT_PACKET_ID_FIRST)
   894			val |= MT_TXD5_TX_STATUS_HOST;
   895		txwi[5] = cpu_to_le32(val);
   896	
   897		txwi[6] = 0;
   898		txwi[7] = wcid->amsdu ? cpu_to_le32(MT_TXD7_HW_AMSDU) : 0;
   899	
   900		if (is_8023)
   901			mt7921_mac_write_txwi_8023(dev, txwi, skb, wcid);
   902		else
   903			mt7921_mac_write_txwi_80211(dev, txwi, skb, key);
   904	
   905		if (txwi[2] & cpu_to_le32(MT_TXD2_FIX_RATE)) {
   906			int rateidx = ffs(vif->bss_conf.basic_rates) - 1;
                                          ^^^^^
But the patch adds a new unchecked dereference

   907			u16 rate, mode;
   908	

regards,
dan carpenter



More information about the Linux-mediatek mailing list