ath9k: Fix some smatch warnings
authorRajkumar Manoharan <rmanohar@qca.qualcomm.com>
Sun, 17 Jul 2011 06:08:49 +0000 (11:38 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 18 Jul 2011 18:29:46 +0000 (14:29 -0400)
drivers/net/wireless/ath/ath9k/hif_usb.c +135 hif_usb_mgmt_cb(6) warn:
variable dereferenced before check 'cmd'
drivers/net/wireless/ath/ath9k/btcoex.c +77 ath9k_hw_init_btcoex_hw(38)
error: buffer overflow 'ah->hw_gen_timers.gen_timer_index' 32 <=
2009813776

Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/btcoex.c
drivers/net/wireless/ath/ath9k/hif_usb.c

index 41ce0b1398868eeab8c954af9b493913d05c5772..6635c377dc00e8d977b2094b345a4d287f721ec3 100644 (file)
@@ -50,7 +50,7 @@ void ath9k_hw_init_btcoex_hw(struct ath_hw *ah, int qnum)
                .bt_first_slot_time = 5,
                .bt_hold_rx_clear = true,
        };
-       u32 i;
+       u32 i, idx;
        bool rxclear_polarity = ath_bt_config.bt_rxclear_polarity;
 
        if (AR_SREV_9300_20_OR_LATER(ah))
@@ -73,8 +73,10 @@ void ath9k_hw_init_btcoex_hw(struct ath_hw *ah, int qnum)
                SM(ATH_BTCOEX_BMISS_THRESH, AR_BT_BCN_MISS_THRESH) |
                AR_BT_DISABLE_BT_ANT;
 
-       for (i = 0; i < 32; i++)
-               ah->hw_gen_timers.gen_timer_index[(debruijn32 << i) >> 27] = i;
+       for (i = 0; i < 32; i++) {
+               idx = (debruijn32 << i) >> 27;
+               ah->hw_gen_timers.gen_timer_index[idx] = i;
+       }
 }
 EXPORT_SYMBOL(ath9k_hw_init_btcoex_hw);
 
index 1d11ae101d679e4502c382afc30b8d38c032e477..d3f4a59cd45688a8009212d06d90ed79b3b45bf6 100644 (file)
@@ -130,12 +130,14 @@ static int hif_usb_send_regout(struct hif_device_usb *hif_dev,
 static void hif_usb_mgmt_cb(struct urb *urb)
 {
        struct cmd_buf *cmd = (struct cmd_buf *)urb->context;
-       struct hif_device_usb *hif_dev = cmd->hif_dev;
+       struct hif_device_usb *hif_dev;
        bool txok = true;
 
        if (!cmd || !cmd->skb || !cmd->hif_dev)
                return;
 
+       hif_dev = cmd->hif_dev;
+
        switch (urb->status) {
        case 0:
                break;