staging: rtlwifi: check for array overflow
authorDan Carpenter <dan.carpenter@oracle.com>
Thu, 24 Aug 2017 10:08:32 +0000 (13:08 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 28 Aug 2017 08:16:57 +0000 (10:16 +0200)
Smatch is distrustful of the "capab" value and marks it as user
controlled.  I think it actually comes from the firmware?  Anyway, I
looked at other drivers and they added a bounds check and it seems like
a harmless thing to have so I have added it here as well.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rtlwifi/base.c

index b81f0a9..9a045c7 100644 (file)
@@ -1414,6 +1414,10 @@ bool rtl_action_proc(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx)
                                  le16_to_cpu(mgmt->u.action.u.addba_req.capab);
                                tid = (capab &
                                       IEEE80211_ADDBA_PARAM_TID_MASK) >> 2;
+                               if (tid >= MAX_TID_COUNT) {
+                                       rcu_read_unlock();
+                                       return true;
+                               }
                                tid_data = &sta_entry->tids[tid];
                                if (tid_data->agg.rx_agg_state ==
                                    RTL_RX_AGG_START)