carl9170: explain why sta cannot be NULL for ampdus
Christian Lamparter
maintainerPATCH 1/1 carl9170: explain why sta cannot be NULL for ampdus
Dan Carpenter reported that smatch detected a potential problem with the code [1]:
drivers/net/wireless/ath/carl9170/tx.c:1488 carl9170_op_tx()
error: we previously assumed 'sta' could be null (see line 1482)
drivers/net/wireless/ath/carl9170/tx.c
1482 if (sta) {
^^^^^ New check.
[...]
1485 }
1487 if (info->flags & IEEE80211_TX_CTL_AMPDU) {
1488 run = carl9170_tx_ampdu_queue(ar, sta, skb);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Old dereference of "sta" inside the call to carl9170_tx_ampdu_queue().
A range of solutions have been discussed in [2] and we agreed on the following: "
Quoted 4 lines
we might as well add a comment to
carl9170_tx_ampdu_queueand explain the situation [in a way that's obvious to a human reader]. This way we can save the "if"... which is a small win sincecarl9170_op_txis sort of a hot-path.
Putting a comment there is fine. Without the comment it's easy for a human reader to get confused why the check is there. So long as humans can read the code, that's all that matters."
[1] <http://www.spinics.net/lists/linux-wireless/msg94526.html>
[2] <http://www.spinics.net/lists/linux-kernel-janitors/msg14953.html>
--- drivers/net/wireless/ath/carl9170/tx.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/net/wireless/ath/carl9170/tx.c +7 -0
@@ -1485,6 +1485,13 @@ void carl9170_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb) }if (info->flags &IEEE80211_TX_CTL_AMPDU ) { +/* to static code analyzers and reviewers: +* mac80211 guarantees that a valid "sta" +* reference is present, if a frame is to +* be part of an ampdu. Hence any extra +* sta == NULL checks are redundant in this +* special case. +*/ run =carl9170_tx_ampdu_queue (ar, sta, skb);if (run)carl9170_tx_ampdu (ar);
Signature · 1 line
1.7.10.4