diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c index ace8d4727eff..fbddc7dcffa2 100644 --- a/core/wma/src/wma_features.c +++ b/core/wma/src/wma_features.c @@ -2449,14 +2449,16 @@ static void wma_wow_wake_up_stats(tp_wma_handle wma, uint8_t *data, case WOW_REASON_PATTERN_MATCH_FOUND: if (WMA_BCAST_MAC_ADDR == *data) { wma->wow_bcast_wake_up_count++; - if (qdf_nbuf_data_is_icmp_pkt(data)) + if (len >= WMA_IPV4_PROTO_GET_MIN_LEN && + qdf_nbuf_data_is_icmp_pkt(data)) wma->wow_icmpv4_count++; else if ((len > WMA_ICMP_V6_TYPE_OFFSET) && qdf_nbuf_data_is_icmpv6_pkt(data)) wma->wow_icmpv6_count++; } else if (WMA_MCAST_IPV4_MAC_ADDR == *data) { wma->wow_ipv4_mcast_wake_up_count++; - if (WMA_ICMP_PROTOCOL == *(data + WMA_IPV4_PROTOCOL)) + if (len >= WMA_IPV4_PROTO_GET_MIN_LEN && + WMA_ICMP_PROTOCOL == *(data + WMA_IPV4_PROTOCOL)) wma->wow_icmpv4_count++; } else if (WMA_MCAST_IPV6_MAC_ADDR == *data) { wma->wow_ipv6_mcast_wake_up_count++; @@ -2466,13 +2468,15 @@ static void wma_wow_wake_up_stats(tp_wma_handle wma, uint8_t *data, WMA_LOGA("ICMP_V6 data len %d", len); } else { wma->wow_ucast_wake_up_count++; - if (qdf_nbuf_data_is_ipv4_pkt(data)) { - if (qdf_nbuf_data_is_ipv4_mcast_pkt(data)) - wma->wow_ipv4_mcast_wake_up_count++; - if (WMA_ICMP_PROTOCOL == - *(data + WMA_IPV4_PROTOCOL)) - wma->wow_icmpv4_count++; - } else if ((len > WMA_ICMP_V6_TYPE_OFFSET) && + if (qdf_nbuf_data_is_ipv4_mcast_pkt(data)) + wma->wow_ipv4_mcast_wake_up_count++; + else if (qdf_nbuf_data_is_ipv6_mcast_pkt(data)) + wma->wow_ipv6_mcast_wake_up_count++; + + if (len >= WMA_IPV4_PROTO_GET_MIN_LEN && + qdf_nbuf_data_is_icmp_pkt(data)) + wma->wow_icmpv4_count++; + else if (len > WMA_ICMP_V6_TYPE_OFFSET && qdf_nbuf_data_is_icmpv6_pkt(data)) wma->wow_icmpv6_count++; }