Wifi-Hal: Validate TX rate code before parsing it
Validate the per packet TX rate codes and calculate
transmit rate only for valid rate codes.
Bug: 201226143
Test: Regression tests
Change-Id: I287d19d97970523b0d695e7dcbd606a49fa23f7c
CRs-Fixed: 2469251
diff --git a/qcwcn/wifi_hal/pkt_stats.h b/qcwcn/wifi_hal/pkt_stats.h
index 7cc64b8..d4348cd 100644
--- a/qcwcn/wifi_hal/pkt_stats.h
+++ b/qcwcn/wifi_hal/pkt_stats.h
@@ -49,6 +49,7 @@
 #define PKTLOG_TYPE_MAX             12
 #define BW_OFFSET 8
 #define INVALID_RSSI 255
+#define INVALID_RATE_CODE 0xff
 
 /* Based on pkt log V2, this type of event will triggered */
 #define PKTLOG_TYPE_PKT_SW_EVENT    10
diff --git a/qcwcn/wifi_hal/wifilogger_diag.cpp b/qcwcn/wifi_hal/wifilogger_diag.cpp
index 436a42b..bdc9c7f 100644
--- a/qcwcn/wifi_hal/wifilogger_diag.cpp
+++ b/qcwcn/wifi_hal/wifilogger_diag.cpp
@@ -2338,7 +2338,8 @@
                        node_pkt_t.qos_ctrl = *((u8*)(node_pkt_data + QOS_CTRL_OFFSET));
                        rb_pkt_stats->tid = node_pkt_t.qos_ctrl & 0xF;
                        rb_pkt_stats->MCS = get_tx_mcs_v1(node_pkt_data);
-                       rb_pkt_stats->last_transmit_rate = get_rate_v1(rb_pkt_stats->MCS);
+                       if ((rb_pkt_stats->MCS & INVALID_RATE_CODE) != INVALID_RATE_CODE)
+                           rb_pkt_stats->last_transmit_rate = get_rate_v1(rb_pkt_stats->MCS);
                        node_pkt_t.bmap_failed = *((u64*)(node_pkt_data + BMAP_FAILED_OFFSET));
                        node_pkt_t.bmap_enqueued = *((u64*)(node_pkt_data + BMAP_ENQUEUED_OFFSET));