summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUtkarsh Saxena <usaxena@codeaurora.org>2016-07-26 12:41:24 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2016-08-16 01:53:19 -0700
commitb72097480d9e58e7f86141dd094b013c06705f38 (patch)
tree977c198ac3861e25ed74183f11bf33bc140ebfb9
parent6fb842a336d2c0aa6382d07bac7cddbd65bfb875 (diff)
downloadipacfg-mgr-b72097480d9e58e7f86141dd094b013c06705f38.tar.gz
ipacm: Fix NULL pointer and boundary check
Initialize the pNatIfaces global variable to NULL in constructor. Check iface_ipa_index_query api for valid return of boundary checking. Change-Id: I90abc66361ec16b4f4200e0f4aaeef07834da039
-rw-r--r--ipacm/src/IPACM_Config.cpp1
-rw-r--r--ipacm/src/IPACM_IfaceManager.cpp30
-rw-r--r--ipacm/src/IPACM_Neighbor.cpp58
3 files changed, 76 insertions, 13 deletions
diff --git a/ipacm/src/IPACM_Config.cpp b/ipacm/src/IPACM_Config.cpp
index 17d24a3..29ce787 100644
--- a/ipacm/src/IPACM_Config.cpp
+++ b/ipacm/src/IPACM_Config.cpp
@@ -112,6 +112,7 @@ IPACM_Config::IPACM_Config()
{
iface_table = NULL;
alg_table = NULL;
+ pNatIfaces = NULL;
memset(&ipa_client_rm_map_tbl, 0, sizeof(ipa_client_rm_map_tbl));
memset(&ipa_rm_tbl, 0, sizeof(ipa_rm_tbl));
ipa_rm_a2_check=0;
diff --git a/ipacm/src/IPACM_IfaceManager.cpp b/ipacm/src/IPACM_IfaceManager.cpp
index 9f06a93..ef5e0a0 100644
--- a/ipacm/src/IPACM_IfaceManager.cpp
+++ b/ipacm/src/IPACM_IfaceManager.cpp
@@ -83,6 +83,11 @@ void IPACM_IfaceManager::event_callback(ipa_cm_event_id event, void *param)
case IPA_BRIDGE_LINK_UP_EVENT:
IPACMDBG_H(" Save the bridge0 mac info in IPACM_cfg \n");
ipa_interface_index = IPACM_Iface::iface_ipa_index_query(data_all->if_index);
+ /* check for failure return */
+ if (IPACM_FAILURE == ipa_interface_index) {
+ IPACMERR("IPA_BRIDGE_LINK_UP_EVENT: not supported iface id: %d\n", data_all->if_index);
+ break;
+ }
/* check if iface is bridge interface*/
if (strcmp(IPACM_Iface::ipacmcfg->ipa_virtual_iface_name, IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name) == 0)
{
@@ -98,6 +103,11 @@ void IPACM_IfaceManager::event_callback(ipa_cm_event_id event, void *param)
case IPA_LINK_UP_EVENT:
IPACMDBG_H("Recieved IPA_LINK_UP_EVENT event: link up %d: \n", evt_data->if_index);
ipa_interface_index = IPACM_Iface::iface_ipa_index_query(evt_data->if_index);
+ /* check for failure return */
+ if (IPACM_FAILURE == ipa_interface_index) {
+ IPACMERR("IPA_LINK_UP_EVENT: not supported iface id: %d\n", evt_data->if_index);
+ break;
+ }
/* LTE-backhaul */
if(IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat == EMBMS_IF)
{
@@ -115,6 +125,11 @@ void IPACM_IfaceManager::event_callback(ipa_cm_event_id event, void *param)
case IPA_USB_LINK_UP_EVENT:
IPACMDBG_H("Recieved IPA_USB_LINK_UP_EVENT event: link up %d: \n", evt_data->if_index);
ipa_interface_index = IPACM_Iface::iface_ipa_index_query(evt_data->if_index);
+ /* check for failure return */
+ if (IPACM_FAILURE == ipa_interface_index) {
+ IPACMERR("IPA_USB_LINK_UP_EVENT: not supported iface id: %d\n", evt_data->if_index);
+ break;
+ }
/* check if it's WAN_IF */
if(IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat == WAN_IF)
{
@@ -134,6 +149,11 @@ void IPACM_IfaceManager::event_callback(ipa_cm_event_id event, void *param)
case IPA_WLAN_AP_LINK_UP_EVENT:
ipa_interface_index = IPACM_Iface::iface_ipa_index_query(evt_data->if_index);
+ /* check for failure return */
+ if (IPACM_FAILURE == ipa_interface_index) {
+ IPACMERR("IPA_WLAN_AP_LINK_UP_EVENT: not supported iface id: %d\n", evt_data->if_index);
+ break;
+ }
/* change iface category from unknown to WLAN_IF */
if(IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat == UNKNOWN_IF)
{
@@ -151,6 +171,11 @@ void IPACM_IfaceManager::event_callback(ipa_cm_event_id event, void *param)
case IPA_WLAN_STA_LINK_UP_EVENT:
ipa_interface_index = IPACM_Iface::iface_ipa_index_query(StaData->if_index);
+ /* check for failure return */
+ if (IPACM_FAILURE == ipa_interface_index) {
+ IPACMERR("IPA_WLAN_STA_LINK_UP_EVENT: not supported iface id: %d\n", StaData->if_index);
+ break;
+ }
/* change iface category from unknown to WAN_IF */
if(IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat == UNKNOWN_IF)
{
@@ -175,6 +200,11 @@ void IPACM_IfaceManager::event_callback(ipa_cm_event_id event, void *param)
/* Add new instance open for eMBMS iface and wan iface */
case IPA_WAN_EMBMS_LINK_UP_EVENT:
ipa_interface_index = IPACM_Iface::iface_ipa_index_query(evt_data->if_index);
+ /* check for failure return */
+ if (IPACM_FAILURE == ipa_interface_index) {
+ IPACMERR("IPA_WAN_EMBMS_LINK_UP_EVENT: not supported iface id: %d\n", evt_data->if_index);
+ break;
+ }
/* change iface category from unknown to EMBMS_IF */
if ((IPACM_Iface::ipacmcfg->ipacm_odu_enable == true) && (IPACM_Iface::ipacmcfg->ipacm_odu_embms_enable == true))
{
diff --git a/ipacm/src/IPACM_Neighbor.cpp b/ipacm/src/IPACM_Neighbor.cpp
index 6a49502..b4587d3 100644
--- a/ipacm/src/IPACM_Neighbor.cpp
+++ b/ipacm/src/IPACM_Neighbor.cpp
@@ -71,6 +71,11 @@ void IPACM_Neighbor::event_callback(ipa_cm_event_id event, void *param)
{
ipacm_event_data_wlan_ex *data = (ipacm_event_data_wlan_ex *)param;
ipa_interface_index = IPACM_Iface::iface_ipa_index_query(data->if_index);
+ /* check for failure return */
+ if (IPACM_FAILURE == ipa_interface_index) {
+ IPACMERR("IPA_WLAN_CLIENT_ADD_EVENT_EX: not supported iface id: %d\n", data->if_index);
+ break;
+ }
uint8_t client_mac_addr[6];
IPACMDBG_H("Received IPA_WLAN_CLIENT_ADD_EVENT\n");
@@ -132,9 +137,14 @@ void IPACM_Neighbor::event_callback(ipa_cm_event_id event, void *param)
IPACM_EvtDispatcher::PostEvt(&evt_data);
/* ask for replaced iface name*/
ipa_interface_index = IPACM_Iface::iface_ipa_index_query(data_all->if_index);
- IPACMDBG_H("Posted event %d, with %s for ipv4 client re-connect\n",
- evt_data.event,
- IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name);
+ /* check for failure return */
+ if (IPACM_FAILURE == ipa_interface_index) {
+ IPACMERR("not supported iface id: %d\n", data_all->if_index);
+ } else {
+ IPACMDBG_H("Posted event %d, with %s for ipv4 client re-connect\n",
+ evt_data.event,
+ IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name);
+ }
}
}
break;
@@ -156,7 +166,11 @@ void IPACM_Neighbor::event_callback(ipa_cm_event_id event, void *param)
ipacm_event_data_all *data = (ipacm_event_data_all *)param;
ipa_interface_index = IPACM_Iface::iface_ipa_index_query(data->if_index);
-
+ /* check for failure return */
+ if (IPACM_FAILURE == ipa_interface_index) {
+ IPACMERR("not supported iface id: %d\n", data->if_index);
+ break;
+ }
if (data->iptype == IPA_IP_v4)
{
if (data->ipv4_addr != 0) /* not 0.0.0.0 */
@@ -224,9 +238,15 @@ void IPACM_Neighbor::event_callback(ipa_cm_event_id event, void *param)
/* ask for replaced iface name*/
ipa_interface_index = IPACM_Iface::iface_ipa_index_query(data_all->if_index);
- IPACMDBG_H("Posted event %d, with %s for ipv4\n",
- evt_data.event,
- IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name);
+ /* check for failure return */
+ if (IPACM_FAILURE == ipa_interface_index) {
+ IPACMERR("not supported iface id: %d\n", data_all->if_index);
+ } else {
+ IPACMDBG_H("Posted event %d,\
+ with %s for ipv4\n",
+ evt_data.event,
+ IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name);
+ }
break;
}
}
@@ -385,9 +405,15 @@ void IPACM_Neighbor::event_callback(ipa_cm_event_id event, void *param)
IPACM_EvtDispatcher::PostEvt(&evt_data);
/* ask for replaced iface name*/
ipa_interface_index = IPACM_Iface::iface_ipa_index_query(data_all->if_index);
- IPACMDBG_H("Posted event %d, with %s for ipv6\n",
- evt_data.event,
- IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name);
+ /* check for failure return */
+ if (IPACM_FAILURE == ipa_interface_index) {
+ IPACMERR("not supported iface id: %d\n", data_all->if_index);
+ } else {
+ IPACMDBG_H("Posted event %d,\
+ with %s for ipv6\n",
+ evt_data.event,
+ IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name);
+ }
break;
};
}
@@ -470,9 +496,15 @@ void IPACM_Neighbor::event_callback(ipa_cm_event_id event, void *param)
IPACM_EvtDispatcher::PostEvt(&evt_data);
/* ask for replaced iface name*/
ipa_interface_index = IPACM_Iface::iface_ipa_index_query(data_all->if_index);
- IPACMDBG_H("Posted event %d, with %s for ipv4 client re-connect\n",
- evt_data.event,
- IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name);
+ /* check for failure return */
+ if (IPACM_FAILURE == ipa_interface_index) {
+ IPACMERR("not supported iface id: %d\n", data_all->if_index);
+ } else {
+ IPACMDBG_H("Posted event %d,\
+ with %s for ipv4 client re-connect\n",
+ evt_data.event,
+ IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name);
+ }
}
}
/* delete cache neighbor entry */