ath10k: implement updating shared htt txq state

Michal Kazior michal.kazior at tieto.com
Mon Apr 11 00:33:43 PDT 2016


On 11 April 2016 at 09:12, Dan Carpenter <dan.carpenter at oracle.com> wrote:
> Hello Michal Kazior,
>
> This is a semi-automatic email about new static checker warnings.
>
> The patch c1a43d9720d8: "ath10k: implement updating shared htt txq
> state" from Mar 6, 2016, leads to the following Smatch complaint:
>
> drivers/net/wireless/ath/ath10k/htt_tx.c:70 __ath10k_htt_tx_txq_recalc()
>          warn: variable dereferenced before check 'txq->sta' (see line 52)
>
> drivers/net/wireless/ath/ath10k/htt_tx.c
>     51          struct ath10k *ar = hw->priv;
>     52          struct ath10k_sta *arsta = (void *)txq->sta->drv_priv;
>                                                    ^^^^^^^^^^
> New dererence.
>
>     53          struct ath10k_vif *arvif = (void *)txq->vif->drv_priv;
>     54          unsigned long frame_cnt;
>     55          unsigned long byte_cnt;
>     56          int idx;
>     57          u32 bit;
>     58          u16 peer_id;
>     59          u8 tid;
>     60          u8 count;
>     61
>     62          lockdep_assert_held(&ar->htt.tx_lock);
>     63
>     64          if (!ar->htt.tx_q_state.enabled)
>     65                  return;
>     66
>     67          if (ar->htt.tx_q_state.mode != HTT_TX_MODE_SWITCH_PUSH_PULL)
>     68                  return;
>     69
>     70          if (txq->sta)
>                     ^^^^^^^^
> New check.
>
>     71                  peer_id = arsta->peer_id;
>     72          else
>
> There are several new warnings.  See also:

This is a false positive.

The `txq->sta->drv_priv` is a dynamic array which is basically equal
to `(void *)txq->sta + offsetof(struct ieee80211_sta, drv_priv)`.


Michał



More information about the ath10k mailing list