ipacm: KW fix
Fix KW issues and put condition to prevent access array
out of bound.
Change-Id: Iae5c84160b8298b8c8b5969438f9395269fad1fe
diff --git a/ipacm/src/IPACM_CmdQueue.cpp b/ipacm/src/IPACM_CmdQueue.cpp
index 3a2d470..cab78e2 100644
--- a/ipacm/src/IPACM_CmdQueue.cpp
+++ b/ipacm/src/IPACM_CmdQueue.cpp
@@ -155,8 +155,12 @@
item = MsgQueueExternal->dequeue();
if(item)
{
- IPACMDBG("Get event %s from external queue.\n",
- IPACM_Iface::ipacmcfg->getEventName(item->evt.data.event));
+ eventName = IPACM_Iface::ipacmcfg->getEventName(item->evt.data.event);
+ if (eventName != NULL)
+ {
+ IPACMDBG("Get event %s from external queue.\n",
+ eventName);
+ }
}
}
else
diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp
index c792e6e..871b957 100644
--- a/ipacm/src/IPACM_Lan.cpp
+++ b/ipacm/src/IPACM_Lan.cpp
@@ -748,7 +748,7 @@
if (ipa_interface_index == ipa_if_num)
{
IPACMDBG_H("Received IPA_DOWNSTREAM_ADD event.\n");
- if (is_downstream_set[data->prefix.iptype] == false)
+ if (data->prefix.iptype < IPA_IP_MAX && is_downstream_set[data->prefix.iptype] == false)
{
IPACMDBG_H("Add downstream for IP iptype %d\n", data->prefix.iptype);
is_downstream_set[data->prefix.iptype] = true;
@@ -3331,46 +3331,43 @@
#ifdef FEATURE_IPACM_HAL
/* add prefix equation in modem UL rules */
- if(iptype == IPA_IP_v4)
+ if(iptype == IPA_IP_v4 && flt_rule_entry.rule.eq_attrib.num_offset_meq_32 < IPA_IPFLTR_NUM_MEQ_32_EQNS)
{
flt_rule_entry.rule.eq_attrib.num_offset_meq_32++;
- if(flt_rule_entry.rule.eq_attrib.num_offset_meq_32 <= IPA_IPFLTR_NUM_MEQ_32_EQNS)
- {
- eq_index = flt_rule_entry.rule.eq_attrib.num_offset_meq_32 - 1;
+ eq_index = flt_rule_entry.rule.eq_attrib.num_offset_meq_32 - 1;
#ifdef FEATURE_IPA_V3
- if(eq_index == 0)
- {
- flt_rule_entry.rule.eq_attrib.rule_eq_bitmap |= (1<<5);
- }
- else
- {
- flt_rule_entry.rule.eq_attrib.rule_eq_bitmap |= (1<<6);
- }
-#else
- if(eq_index == 0)
- {
- flt_rule_entry.rule.eq_attrib.rule_eq_bitmap |= (1<<2);
- }
- else
- {
- flt_rule_entry.rule.eq_attrib.rule_eq_bitmap |= (1<<3);
- }
-#endif
- flt_rule_entry.rule.eq_attrib.offset_meq_32[eq_index].offset = 12;
- flt_rule_entry.rule.eq_attrib.offset_meq_32[eq_index].mask = prefix[IPA_IP_v4].v4Mask;
- flt_rule_entry.rule.eq_attrib.offset_meq_32[eq_index].value = prefix[IPA_IP_v4].v4Addr;
+ if(eq_index == 0)
+ {
+ flt_rule_entry.rule.eq_attrib.rule_eq_bitmap |= (1<<5);
}
else
{
- IPACMERR("Run out of MEQ32 equation.\n");
- flt_rule_entry.rule.eq_attrib.num_offset_meq_32--;
+ flt_rule_entry.rule.eq_attrib.rule_eq_bitmap |= (1<<6);
}
+#else
+ if(eq_index == 0)
+ {
+ flt_rule_entry.rule.eq_attrib.rule_eq_bitmap |= (1<<2);
+ }
+ else
+ {
+ flt_rule_entry.rule.eq_attrib.rule_eq_bitmap |= (1<<3);
+ }
+#endif
+ flt_rule_entry.rule.eq_attrib.offset_meq_32[eq_index].offset = 12;
+ flt_rule_entry.rule.eq_attrib.offset_meq_32[eq_index].mask = prefix[IPA_IP_v4].v4Mask;
+ flt_rule_entry.rule.eq_attrib.offset_meq_32[eq_index].value = prefix[IPA_IP_v4].v4Addr;
+ }
+ else if (flt_rule_entry.rule.eq_attrib.num_offset_meq_32 > IPA_IPFLTR_NUM_MEQ_32_EQNS)
+ {
+ IPACMERR("Run out of MEQ32 equation.\n");
+ flt_rule_entry.rule.eq_attrib.num_offset_meq_32--;
}
else
{
- flt_rule_entry.rule.eq_attrib.num_offset_meq_128++;
- if(flt_rule_entry.rule.eq_attrib.num_offset_meq_128 <= IPA_IPFLTR_NUM_MEQ_128_EQNS)
+ if (flt_rule_entry.rule.eq_attrib.num_offset_meq_128 < IPA_IPFLTR_NUM_MEQ_128_EQNS)
{
+ flt_rule_entry.rule.eq_attrib.num_offset_meq_128++;
eq_index = flt_rule_entry.rule.eq_attrib.num_offset_meq_128 - 1;
#ifdef FEATURE_IPA_V3
if(eq_index == 0)
@@ -3382,21 +3379,21 @@
flt_rule_entry.rule.eq_attrib.rule_eq_bitmap |= (1<<4);
}
*(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].mask + 0)
- = prefix[IPA_IP_v6].v6Mask[3];
+ = prefix[IPA_IP_v6].v6Mask[3];
*(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].mask + 4)
- = prefix[IPA_IP_v6].v6Mask[2];
+ = prefix[IPA_IP_v6].v6Mask[2];
*(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].mask + 8)
- = prefix[IPA_IP_v6].v6Mask[1];
+ = prefix[IPA_IP_v6].v6Mask[1];
*(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].mask + 12)
- = prefix[IPA_IP_v6].v6Mask[0];
+ = prefix[IPA_IP_v6].v6Mask[0];
*(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].value + 0)
- = prefix[IPA_IP_v6].v6Addr[3];
+ = prefix[IPA_IP_v6].v6Addr[3];
*(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].value + 4)
- = prefix[IPA_IP_v6].v6Addr[2];
+ = prefix[IPA_IP_v6].v6Addr[2];
*(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].value + 8)
- = prefix[IPA_IP_v6].v6Addr[1];
+ = prefix[IPA_IP_v6].v6Addr[1];
*(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].value + 12)
- = prefix[IPA_IP_v6].v6Addr[0];
+ = prefix[IPA_IP_v6].v6Addr[0];
#else
if(eq_index == 0)
{
@@ -3407,24 +3404,24 @@
flt_rule_entry.rule.eq_attrib.rule_eq_bitmap |= (1<<10);
}
*(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].mask + 0)
- = prefix[IPA_IP_v6].v6Mask[0];
+ = prefix[IPA_IP_v6].v6Mask[0];
*(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].mask + 4)
- = prefix[IPA_IP_v6].v6Mask[1];
+ = prefix[IPA_IP_v6].v6Mask[1];
*(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].mask + 8)
- = prefix[IPA_IP_v6].v6Mask[2];
+ = prefix[IPA_IP_v6].v6Mask[2];
*(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].mask + 12)
- = prefix[IPA_IP_v6].v6Mask[3];
+ = prefix[IPA_IP_v6].v6Mask[3];
*(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].value + 0)
- = prefix[IPA_IP_v6].v6Addr[0];
+ = prefix[IPA_IP_v6].v6Addr[0];
*(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].value + 4)
- = prefix[IPA_IP_v6].v6Addr[1];
+ = prefix[IPA_IP_v6].v6Addr[1];
*(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].value + 8)
- = prefix[IPA_IP_v6].v6Addr[2];
+ = prefix[IPA_IP_v6].v6Addr[2];
*(uint32_t *)(flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].value + 12)
- = prefix[IPA_IP_v6].v6Addr[3];
+ = prefix[IPA_IP_v6].v6Addr[3];
#endif
flt_rule_entry.rule.eq_attrib.offset_meq_128[eq_index].offset = 8;
- }
+ }
else
{
IPACMERR("Run out of MEQ128 equation.\n");
diff --git a/ipacm/src/IPACM_Wlan.cpp b/ipacm/src/IPACM_Wlan.cpp
index 347cb2e..666ee10 100644
--- a/ipacm/src/IPACM_Wlan.cpp
+++ b/ipacm/src/IPACM_Wlan.cpp
@@ -550,7 +550,7 @@
if(ipa_interface_index == ipa_if_num)
{
IPACMDBG_H("Received IPA_DOWNSTREAM_ADD event.\n");
- if(is_downstream_set[data->prefix.iptype] == false)
+ if(data->prefix.iptype < IPA_IP_MAX && is_downstream_set[data->prefix.iptype] == false)
{
IPACMDBG_H("Add downstream for IP iptype %d.\n", data->prefix.iptype);
is_downstream_set[data->prefix.iptype] = true;