diff options
author | Utkarsh Saxena <usaxena@codeaurora.org> | 2016-07-26 12:41:24 +0530 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-08-16 01:53:19 -0700 |
commit | b72097480d9e58e7f86141dd094b013c06705f38 (patch) | |
tree | 977c198ac3861e25ed74183f11bf33bc140ebfb9 | |
parent | 6fb842a336d2c0aa6382d07bac7cddbd65bfb875 (diff) | |
download | ipacfg-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.cpp | 1 | ||||
-rw-r--r-- | ipacm/src/IPACM_IfaceManager.cpp | 30 | ||||
-rw-r--r-- | ipacm/src/IPACM_Neighbor.cpp | 58 |
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 */ |