Merge "IPACM: fix klocwork issue"
diff --git a/ipacm/inc/IPACM_Iface.h b/ipacm/inc/IPACM_Iface.h
index 436e99e..0520dba 100644
--- a/ipacm/inc/IPACM_Iface.h
+++ b/ipacm/inc/IPACM_Iface.h
@@ -51,6 +51,7 @@
 #include "IPACM_Log.h"
 #include "IPACM_Config.h"
 #include "IPACM_Defs.h"
+#include <string.h>
 
 /* current support 2 ipv6-address*/
 #define MAX_DEFAULT_v4_ROUTE_RULES  1
@@ -121,6 +122,12 @@
 	/*Query the IPA endpoint property */
 	int query_iface_property(void);
 
+	/*implement IPACM strlcpy */
+	size_t strlcpy(char *dest, const char *src, size_t size);
+
+	/*implement IPACM strlcat */
+	size_t strlcat(char *dest, const char *src, size_t n);
+
 	/*Configure the initial filter rules */
 	virtual int init_fl_rule(ipa_ip_type iptype);
 
diff --git a/ipacm/src/IPACM_Config.cpp b/ipacm/src/IPACM_Config.cpp
index c8d145a..ba6ea27 100644
--- a/ipacm/src/IPACM_Config.cpp
+++ b/ipacm/src/IPACM_Config.cpp
@@ -82,6 +82,11 @@
 	char	IPACM_config_file[IPA_MAX_FILE_LEN];
 	IPACM_conf_t	*cfg;
 	cfg = (IPACM_conf_t *)malloc(sizeof(IPACM_conf_t));
+	if(cfg == NULL)
+	{
+		IPACMERR("Unable to allocate cfg memory.\n");
+		return IPACM_FAILURE;
+	}
 	uint32_t subnet_addr;
 	uint32_t subnet_mask;
 	int i, ret = IPACM_SUCCESS;
@@ -117,6 +122,12 @@
 	}
 	iface_table = (ipa_ifi_dev_name_t *)calloc(ipa_num_ipa_interfaces,
 																						 sizeof(ipa_ifi_dev_name_t));
+	if(iface_table == NULL)
+	{
+		IPACMERR("Unable to allocate iface_table memory.\n");
+		ret = IPACM_FAILURE;
+		goto fail;;
+	}
 
 	for (i = 0; i < cfg->iface_config.num_iface_entries; i++)
 	{
@@ -158,7 +169,13 @@
 	}
 	alg_table = (ipacm_alg *)calloc(ipa_num_alg_ports,
 																sizeof(ipacm_alg));
-
+	if(alg_table == NULL)
+	{
+		IPACMERR("Unable to allocate alg_table memory.\n");
+		ret = IPACM_FAILURE;
+		free(iface_table);
+		goto fail;;
+	}
 	for (i = 0; i < cfg->alg_config.num_alg_entries; i++)
 	{
 		alg_table[i].protocol = cfg->alg_config.alg_entries[i].protocol;
@@ -181,6 +198,8 @@
 	{
 		IPACMERR("unable to allocate nat ifaces\n");
 		ret = IPACM_FAILURE;
+		free(iface_table);
+		free(alg_table);
 		goto fail;
 	}
 
diff --git a/ipacm/src/IPACM_Filtering.cpp b/ipacm/src/IPACM_Filtering.cpp
index ef988a8..fac26a2 100644
--- a/ipacm/src/IPACM_Filtering.cpp
+++ b/ipacm/src/IPACM_Filtering.cpp
@@ -279,6 +279,8 @@
 		{
 			for(cnt = rule_table_v4->num_rules - 1; cnt >= 0; cnt--)
 			{
+				if (pos < QMI_IPA_MAX_FILTERS_V01)
+				{
 				qmi_rule_msg.filter_spec_list[pos].filter_spec_identifier = pos;
 				qmi_rule_msg.filter_spec_list[pos].ip_type = QMI_IPA_IP_TYPE_V4_V01;
 				qmi_rule_msg.filter_spec_list[pos].filter_action = GetQmiFilterAction(rule_table_v4->rules[cnt].rule.action);
@@ -291,12 +293,19 @@
 					sizeof(struct ipa_filter_rule_type_v01));
 				pos++;
 			}
+				else
+				{
+					IPACMERR(" QMI only support max %d rules, current (%d)\n ",QMI_IPA_MAX_FILTERS_V01, pos);
+				}
+			}
 		}
 
 		if(rule_table_v6 != NULL)
 		{
 			for(cnt = rule_table_v6->num_rules - 1; cnt >= 0; cnt--)
 			{
+				if (pos < QMI_IPA_MAX_FILTERS_V01)
+				{
 				qmi_rule_msg.filter_spec_list[pos].filter_spec_identifier = pos;
 				qmi_rule_msg.filter_spec_list[pos].ip_type = QMI_IPA_IP_TYPE_V6_V01;
 				qmi_rule_msg.filter_spec_list[pos].filter_action = GetQmiFilterAction(rule_table_v6->rules[cnt].rule.action);
@@ -309,6 +318,11 @@
 					sizeof(struct ipa_filter_rule_type_v01));
 				pos++;
 			}
+				else
+				{
+					IPACMERR(" QMI only support max %d rules, current (%d)\n ",QMI_IPA_MAX_FILTERS_V01, pos);
+				}
+			}
 		}
 
 		ret = ioctl(fd_wwan_ioctl, WAN_IOC_ADD_FLT_RULE, &qmi_rule_msg);
diff --git a/ipacm/src/IPACM_Iface.cpp b/ipacm/src/IPACM_Iface.cpp
index e55ff2f..200b0d8 100644
--- a/ipacm/src/IPACM_Iface.cpp
+++ b/ipacm/src/IPACM_Iface.cpp
@@ -505,7 +505,11 @@
 
 	iface_query = (struct ipa_ioc_query_intf *)
 		 calloc(1, sizeof(struct ipa_ioc_query_intf));
-
+	if(iface_query == NULL)
+	{
+		IPACMERR("Unable to allocate iface_query memory.\n");
+		return IPACM_FAILURE;
+	}
 	IPACMDBG("iface name %s\n", dev_name);
 	memcpy(iface_query->name, dev_name, sizeof(dev_name));
 
@@ -521,7 +525,11 @@
 		tx_prop = (struct ipa_ioc_query_intf_tx_props *)
 			 calloc(1, sizeof(struct ipa_ioc_query_intf_tx_props) +
 							iface_query->num_tx_props * sizeof(struct ipa_ioc_tx_intf_prop));
-
+		if(tx_prop == NULL)
+		{
+			IPACMERR("Unable to allocate tx_prop memory.\n");
+			return IPACM_FAILURE;
+		}
 	memcpy(tx_prop->name, dev_name, sizeof(tx_prop->name));
 	tx_prop->num_tx_props = iface_query->num_tx_props;
 
@@ -548,7 +556,11 @@
 		rx_prop = (struct ipa_ioc_query_intf_rx_props *)
 			 calloc(1, sizeof(struct ipa_ioc_query_intf_rx_props) +
 							iface_query->num_rx_props * sizeof(struct ipa_ioc_rx_intf_prop));
-
+		if(rx_prop == NULL)
+		{
+			IPACMERR("Unable to allocate rx_prop memory.\n");
+			return IPACM_FAILURE;
+		}
 	memcpy(rx_prop->name, dev_name,
 				 sizeof(rx_prop->name));
 	rx_prop->num_rx_props = iface_query->num_rx_props;
@@ -835,7 +847,6 @@
 	return res;
 }
 
-
 /*  get ipa interface name */
 int IPACM_Iface::ipa_get_if_index
 (
@@ -868,3 +879,48 @@
   close(fd);
   return IPACM_SUCCESS;
 }
+
+size_t IPACM_Iface::strlcpy(char *dest, const char *src, size_t n)
+{
+	size_t ret = strlen(src);
+	size_t len = 0;
+	if (n > 0) {
+		if(ret >= n)
+		{
+			len = n-1;
+			IPACMERR(" overflow detected \n");
+		}
+		else
+		{
+			len = ret;
+		}
+		dest[len] = '\0';
+		memcpy(dest, src, len);
+	}
+	return ret;
+}
+
+size_t IPACM_Iface::strlcat(char *dest, const char *src, size_t n)
+{
+	size_t dsize = strlen(dest);
+	size_t len = strlen(src);
+	size_t ret = dsize + len;
+
+	if (dsize < n)
+	{
+		dest += dsize;
+		n -= dsize;
+		if (len >= n)
+		{
+			len = n - 1;
+			IPACMERR(" overflow detected \n");
+		}
+		dest[len] = '\0';
+		memcpy(dest, src, len);
+	}
+	else
+	{
+		IPACMERR(" dest buffer full\n");
+	}
+	return ret;
+}
diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp
index ce813bb..8e0d44d 100644
--- a/ipacm/src/IPACM_Lan.cpp
+++ b/ipacm/src/IPACM_Lan.cpp
@@ -65,6 +65,9 @@
 	}
 
 	/* support eth multiple clients */
+	if(iface_query != NULL)
+	{
+
 	eth_client_len = (sizeof(ipa_eth_client)) + (iface_query->num_tx_props * sizeof(eth_client_rt_hdl));
 	eth_client = (ipa_eth_client *)calloc(IPA_MAX_NUM_ETH_CLIENTS, eth_client_len);
 	if (eth_client == NULL)
@@ -75,6 +78,7 @@
 
 	IPACMDBG(" IPACM->IPACM_Lan(%d) constructor: Tx:%d Rx:%d\n", ipa_if_num,
 					 iface_query->num_tx_props, iface_query->num_rx_props);
+	}
 
 	num_wan_ul_fl_rule_v4 = 0;
 	num_wan_ul_fl_rule_v6 = 0;
@@ -426,11 +430,17 @@
 						+ NUM_TCP_CTL_FLT_RULE + IPACM_Iface::ipacmcfg->ipa_num_private_subnet;
 #else
 	flt_rule_count_v4 = IPV4_DEFAULT_FILTERTING_RULES + MAX_OFFLOAD_PAIR
-						IPACM_Iface::ipacmcfg->ipa_num_private_subnet;
+						+ IPACM_Iface::ipacmcfg->ipa_num_private_subnet;
 #endif
 
 	if(is_sta_mode == false)
 	{
+		if (num_wan_ul_fl_rule_v4 > MAX_WAN_UL_FILTER_RULES)
+		{
+			IPACMERR("number of wan_ul_fl_rule_v4 > MAX_WAN_UL_FILTER_RULES, aborting...\n");
+			close(fd);
+			return IPACM_FAILURE;
+		}
 		if (m_filtering.DeleteFilteringHdls(wan_ul_fl_rule_hdl_v4,
 			IPA_IP_v4, num_wan_ul_fl_rule_v4) == false)
 		{
@@ -1013,15 +1023,23 @@
 								memset(pHeaderDescriptor->hdr[0].name, 0,
 											 sizeof(pHeaderDescriptor->hdr[0].name));
 
-								sprintf(index, "%d", ipa_if_num);
-								strncpy(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
+								snprintf(index,sizeof(index), "%d", ipa_if_num);
+								strlcpy(pHeaderDescriptor->hdr[0].name, index, sizeof(pHeaderDescriptor->hdr[0].name));
 
-								strncat(pHeaderDescriptor->hdr[0].name,
-												IPA_ETH_HDR_NAME_v4,
-												sizeof(IPA_ETH_HDR_NAME_v4));
+								if (strlcat(pHeaderDescriptor->hdr[0].name, IPA_ETH_HDR_NAME_v4, sizeof(pHeaderDescriptor->hdr[0].name)) > IPA_RESOURCE_NAME_MAX)
+								{
+									IPACMERR(" header name construction failed exceed length (%d)\n", strlen(pHeaderDescriptor->hdr[0].name));
+									res = IPACM_FAILURE;
+									goto fail;
+								}
 
-								sprintf(index, "%d", header_name_count);
-								strncat(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
+								snprintf(index,sizeof(index), "%d", header_name_count);
+								if (strlcat(pHeaderDescriptor->hdr[0].name, index, sizeof(pHeaderDescriptor->hdr[0].name)) > IPA_RESOURCE_NAME_MAX)
+								{
+									IPACMERR(" header name construction failed exceed length (%d)\n", strlen(pHeaderDescriptor->hdr[0].name));
+									res = IPACM_FAILURE;
+									goto fail;
+								}
 
 								pHeaderDescriptor->hdr[0].hdr_len = sCopyHeader.hdr_len;
 								pHeaderDescriptor->hdr[0].hdr_hdl = -1;
@@ -1096,15 +1114,22 @@
 				memset(pHeaderDescriptor->hdr[0].name, 0,
 					 sizeof(pHeaderDescriptor->hdr[0].name));
 
-				sprintf(index, "%d", ipa_if_num);
-				strncpy(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
+				snprintf(index,sizeof(index), "%d", ipa_if_num);
+				strlcpy(pHeaderDescriptor->hdr[0].name, index, sizeof(pHeaderDescriptor->hdr[0].name));
 
-				strncat(pHeaderDescriptor->hdr[0].name,
-						IPA_ETH_HDR_NAME_v6,
-						sizeof(IPA_ETH_HDR_NAME_v6));
-
-				sprintf(index, "%d", header_name_count);
-				strncat(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
+				if (strlcat(pHeaderDescriptor->hdr[0].name, IPA_ETH_HDR_NAME_v6, sizeof(pHeaderDescriptor->hdr[0].name)) > IPA_RESOURCE_NAME_MAX)
+				{
+					IPACMERR(" header name construction failed exceed length (%d)\n", strlen(pHeaderDescriptor->hdr[0].name));
+					res = IPACM_FAILURE;
+					goto fail;
+				}
+				snprintf(index,sizeof(index), "%d", header_name_count);
+				if (strlcat(pHeaderDescriptor->hdr[0].name, index, sizeof(pHeaderDescriptor->hdr[0].name)) > IPA_RESOURCE_NAME_MAX)
+				{
+					IPACMERR(" header name construction failed exceed length (%d)\n", strlen(pHeaderDescriptor->hdr[0].name));
+					res = IPACM_FAILURE;
+					goto fail;
+				}
 
 				pHeaderDescriptor->hdr[0].hdr_len = sCopyHeader.hdr_len;
 				pHeaderDescriptor->hdr[0].hdr_hdl = -1;
@@ -1658,7 +1683,7 @@
 	{
 		if (m_filtering.DeleteFilteringHdls(dft_v4fl_rule_hdl, IPA_IP_v4, IPV4_DEFAULT_FILTERTING_RULES) == false)
 		{
-			IPACMERR("Error deleting default filtering Rule, aborting...\n");
+			IPACMERR("Error Deleting Filtering Rule, aborting...\n");
 			res = IPACM_FAILURE;
 			goto fail;
 		}
@@ -1682,6 +1707,13 @@
 		IPACMDBG("Deleted lan2lan IPv4 flt rules.\n");
 
 		/* free private-subnet ipv4 filter rules */
+		if (IPACM_Iface::ipacmcfg->ipa_num_private_subnet > IPA_PRIV_SUBNET_FILTER_RULE_HANDLES)
+		{
+			IPACMERR(" the number of rules are bigger than array, aborting...\n");
+			res = IPACM_FAILURE;
+			goto fail;
+		}
+
 		if (m_filtering.DeleteFilteringHdls(private_fl_rule_hdl, IPA_IP_v4, IPACM_Iface::ipacmcfg->ipa_num_private_subnet) == false)
 		{
 			IPACMERR("Error Deleting RuleTable(1) to Filtering, aborting...\n");
@@ -1742,8 +1774,12 @@
 
 fail:
 	/* Delete corresponding ipa_rm_resource_name of RX-endpoint after delete all IPV4V6 FT-rule */
+	if (rx_prop != NULL)
+	{
+		free(rx_prop);
 	IPACM_Iface::ipacmcfg->DelRmDepend(IPACM_Iface::ipacmcfg->ipa_client_rm_map_tbl[rx_prop->rx[0].src_pipe]);
 	IPACMDBG("Finished delete dependency \n ");
+	}
 
 	if (eth_client != NULL)
 	{
@@ -1754,10 +1790,6 @@
 	{
 		free(tx_prop);
 	}
-	if (rx_prop != NULL)
-	{
-		free(rx_prop);
-	}
 	if (iface_query != NULL)
 	{
 		free(iface_query);
@@ -1934,6 +1966,13 @@
 
 	if(is_sta_mode == false)
 	{
+		if (num_wan_ul_fl_rule_v6 > MAX_WAN_UL_FILTER_RULES)
+		{
+			IPACMERR(" the number of rules are bigger than array, aborting...\n");
+			close(fd);
+			return IPACM_FAILURE;
+		}
+
 		if (m_filtering.DeleteFilteringHdls(wan_ul_fl_rule_hdl_v6,
 			IPA_IP_v6, num_wan_ul_fl_rule_v6) == false)
 		{
@@ -2615,7 +2654,7 @@
 				pHeader->num_hdrs = 1;
 
 				memset(pHeader->hdr[0].name, 0, sizeof(pHeader->hdr[0].name));
-				strncpy(pHeader->hdr[0].name, IPA_LAN_TO_LAN_USB_HDR_NAME_V4, sizeof(IPA_LAN_TO_LAN_USB_HDR_NAME_V4));
+				strlcpy(pHeader->hdr[0].name, IPA_LAN_TO_LAN_USB_HDR_NAME_V4, sizeof(pHeader->hdr[0].name));
 
 				for(j=0; j<MAX_OFFLOAD_PAIR; j++)
 				{
@@ -2632,8 +2671,13 @@
 					goto fail;
 				}
 				lan2lan_hdr_hdl_v4[j].valid = true;
-				sprintf(index, "%d", j);
-				strncat(pHeader->hdr[0].name, index, sizeof(index));
+				snprintf(index,sizeof(index), "%d", j);
+				if (strlcat(pHeader->hdr[0].name, index, sizeof(pHeader->hdr[0].name)) > IPA_RESOURCE_NAME_MAX)
+				{
+					IPACMERR(" header name construction failed exceed length (%d)\n", strlen(pHeader->hdr[0].name));
+					res = IPACM_FAILURE;
+					goto fail;
+				}
 
 				pHeader->hdr[0].hdr_len = sCopyHeader.hdr_len;
 				pHeader->hdr[0].is_partial = 0;
@@ -2697,7 +2741,7 @@
 				pHeader->num_hdrs = 1;
 
 				memset(pHeader->hdr[0].name, 0, sizeof(pHeader->hdr[0].name));
-				strncpy(pHeader->hdr[0].name, IPA_LAN_TO_LAN_USB_HDR_NAME_V6, sizeof(IPA_LAN_TO_LAN_USB_HDR_NAME_V6));
+				strlcpy(pHeader->hdr[0].name, IPA_LAN_TO_LAN_USB_HDR_NAME_V6, sizeof(pHeader->hdr[0].name));
 
 				for(j=0; j<MAX_OFFLOAD_PAIR; j++)
 				{
@@ -2714,8 +2758,13 @@
 					goto fail;
 				}
 				lan2lan_hdr_hdl_v6[j].valid = true;
-				sprintf(index, "%d", j);
-				strncat(pHeader->hdr[0].name, index, sizeof(index));
+				snprintf(index,sizeof(index), "%d", j);
+				if (strlcat(pHeader->hdr[0].name, index, sizeof(pHeader->hdr[0].name)) > IPA_RESOURCE_NAME_MAX)
+				{
+					IPACMERR(" header name construction failed exceed length (%d)\n", strlen(pHeader->hdr[0].name));
+					res = IPACM_FAILURE;
+					goto fail;
+				}
 
 				pHeader->hdr[0].hdr_len = sCopyHeader.hdr_len;
 				pHeader->hdr[0].is_partial = 0;
diff --git a/ipacm/src/IPACM_Main.cpp b/ipacm/src/IPACM_Main.cpp
index cab2963..d52c6b3 100644
--- a/ipacm/src/IPACM_Main.cpp
+++ b/ipacm/src/IPACM_Main.cpp
@@ -1,4 +1,4 @@
-/* 
+/*
 Copyright (c) 2013, The Linux Foundation. All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -12,7 +12,7 @@
 			with the distribution.
 		* Neither the name of The Linux Foundation nor the names of its
 			contributors may be used to endorse or promote products derived
-			from this software without specific prior written permission.																								
+			from this software without specific prior written permission.
 
 THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
 WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
@@ -72,33 +72,45 @@
 #include "IPACM_Netlink.h"
 
 const char *ipacm_event_name[] = {
-	__stringify(IPA_LINK_UP_EVENT),
-	__stringify(IPA_LINK_DOWN_EVENT),
-	__stringify(IPA_ADDR_ADD_EVENT),
-	__stringify(IPA_ADDR_DEL_EVENT),
-	__stringify(IPA_ROUTE_ADD_EVENT),
-	__stringify(IPA_ROUTE_DEL_EVENT),
-	__stringify(IPA_FIREWALL_CHANGE_EVENT),
-	__stringify(IPA_WLAN_AP_LINK_UP_EVENT),
-	__stringify(IPA_WLAN_STA_LINK_UP_EVENT),
-	__stringify(IPA_WLAN_CLIENT_ADD_EVENT),
-	__stringify(IPA_WLAN_CLIENT_DEL_EVENT),
-	__stringify(IPA_WLAN_CLIENT_POWER_SAVE_EVENT),
-	__stringify(IPA_WLAN_CLIENT_RECOVER_EVENT),
-	__stringify(IPA_NEW_NEIGH_EVENT),
-	__stringify(IPA_DEL_NEIGH_EVENT),
-	__stringify(IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT),
-	__stringify(IPA_NEIGH_CLIENT_IP_ADDR_DEL_EVENT),
-	__stringify(IPA_SW_ROUTING_ENABLE),
-	__stringify(IPA_SW_ROUTING_DISABLE),
-	__stringify(IPA_PROCESS_CT_MESSAGE),
-	__stringify(IPA_HANDLE_WAN_UP),
-	__stringify(IPA_HANDLE_WAN_DOWN),
-	__stringify(IPA_HANDLE_WLAN_UP),
-	__stringify(IPA_HANDLE_LAN_UP),
-	__stringify(IPA_WLAN_CLIENT_ADD_EVENT_EX),
-	__stringify(IPA_HANDLE_WAN_UP_V6),
-	__stringify(IPA_HANDLE_WAN_DOWN_V6),
+	__stringify(IPA_CFG_CHANGE_EVENT),                     /* 1 NULL */
+	__stringify(IPA_LINK_UP_EVENT),                        /* 2 ipacm_event_data_fid */
+	__stringify(IPA_LINK_DOWN_EVENT),                      /* 3 ipacm_event_data_fid */
+	__stringify(IPA_ADDR_ADD_EVENT),                       /* 4 ipacm_event_data_addr */
+	__stringify(IPA_ADDR_DEL_EVENT),                       /* 5 no use */
+	__stringify(IPA_ROUTE_ADD_EVENT),                      /* 6 ipacm_event_data_addr */
+	__stringify(IPA_ROUTE_DEL_EVENT),                      /* 7 ipacm_event_data_addr */
+	__stringify(IPA_FIREWALL_CHANGE_EVENT),                /* 8 NULL */
+	__stringify(IPA_WLAN_AP_LINK_UP_EVENT),                /* 9 ipacm_event_data_mac */
+	__stringify(IPA_WLAN_STA_LINK_UP_EVENT),               /* 10 ipacm_event_data_mac */
+	__stringify(IPA_WLAN_CLIENT_ADD_EVENT),                /* 11 ipacm_event_data_mac */
+	__stringify(IPA_WLAN_CLIENT_DEL_EVENT),                /* 12 ipacm_event_data_mac */
+	__stringify(IPA_WLAN_CLIENT_POWER_SAVE_EVENT),         /* 13 ipacm_event_data_mac */
+	__stringify(IPA_WLAN_CLIENT_RECOVER_EVENT),            /* 14 ipacm_event_data_mac */
+	__stringify(IPA_NEW_NEIGH_EVENT),                      /* 15 ipacm_event_data_all */
+	__stringify(IPA_DEL_NEIGH_EVENT),                      /* 16 ipacm_event_data_all */
+	__stringify(IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT),       /* 17 ipacm_event_data_all */
+	__stringify(IPA_NEIGH_CLIENT_IP_ADDR_DEL_EVENT),       /* 18 ipacm_event_data_all */
+	__stringify(IPA_SW_ROUTING_ENABLE),                    /* 19 NULL */
+	__stringify(IPA_SW_ROUTING_DISABLE),                   /* 20 NULL */
+	__stringify(IPA_PROCESS_CT_MESSAGE),                   /* 21 ipacm_ct_evt_data */
+	__stringify(IPA_HANDLE_WAN_UP),                        /* 22 ipacm_event_iface_up  */
+	__stringify(IPA_HANDLE_WAN_DOWN),                      /* 23 ipacm_event_iface_up  */
+	__stringify(IPA_HANDLE_WLAN_UP),                       /* 24 ipacm_event_iface_up */
+	__stringify(IPA_HANDLE_LAN_UP),                        /* 25 ipacm_event_iface_up */
+	__stringify(IPA_WLAN_CLIENT_ADD_EVENT_EX),             /* 26 ipacm_event_data_wlan_ex */
+	__stringify(IPA_HANDLE_WAN_UP_V6),					   /* 27 NULL */
+	__stringify(IPA_HANDLE_WAN_DOWN_V6),				   /* 28 NULL */
+	__stringify(IPA_LAN_CLIENT_ACTIVE),					   /* 29 ipacm_event_lan_client*/
+	__stringify(IPA_LAN_CLIENT_INACTIVE),				   /* 30 ipacm_event_lan_client*/
+	__stringify(IPA_LAN_CLIENT_DISCONNECT),				   /* 31 ipacm_event_lan_client*/
+	__stringify(IPA_LAN_CLIENT_POWER_SAVE),				   /* 32 ipacm_event_lan_client*/
+	__stringify(IPA_LAN_CLIENT_POWER_RECOVER),			   /* 33 ipacm_event_lan_client*/
+	__stringify(IPA_LAN_TO_LAN_NEW_CONNECTION),			   /* 34 ipacm_event_connection */
+	__stringify(IPA_LAN_TO_LAN_DEL_CONNECTION),			   /* 35 ipacm_event_connection */
+	__stringify(IPA_LAN_DELETE_SELF),		                   /* 36 ipacm_event_data_fid */
+	__stringify(IPA_WLAN_LINK_DOWN_EVENT),                             /* 37 ipacm_event_data_mac */
+	__stringify(IPA_USB_LINK_UP_EVENT),                                /* 38 ipacm_event_data_fid */
+        __stringify(IPA_PROCESS_CT_MESSAGE_V6),				  /* 39 ipacm_ct_evt_data */
 };
 
 #define IPA_DRIVER  "/dev/ipa"
@@ -169,25 +181,26 @@
 	while (1)
 	{
 		length = read(inotify_fd, buffer, INOTIFY_BUF_LEN);
-		struct inotify_event *event = (struct inotify_event *)buffer;
+		struct inotify_event event;
+		memcpy(&event, buffer,sizeof(struct inotify_event));
 
 		if (length < 0)
 		{
-			IPACMERR("inotify read() error return length: %d and mask: 0x%x 0x%x\n", length, event->mask, mask);
+			IPACMERR("inotify read() error return length: %d and mask: 0x%x 0x%x\n", length, event.mask, mask);
 			return NULL;
 		}
 
-		if (event->len > 0)
+		if (event.len > 0)
 		{
-			if ( (event->mask & IN_MODIFY) || (event->mask & IN_MOVE))
+			if ( (event.mask & IN_MODIFY) || (event.mask & IN_MOVE))
 			{
-				if (event->mask & IN_ISDIR)
+				if (event.mask & IN_ISDIR)
 				{
-					IPACMDBG("The directory %s was 0x%x\n", event->name, event->mask);
+					IPACMDBG("The directory %s was 0x%x\n", event.name, event.mask);
 				}
-				else if (!strncmp(event->name, IPACM_FIREWALL_FILE_NAME, event->len)) // firewall_rule change
+				else if (!strncmp(event.name, IPACM_FIREWALL_FILE_NAME, event.len)) // firewall_rule change
 				{
-					IPACMDBG("File \"%s\" was 0x%x\n", event->name, event->mask);
+					IPACMDBG("File \"%s\" was 0x%x\n", event.name, event.mask);
 					IPACMDBG("The interested file %s .\n", IPACM_FIREWALL_FILE_NAME);
 
 					evt_data.event = IPA_FIREWALL_CHANGE_EVENT;
@@ -196,9 +209,9 @@
 					/* Insert IPA_FIREWALL_CHANGE_EVENT to command queue */
 					IPACM_EvtDispatcher::PostEvt(&evt_data);
 				}
-				else if (!strncmp(event->name, IPACM_CFG_FILE_NAME, event->len)) // IPACM_configuration change
+				else if (!strncmp(event.name, IPACM_CFG_FILE_NAME, event.len)) // IPACM_configuration change
 				{
-					IPACMDBG("File \"%s\" was 0x%x\n", event->name, event->mask);
+					IPACMDBG("File \"%s\" was 0x%x\n", event.name, event.mask);
 					IPACMDBG("The interested file %s .\n", IPACM_CFG_FILE_NAME);
 
 					evt_data.event = IPA_CFG_CHANGE_EVENT;
@@ -208,7 +221,7 @@
 					IPACM_EvtDispatcher::PostEvt(&evt_data);
 				}
 			}
-			IPACMDBG("Received monitoring event %s.\n", event->name);
+			IPACMDBG("Received monitoring event %s.\n", event.name);
 		}
 	}
 
@@ -223,10 +236,11 @@
 {
 	int length, fd, cnt;
 	char buffer[IPA_DRIVER_WLAN_BUF_LEN];
-	struct ipa_msg_meta *event_hdr = NULL;
-	struct ipa_wlan_msg_ex *event_ex = NULL;
-	struct ipa_wlan_msg *event_wlan = NULL;
-	struct ipa_ecm_msg *event_ecm = NULL;
+	struct ipa_msg_meta event_hdr;
+	struct ipa_ecm_msg event_ecm;
+	struct ipa_wlan_msg_ex event_ex_o;
+	struct ipa_wlan_msg *event_wlan=NULL;
+	struct ipa_wlan_msg_ex *event_ex= NULL;
 
 	ipacm_cmd_q_data evt_data;
 	ipacm_event_data_mac *data = NULL;
@@ -238,7 +252,7 @@
 	{
 		IPACMERR("Failed opening %s.\n", IPA_DRIVER);
 	}
-	
+
 	while (1)
 	{
 		IPACMDBG("Waiting for nofications from IPA driver \n");
@@ -254,28 +268,12 @@
 			return NULL;
 		}
 
-		event_hdr = (struct ipa_msg_meta *)buffer;
-		IPACMDBG("Message type: %d\n", event_hdr->msg_type);
-		IPACMDBG("Event header length received: %d\n",event_hdr->msg_len);
-
-		if (event_hdr->msg_len > 0)
-		{
-			if(event_hdr->msg_type == WLAN_CLIENT_CONNECT_EX)
-			{
-				event_ex = (struct ipa_wlan_msg_ex *)(buffer + sizeof(struct ipa_msg_meta));
-			}
-			else if (event_hdr->msg_type < IPA_WLAN_EVENT_MAX)
-			{
-				event_wlan = (struct ipa_wlan_msg *)(buffer + sizeof(struct ipa_msg_meta));	
-			}
-			else
-			{
-				event_ecm = (struct ipa_ecm_msg *)(buffer + sizeof(struct ipa_msg_meta));
-			}
-		}
+		memcpy(&event_hdr, buffer,sizeof(struct ipa_msg_meta));
+		IPACMDBG("Message type: %d\n", event_hdr.msg_type);
+		IPACMDBG("Event header length received: %d\n",event_hdr.msg_len);
 
 		/* Insert WLAN_DRIVER_EVENT to command queue */
-		switch (event_hdr->msg_type)
+		switch (event_hdr.msg_type)
 		{
 
 		case SW_ROUTING_ENABLE:
@@ -289,73 +287,78 @@
 			break;
 
 		case WLAN_AP_CONNECT:
+			event_wlan = (struct ipa_wlan_msg *) (buffer + sizeof(struct ipa_msg_meta));
 			IPACMDBG("Received WLAN_AP_CONNECT name: %s\n",event_wlan->name);
 			IPACMDBG("AP Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
 							 event_wlan->mac_addr[0], event_wlan->mac_addr[1], event_wlan->mac_addr[2],
-							 event_wlan->mac_addr[3], event_wlan->mac_addr[4], event_wlan->mac_addr[5]); 
+							 event_wlan->mac_addr[3], event_wlan->mac_addr[4], event_wlan->mac_addr[5]);
                         data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
 			if(data_fid == NULL)
 			{
 				IPACMERR("unable to allocate memory for event_wlan data_fid\n");
 				return NULL;
-			}			
+			}
 			ipa_get_if_index(event_wlan->name, &(data_fid->if_index));
 			evt_data.event = IPA_WLAN_AP_LINK_UP_EVENT;
 			evt_data.evt_data = data_fid;
 			break;
 
 		case WLAN_AP_DISCONNECT:
+			event_wlan = (struct ipa_wlan_msg *)(buffer + sizeof(struct ipa_msg_meta));
 			IPACMDBG("Received WLAN_AP_DISCONNECT name: %s\n",event_wlan->name);
 			IPACMDBG("AP Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
 							 event_wlan->mac_addr[0], event_wlan->mac_addr[1], event_wlan->mac_addr[2],
-							 event_wlan->mac_addr[3], event_wlan->mac_addr[4], event_wlan->mac_addr[5]); 
+							 event_wlan->mac_addr[3], event_wlan->mac_addr[4], event_wlan->mac_addr[5]);
                         data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
 			if(data_fid == NULL)
 			{
 				IPACMERR("unable to allocate memory for event_wlan data_fid\n");
 				return NULL;
-			}			
+			}
 			ipa_get_if_index(event_wlan->name, &(data_fid->if_index));
 			evt_data.event = IPA_WLAN_LINK_DOWN_EVENT;
 			evt_data.evt_data = data_fid;
 			break;
 		case WLAN_STA_CONNECT:
+			event_wlan = (struct ipa_wlan_msg *)(buffer + sizeof(struct ipa_msg_meta));
 			IPACMDBG("Received WLAN_STA_CONNECT name: %s\n",event_wlan->name);
 			IPACMDBG("STA Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
 							 event_wlan->mac_addr[0], event_wlan->mac_addr[1], event_wlan->mac_addr[2],
-							 event_wlan->mac_addr[3], event_wlan->mac_addr[4], event_wlan->mac_addr[5]); 
+							 event_wlan->mac_addr[3], event_wlan->mac_addr[4], event_wlan->mac_addr[5]);
                         data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
 			if(data_fid == NULL)
 			{
 				IPACMERR("unable to allocate memory for event_wlan data_fid\n");
 				return NULL;
-			}			
+			}
 			ipa_get_if_index(event_wlan->name, &(data_fid->if_index));
 			evt_data.event = IPA_WLAN_STA_LINK_UP_EVENT;
 			evt_data.evt_data = data_fid;
 			break;
 
 		case WLAN_STA_DISCONNECT:
+			event_wlan = (struct ipa_wlan_msg *)(buffer + sizeof(struct ipa_msg_meta));
 			IPACMDBG("Received WLAN_STA_DISCONNECT name: %s\n",event_wlan->name);
 			IPACMDBG("STA Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
 							 event_wlan->mac_addr[0], event_wlan->mac_addr[1], event_wlan->mac_addr[2],
-							 event_wlan->mac_addr[3], event_wlan->mac_addr[4], event_wlan->mac_addr[5]); 
+							 event_wlan->mac_addr[3], event_wlan->mac_addr[4], event_wlan->mac_addr[5]);
                         data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
 			if(data_fid == NULL)
 			{
 				IPACMERR("unable to allocate memory for event_wlan data_fid\n");
 				return NULL;
-			}			
+			}
 			ipa_get_if_index(event_wlan->name, &(data_fid->if_index));
 			evt_data.event = IPA_WLAN_LINK_DOWN_EVENT;
 			evt_data.evt_data = data_fid;
 			break;
-						
+
 		case WLAN_CLIENT_CONNECT:
+			event_wlan = (struct ipa_wlan_msg *)(buffer + sizeof(struct ipa_msg_meta));
 			IPACMDBG("Received WLAN_CLIENT_CONNECT\n");
 			IPACMDBG("Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
 							 event_wlan->mac_addr[0], event_wlan->mac_addr[1], event_wlan->mac_addr[2],
-							 event_wlan->mac_addr[3], event_wlan->mac_addr[4], event_wlan->mac_addr[5]); 
+							 event_wlan->mac_addr[3], event_wlan->mac_addr[4], event_wlan->mac_addr[5]);
 		        data = (ipacm_event_data_mac *)malloc(sizeof(ipacm_event_data_mac));
 		        if (data == NULL)
 		        {
@@ -372,13 +375,22 @@
 
 		case WLAN_CLIENT_CONNECT_EX:
 			IPACMDBG("Received WLAN_CLIENT_CONNECT_EX\n");
-		    data_ex = (ipacm_event_data_wlan_ex *)malloc(sizeof(ipacm_event_data_wlan_ex) + event_ex->num_of_attribs * sizeof(ipa_wlan_hdr_attrib_val));
+			memcpy(&event_ex_o, buffer + sizeof(struct ipa_msg_meta),sizeof(struct ipa_wlan_msg_ex));
+			length = sizeof(ipa_wlan_msg_ex)+ event_ex_o.num_of_attribs * sizeof(ipa_wlan_hdr_attrib_val);
+			IPACMDBG("num_of_attribs %d, length %d\n", event_ex_o.num_of_attribs, length);
+			event_ex = (ipa_wlan_msg_ex *)malloc(length);
+			if(event_ex == NULL )
+			{
+				IPACMERR("Unable to allocate memory\n");
+				return NULL;
+			}
+			memcpy(event_ex, buffer + sizeof(struct ipa_msg_meta), length);
+			data_ex = (ipacm_event_data_wlan_ex *)malloc(sizeof(ipacm_event_data_wlan_ex) + event_ex_o.num_of_attribs * sizeof(ipa_wlan_hdr_attrib_val));
 		    if (data_ex == NULL)
 		    {
 				IPACMERR("unable to allocate memory for event data\n");
 		    	return NULL;
 		    }
-
 			data_ex->num_of_attribs = event_ex->num_of_attribs;
 
 			memcpy(data_ex->attribs,
@@ -405,32 +417,15 @@
 			ipa_get_if_index(event_ex->name, &(data_ex->if_index));
 		    evt_data.event = IPA_WLAN_CLIENT_ADD_EVENT_EX;
 			evt_data.evt_data = data_ex;
-			break;
-			
-		case WLAN_CLIENT_DISCONNECT:
-			IPACMDBG("Received WLAN_CLIENT_DISCONNECT\n");
-			IPACMDBG("Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
-							 event_wlan->mac_addr[0], event_wlan->mac_addr[1], event_wlan->mac_addr[2],
-							 event_wlan->mac_addr[3], event_wlan->mac_addr[4], event_wlan->mac_addr[5]); 
-		        data = (ipacm_event_data_mac *)malloc(sizeof(ipacm_event_data_mac));
-		        if (data == NULL)
-		        {
-		    	        IPACMERR("unable to allocate memory for event_wlan data\n");
-		    	        return NULL;
-		        }				 
-			memcpy(data->mac_addr,
-						 event_wlan->mac_addr,
-						 sizeof(event_wlan->mac_addr));
-			ipa_get_if_index(event_wlan->name, &(data->if_index));
-			evt_data.event = IPA_WLAN_CLIENT_DEL_EVENT;
-			evt_data.evt_data = data;			
+			free(event_ex);
 			break;
 
-		case WLAN_CLIENT_POWER_SAVE_MODE:
-			IPACMDBG("Received WLAN_CLIENT_POWER_SAVE_MODE\n");
+		case WLAN_CLIENT_DISCONNECT:
+			IPACMDBG("Received WLAN_CLIENT_DISCONNECT\n");
+			event_wlan = (struct ipa_wlan_msg *)(buffer + sizeof(struct ipa_msg_meta));
 			IPACMDBG("Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
 							 event_wlan->mac_addr[0], event_wlan->mac_addr[1], event_wlan->mac_addr[2],
-							 event_wlan->mac_addr[3], event_wlan->mac_addr[4], event_wlan->mac_addr[5]); 
+							 event_wlan->mac_addr[3], event_wlan->mac_addr[4], event_wlan->mac_addr[5]);
 		        data = (ipacm_event_data_mac *)malloc(sizeof(ipacm_event_data_mac));
 		        if (data == NULL)
 		        {
@@ -439,7 +434,27 @@
 		        }
 			memcpy(data->mac_addr,
 						 event_wlan->mac_addr,
-						 sizeof(event_wlan->mac_addr));			
+						 sizeof(event_wlan->mac_addr));
+			ipa_get_if_index(event_wlan->name, &(data->if_index));
+			evt_data.event = IPA_WLAN_CLIENT_DEL_EVENT;
+			evt_data.evt_data = data;
+			break;
+
+		case WLAN_CLIENT_POWER_SAVE_MODE:
+			IPACMDBG("Received WLAN_CLIENT_POWER_SAVE_MODE\n");
+			event_wlan = (struct ipa_wlan_msg *)(buffer + sizeof(struct ipa_msg_meta));
+			IPACMDBG("Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
+							 event_wlan->mac_addr[0], event_wlan->mac_addr[1], event_wlan->mac_addr[2],
+							 event_wlan->mac_addr[3], event_wlan->mac_addr[4], event_wlan->mac_addr[5]);
+		        data = (ipacm_event_data_mac *)malloc(sizeof(ipacm_event_data_mac));
+		        if (data == NULL)
+		        {
+		    	        IPACMERR("unable to allocate memory for event_wlan data\n");
+		    	        return NULL;
+		        }
+			memcpy(data->mac_addr,
+						 event_wlan->mac_addr,
+						 sizeof(event_wlan->mac_addr));
 			ipa_get_if_index(event_wlan->name, &(data->if_index));
 			evt_data.event = IPA_WLAN_CLIENT_POWER_SAVE_EVENT;
 			evt_data.evt_data = data;
@@ -447,9 +462,10 @@
 
 		case WLAN_CLIENT_NORMAL_MODE:
 			IPACMDBG("Received WLAN_CLIENT_NORMAL_MODE\n");
+			event_wlan = (struct ipa_wlan_msg *)(buffer + sizeof(struct ipa_msg_meta));
 			IPACMDBG("Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
 							 event_wlan->mac_addr[0], event_wlan->mac_addr[1], event_wlan->mac_addr[2],
-							 event_wlan->mac_addr[3], event_wlan->mac_addr[4], event_wlan->mac_addr[5]); 
+							 event_wlan->mac_addr[3], event_wlan->mac_addr[4], event_wlan->mac_addr[5]);
 		        data = (ipacm_event_data_mac *)malloc(sizeof(ipacm_event_data_mac));
 		        if (data == NULL)
 		        {
@@ -465,32 +481,34 @@
 			break;
 
 		case ECM_CONNECT:
-			IPACMDBG("Received ECM_CONNECT name: %s\n",event_ecm->name);
+			memcpy(&event_ecm, buffer + sizeof(struct ipa_msg_meta), sizeof(struct ipa_ecm_msg));
+			IPACMDBG("Received ECM_CONNECT name: %s\n",event_ecm.name);
             data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
 			if(data_fid == NULL)
 			{
 				IPACMERR("unable to allocate memory for event_ecm data_fid\n");
 				return NULL;
 			}
-			data_fid->if_index = event_ecm->ifindex;
+			data_fid->if_index = event_ecm.ifindex;
 			evt_data.event = IPA_USB_LINK_UP_EVENT;
 			evt_data.evt_data = data_fid;
 			break;
 
 		case ECM_DISCONNECT:
-			IPACMDBG("Received ECM_DISCONNECT name: %s\n",event_ecm->name);
+			memcpy(&event_ecm, buffer + sizeof(struct ipa_msg_meta), sizeof(struct ipa_ecm_msg));
+			IPACMDBG("Received ECM_DISCONNECT name: %s\n",event_ecm.name);
 			data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
 			if(data_fid == NULL)
 			{
 				IPACMERR("unable to allocate memory for event_ecm data_fid\n");
 				return NULL;
 			}
-			data_fid->if_index = event_ecm->ifindex;
+			data_fid->if_index = event_ecm.ifindex;
 			evt_data.event = IPA_LINK_DOWN_EVENT;
 			evt_data.evt_data = data_fid;
 			break;
 		default:
-			IPACMDBG("Unhandled message type: %d\n", event_hdr->msg_type);
+			IPACMDBG("Unhandled message type: %d\n", event_hdr.msg_type);
 			continue;
 
 		}
@@ -515,7 +533,7 @@
 		case SIGUSR1:
 			for (cnt=1; cnt<IPACM_EVENT_MAX; cnt++)
 			{
-				printf("Event[%d:%30s]: %d\n", 
+				printf("Event[%d:%30s]: %d\n",
 					 cnt, ipacm_event_name[cnt-1], ipacm_event_stats[cnt]);
 			}
 			break;
@@ -536,7 +554,7 @@
 
 void RegisterForSignals(void)
 {
-	
+
 	signal(SIGUSR1, IPACM_Sig_Handler);
 	signal(SIGUSR2, IPACM_Sig_Handler);
 }
@@ -563,7 +581,7 @@
 
 
 	RegisterForSignals();
-	
+
 	if (IPACM_SUCCESS == cmd_queue_thread)
 	{
 		ret = pthread_create(&cmd_queue_thread, NULL, MessageQueue::Process, NULL);
@@ -668,6 +686,7 @@
 			if ( fp == NULL )
 			{
 				IPACMDBG("open pid file failed \n");
+				return;
 			}
 			else if (fgets(string, IPA_MAX_FILE_LEN, fp) != NULL)
 			{
diff --git a/ipacm/src/IPACM_Wan.cpp b/ipacm/src/IPACM_Wan.cpp
index 54e5c82..032a11f 100644
--- a/ipacm/src/IPACM_Wan.cpp
+++ b/ipacm/src/IPACM_Wan.cpp
@@ -66,10 +66,13 @@
 	num_firewall_v4 = 0;
 	num_firewall_v6 = 0;
 
-	wan_route_rule_v4_hdl = (uint32_t *)calloc(iface_query->num_tx_props, sizeof(uint32_t));
-	wan_route_rule_v6_hdl = (uint32_t *)calloc(iface_query->num_tx_props, sizeof(uint32_t));
-	wan_route_rule_v6_hdl_a5 = (uint32_t *)calloc(iface_query->num_tx_props, sizeof(uint32_t));
-
+	if(iface_query != NULL)
+	{
+		wan_route_rule_v4_hdl = (uint32_t *)calloc(iface_query->num_tx_props, sizeof(uint32_t));
+		wan_route_rule_v6_hdl = (uint32_t *)calloc(iface_query->num_tx_props, sizeof(uint32_t));
+		wan_route_rule_v6_hdl_a5 = (uint32_t *)calloc(iface_query->num_tx_props, sizeof(uint32_t));
+		IPACMDBG("IPACM->IPACM_Wan(%d) constructor: Tx:%d\n", ipa_if_num, iface_query->num_tx_props);
+	}
 	m_is_sta_mode = is_sta_mode;
 
 	active_v4 = false;
@@ -96,7 +99,6 @@
 	{
 		IPACMERR("Failed to open %s\n",IPA_DEVICE_NAME);
 	}
-	IPACMDBG("IPACM->IPACM_Wan(%d) constructor: Tx:%d\n", ipa_if_num, iface_query->num_tx_props);
 	return;
 }
 
@@ -906,12 +908,14 @@
 	memset(pHeaderDescriptor->hdr[0].name, 0,
 				 sizeof(pHeaderDescriptor->hdr[0].name));
 
-	sprintf(index, "%d", ipa_if_num);
-	strncpy(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
-
-	strncat(pHeaderDescriptor->hdr[0].name,
-					IPA_WAN_PARTIAL_HDR_NAME_v4,
-					sizeof(IPA_WAN_PARTIAL_HDR_NAME_v4));
+	snprintf(index,sizeof(index), "%d", ipa_if_num);
+	strlcpy(pHeaderDescriptor->hdr[0].name, index, sizeof(pHeaderDescriptor->hdr[0].name));
+	if ( strlcat(pHeaderDescriptor->hdr[0].name, IPA_WAN_PARTIAL_HDR_NAME_v4, sizeof(pHeaderDescriptor->hdr[0].name)) > IPA_RESOURCE_NAME_MAX)
+	{
+		IPACMERR(" header name construction failed exceed length (%d)\n", strlen(pHeaderDescriptor->hdr[0].name));
+		res = IPACM_FAILURE;
+		goto fail;
+	}
 
 	pHeaderDescriptor->hdr[0].hdr_len = sCopyHeader.hdr_len;
 	pHeaderDescriptor->hdr[0].hdr_hdl = -1;
@@ -988,12 +992,14 @@
 	                 memset(pHeaderDescriptor->hdr[0].name, 0,
 	                 			 sizeof(pHeaderDescriptor->hdr[0].name));
 
-	                 sprintf(index, "%d", ipa_if_num);
-	                 strncpy(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
-	                 strncat(pHeaderDescriptor->hdr[0].name,
-	                 				IPA_WAN_PARTIAL_HDR_NAME_v6,
-	                 				sizeof(IPA_WAN_PARTIAL_HDR_NAME_v6));
-
+					 snprintf(index,sizeof(index), "%d", ipa_if_num);
+					 strlcpy(pHeaderDescriptor->hdr[0].name, index, sizeof(pHeaderDescriptor->hdr[0].name));
+					 if (strlcat(pHeaderDescriptor->hdr[0].name, IPA_WAN_PARTIAL_HDR_NAME_v6, sizeof(pHeaderDescriptor->hdr[0].name)) > IPA_RESOURCE_NAME_MAX)
+					 {
+					 	IPACMERR(" header name construction failed exceed length (%d)\n", strlen(pHeaderDescriptor->hdr[0].name));
+					 	res = IPACM_FAILURE;
+					 	goto fail;
+					 }
 	                 pHeaderDescriptor->hdr[0].hdr_len = sCopyHeader.hdr_len;
 	                 pHeaderDescriptor->hdr[0].hdr_hdl = -1;
 	                 pHeaderDescriptor->hdr[0].is_partial = 0;
@@ -2372,7 +2378,11 @@
 		ext_prop = (struct ipa_ioc_query_intf_ext_props *)
 			 calloc(1, sizeof(struct ipa_ioc_query_intf_ext_props) +
 							iface_query->num_ext_props * sizeof(struct ipa_ioc_ext_intf_prop));
-
+		if(ext_prop == NULL)
+		{
+			IPACMERR("Unable to allocate memory.\n");
+			return IPACM_FAILURE;
+		}
 		memcpy(ext_prop->name, dev_name,
 					 sizeof(dev_name));
 		ext_prop->num_ext_props = iface_query->num_ext_props;
@@ -2710,6 +2720,11 @@
 
 	if ((iptype == IPA_IP_v4) && (active_v4 == true))
 	{
+		if (num_firewall_v4 > IPACM_MAX_FIREWALL_ENTRIES)
+		{
+			IPACMERR("the number of v4 firewall entries overflow, aborting...\n");
+			return IPACM_FAILURE;
+		}
 		if (num_firewall_v4 != 0)
 		{
 			if (m_filtering.DeleteFilteringHdls(firewall_hdl_v4,
@@ -2737,6 +2752,11 @@
 	/* free v6 firewall filter rule */
 	if ((iptype == IPA_IP_v6) && (active_v6 == true))
 	{
+		if (num_firewall_v6 > IPACM_MAX_FIREWALL_ENTRIES)
+		{
+			IPACMERR("the number of v6 firewall entries overflow, aborting...\n");
+			return IPACM_FAILURE;
+		}
 		if (num_firewall_v6 != 0)
 		{
 			if (m_filtering.DeleteFilteringHdls(firewall_hdl_v6,
@@ -3259,6 +3279,11 @@
 	ipa_ioc_add_flt_rule *pFilteringTable_v6 = NULL;
 
 	mux_id = IPACM_Iface::ipacmcfg->GetQmapId();
+	if(rx_prop == NULL)
+	{
+		IPACMDBG("No rx properties registered for iface %s\n", dev_name);
+		return IPACM_SUCCESS;
+	}
 
 	if(IPACM_Wan::num_v4_flt_rule > 0)
 	{
diff --git a/ipacm/src/IPACM_Wlan.cpp b/ipacm/src/IPACM_Wlan.cpp
index 0d8b916..05f3674 100644
--- a/ipacm/src/IPACM_Wlan.cpp
+++ b/ipacm/src/IPACM_Wlan.cpp
@@ -83,14 +83,17 @@
 	num_wifi_client = 0;
 	header_name_count = 0;
 
-	wlan_client_len = (sizeof(ipa_wlan_client)) + (iface_query->num_tx_props * sizeof(wlan_client_rt_hdl));
-	wlan_client = (ipa_wlan_client *)calloc(IPA_MAX_NUM_WIFI_CLIENTS, wlan_client_len);
-	if (wlan_client == NULL)
+	if(iface_query != NULL)
 	{
-		IPACMERR("unable to allocate memory\n");
-		return;
+		wlan_client_len = (sizeof(ipa_wlan_client)) + (iface_query->num_tx_props * sizeof(wlan_client_rt_hdl));
+		wlan_client = (ipa_wlan_client *)calloc(IPA_MAX_NUM_WIFI_CLIENTS, wlan_client_len);
+		if (wlan_client == NULL)
+		{
+			IPACMERR("unable to allocate memory\n");
+			return;
+		}
+		IPACMDBG("index:%d constructor: Tx properties:%d\n", iface_index, iface_query->num_tx_props);
 	}
-
 	Nat_App = NatApp::GetInstance();
 	if (Nat_App == NULL)
 	{
@@ -103,7 +106,6 @@
 	IPACMDBG("Now the number of wlan AP iface is %d\n", IPACM_Wlan::num_wlan_ap_iface);
 	add_dummy_flt_rule();
 
-	IPACMDBG("index:%d constructor: Tx properties:%d\n", iface_index, iface_query->num_tx_props);
 	return;
 }
 
@@ -522,6 +524,12 @@
 	    IPACM_Iface::ipacmcfg->AddRmDepend(IPACM_Iface::ipacmcfg->ipa_client_rm_map_tbl[rx_prop->rx[0].src_pipe],false);
 		IPACMDBG("Add producer dependency from %s with registered rx-prop\n", dev_name);
 	}
+	else
+	{
+		/* Adding the check if no Rx property registered, no filter rules will be added */
+		IPACMDBG("No rx properties registered for iface %s\n", dev_name);
+		return IPACM_SUCCESS;
+	}
 
 	/* construct ipa_ioc_add_flt_rule with default filter rules */
 	if (iptype == IPA_IP_v4)
@@ -1122,15 +1130,23 @@
 				memset(pHeaderDescriptor->hdr[0].name, 0,
 							 sizeof(pHeaderDescriptor->hdr[0].name));
 
-				sprintf(index, "%d", ipa_if_num);
-				strncpy(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
+				snprintf(index,sizeof(index), "%d", ipa_if_num);
+				strlcpy(pHeaderDescriptor->hdr[0].name, index, sizeof(pHeaderDescriptor->hdr[0].name));
 
-				strncat(pHeaderDescriptor->hdr[0].name,
-								IPA_WLAN_PARTIAL_HDR_NAME_v4,
-								sizeof(IPA_WLAN_PARTIAL_HDR_NAME_v4));
+				if (strlcat(pHeaderDescriptor->hdr[0].name, IPA_WLAN_PARTIAL_HDR_NAME_v4, sizeof(pHeaderDescriptor->hdr[0].name)) > IPA_RESOURCE_NAME_MAX)
+				{
+					IPACMERR(" header name construction failed exceed length (%d)\n", strlen(pHeaderDescriptor->hdr[0].name));
+					res = IPACM_FAILURE;
+					goto fail;
+				}
+				snprintf(index,sizeof(index), "%d", header_name_count);
+				if (strlcat(pHeaderDescriptor->hdr[0].name, index, sizeof(pHeaderDescriptor->hdr[0].name)) > IPA_RESOURCE_NAME_MAX)
+				{
+					IPACMERR(" header name construction failed exceed length (%d)\n", strlen(pHeaderDescriptor->hdr[0].name));
+					res = IPACM_FAILURE;
+					goto fail;
+				}
 
-				sprintf(index, "%d", header_name_count);
-								strncat(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
 
 				pHeaderDescriptor->hdr[0].hdr_len = sCopyHeader.hdr_len;
 				pHeaderDescriptor->hdr[0].hdr_hdl = -1;
@@ -1219,15 +1235,22 @@
 				memset(pHeaderDescriptor->hdr[0].name, 0,
 							 sizeof(pHeaderDescriptor->hdr[0].name));
 
-				sprintf(index, "%d", ipa_if_num);
-				strncpy(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
+				snprintf(index,sizeof(index), "%d", ipa_if_num);
+				strlcpy(pHeaderDescriptor->hdr[0].name, index, sizeof(pHeaderDescriptor->hdr[0].name));
+				if (strlcat(pHeaderDescriptor->hdr[0].name, IPA_WLAN_PARTIAL_HDR_NAME_v6, sizeof(pHeaderDescriptor->hdr[0].name)) > IPA_RESOURCE_NAME_MAX)
+				{
+					IPACMERR(" header name construction failed exceed length (%d)\n", strlen(pHeaderDescriptor->hdr[0].name));
+					res = IPACM_FAILURE;
+					goto fail;
+				}
 
-				strncat(pHeaderDescriptor->hdr[0].name,
-								IPA_WLAN_PARTIAL_HDR_NAME_v6,
-								sizeof(IPA_WLAN_PARTIAL_HDR_NAME_v6));
-
-				sprintf(index, "%d", header_name_count);
-				strncat(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
+				snprintf(index,sizeof(index), "%d", header_name_count);
+				if (strlcat(pHeaderDescriptor->hdr[0].name, index, sizeof(pHeaderDescriptor->hdr[0].name)) > IPA_RESOURCE_NAME_MAX)
+				{
+					IPACMERR(" header name construction failed exceed length (%d)\n", strlen(pHeaderDescriptor->hdr[0].name));
+					res = IPACM_FAILURE;
+					goto fail;
+				}
 
 				pHeaderDescriptor->hdr[0].hdr_len = sCopyHeader.hdr_len;
 				pHeaderDescriptor->hdr[0].hdr_hdl = -1;
@@ -1927,7 +1950,11 @@
 
 fail:
 	/* Delete corresponding ipa_rm_resource_name of RX-endpoint after delete all IPV4V6 FT-rule */
+	if (rx_prop != NULL)
+	{
 	IPACM_Iface::ipacmcfg->DelRmDepend(IPACM_Iface::ipacmcfg->ipa_client_rm_map_tbl[rx_prop->rx[0].src_pipe]);
+		free(rx_prop);
+	}
 
 	for (i = 0; i < num_wifi_client; i++)
 	{
@@ -1938,10 +1965,7 @@
 	{
 		free(tx_prop);
 	}
-	if (rx_prop != NULL)
-	{
-		free(rx_prop);
-	}
+
 	if (iface_query != NULL)
 	{
 		free(iface_query);
@@ -2137,7 +2161,7 @@
 				pHeader->num_hdrs = 1;
 
 				memset(pHeader->hdr[0].name, 0, sizeof(pHeader->hdr[0].name));
-				strncpy(pHeader->hdr[0].name, IPA_LAN_TO_LAN_WLAN_HDR_NAME_V4, sizeof(IPA_LAN_TO_LAN_WLAN_HDR_NAME_V4));
+				strlcpy(pHeader->hdr[0].name, IPA_LAN_TO_LAN_WLAN_HDR_NAME_V4, sizeof(pHeader->hdr[0].name));
 
 				for(j=0; j<MAX_OFFLOAD_PAIR; j++)
 				{
@@ -2154,8 +2178,14 @@
 					goto fail;
 				}
 				lan2lan_hdr_hdl_v4[j].valid = true;
-				sprintf(index, "%d", j);
-				strncat(pHeader->hdr[0].name, index, sizeof(index));
+				snprintf(index,sizeof(index), "%d", j);
+
+				if (strlcat(pHeader->hdr[0].name, index, sizeof(pHeader->hdr[0].name)) > IPA_RESOURCE_NAME_MAX)
+				{
+					IPACMERR(" header name construction failed exceed length (%d)\n", strlen(pHeader->hdr[0].name));
+					res = IPACM_FAILURE;
+					goto fail;
+				}
 
 				pHeader->hdr[0].hdr_len = sCopyHeader.hdr_len;
 				pHeader->hdr[0].is_partial = 0;
@@ -2248,7 +2278,8 @@
 				pHeader->num_hdrs = 1;
 
 				memset(pHeader->hdr[0].name, 0, sizeof(pHeader->hdr[0].name));
-				strncpy(pHeader->hdr[0].name, IPA_LAN_TO_LAN_WLAN_HDR_NAME_V6, sizeof(IPA_LAN_TO_LAN_WLAN_HDR_NAME_V6));
+				strlcpy(pHeader->hdr[0].name, IPA_LAN_TO_LAN_WLAN_HDR_NAME_V6, sizeof(pHeader->hdr[0].name));
+
 
 				for(j=0; j<MAX_OFFLOAD_PAIR; j++)
 				{
@@ -2265,9 +2296,14 @@
 					goto fail;
 				}
 				lan2lan_hdr_hdl_v6[j].valid = true;
-				sprintf(index, "%d", j);
-				strncat(pHeader->hdr[0].name, index, sizeof(index));
+				snprintf(index,sizeof(index), "%d", j);
 
+				if (strlcat(pHeader->hdr[0].name, index, sizeof(pHeader->hdr[0].name)) > IPA_RESOURCE_NAME_MAX)
+				{
+					IPACMERR(" header name construction failed exceed length (%d)\n", strlen(pHeader->hdr[0].name));
+					res = IPACM_FAILURE;
+					goto fail;
+				}
 				pHeader->hdr[0].hdr_len = sCopyHeader.hdr_len;
 				pHeader->hdr[0].is_partial = 0;
 				pHeader->hdr[0].hdr_hdl = -1;
diff --git a/ipacm/src/IPACM_Xml.cpp b/ipacm/src/IPACM_Xml.cpp
index 44ebb2c..87a72cd 100644
--- a/ipacm/src/IPACM_Xml.cpp
+++ b/ipacm/src/IPACM_Xml.cpp
@@ -1,4 +1,4 @@
-/* 
+/*
 Copyright (c) 2013, The Linux Foundation. All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -133,14 +133,13 @@
 	/* parse the xml tree returned by libxml */
 	ret_val = ipacm_cfg_xml_parse_tree(root, config);
 
-	if (ret_val != IPACM_SUCCESS) 
+	if (ret_val != IPACM_SUCCESS)
 	{
 		IPACMDBG("IPACM_xml_parse: ipacm_cfg_xml_parse_tree returned parse error!\n");
 	}
 
 	/* Free up the libxml's parse tree */
 	xmlFreeDoc(doc);
-	//xmlCleanupParser();
 
 	return ret_val;
 }
@@ -157,7 +156,7 @@
 	char* content;
 	char content_buf[MAX_XML_STR_LEN];
 
-	if (NULL == xml_node) 
+	if (NULL == xml_node)
 		return ret_val;
 
 	while ( xml_node != NULL &&
@@ -261,7 +260,7 @@
 						{
 							config->iface_config.iface_entries[config->iface_config.num_iface_entries - 1].if_cat = ETH_IF;
 							IPACMDBG("Category %d\n", config->iface_config.iface_entries[config->iface_config.num_iface_entries - 1].if_cat);
-						}						
+						}
 					}
 				}
 				else if (IPACM_util_icmp_string((char*)xml_node->name,
@@ -273,11 +272,15 @@
 						str_size = strlen(content);
 						memset(content_buf, 0, sizeof(content_buf));
 						memcpy(content_buf, (void *)content, str_size);
+						content_buf[MAX_XML_STR_LEN-1] = '\0';
+						if(content_buf)
+						{
 						config->private_subnet_config.private_subnet_entries[config->private_subnet_config.num_subnet_entries - 1].subnet_addr
 							 = ntohl(inet_addr(content_buf));
 						IPACMDBG("subnet_addr: %s \n", content_buf);
 					}
 				}
+				}
 				else if (IPACM_util_icmp_string((char*)xml_node->name,
 																				SUBNETMASK_TAG) == 0)
 				{
@@ -287,11 +290,15 @@
 						str_size = strlen(content);
 						memset(content_buf, 0, sizeof(content_buf));
 						memcpy(content_buf, (void *)content, str_size);
+						content_buf[MAX_XML_STR_LEN-1] = '\0';
+							if(content_buf)
+							{
 						config->private_subnet_config.private_subnet_entries[config->private_subnet_config.num_subnet_entries - 1].subnet_mask
 							 = ntohl(inet_addr(content_buf));
 						IPACMDBG("subnet_mask: %s \n", content_buf);
 					}
 				}
+				}
 				else if (IPACM_util_icmp_string((char*)xml_node->name,
 																				Protocol_TAG) == 0)
 				{
@@ -301,6 +308,7 @@
 						str_size = strlen(content);
 						memset(content_buf, 0, sizeof(content_buf));
 						memcpy(content_buf, (void *)content, str_size);
+						content_buf[MAX_XML_STR_LEN-1] = '\0';
 
 						if (0 == strncasecmp(content_buf, TCP_PROTOCOL_TAG, str_size))
 						{
@@ -374,7 +382,7 @@
 	/* parse the xml tree returned by libxml*/
 	ret_val = IPACM_firewall_xml_parse_tree(root, config);
 
-	if (ret_val != IPACM_SUCCESS) 
+	if (ret_val != IPACM_SUCCESS)
 	{
 		IPACMDBG("IPACM_xml_parse: ipacm_firewall_xml_parse_tree returned parse error!\n");
 	}
@@ -402,7 +410,7 @@
 
 	IPACM_ASSERT(config != NULL);
 
-	if (NULL == xml_node) 
+	if (NULL == xml_node)
 		return ret_val;
 
 	while ( xml_node != NULL &&
@@ -448,16 +456,16 @@
 						        memcpy(content_buf, (void *)content, str_size);
 							if (atoi(content_buf)==1)
 							{
-					    	            config->rule_action_accept = true;							
+					    	            config->rule_action_accept = true;
 							}
 							else
 							{
-					    	            config->rule_action_accept = false;														
-							}							
-				    	                IPACMDBG(" Allow traffic which matches rules ?:%d\n",config->rule_action_accept);	
+					    	            config->rule_action_accept = false;
+							}
+				    	                IPACMDBG(" Allow traffic which matches rules ?:%d\n",config->rule_action_accept);
 					    }
 				        }
-							
+
 					if (0 == IPACM_util_icmp_string((char*)xml_node->name,
 																					FirewallEnabled_TAG))
 					{
@@ -470,18 +478,15 @@
 						        memcpy(content_buf, (void *)content, str_size);
 							if (atoi(content_buf)==1)
 							{
-					    	            config->firewall_enable = true;							
+					    	            config->firewall_enable = true;
 							}
 						        else
 							{
-					    	            config->firewall_enable = false;														
-							}							
-				    	                IPACMDBG(" Firewall Enable?:%d\n", config->firewall_enable);	
-				            }							
-					}		
-
-
-
+					    	            config->firewall_enable = false;
+							}
+				    	                IPACMDBG(" Firewall Enable?:%d\n", config->firewall_enable);
+				            }
+					}
 					/* go to child */
 					ret_val = IPACM_firewall_xml_parse_tree(xml_node->children,
 																									config);
@@ -519,11 +524,15 @@
 						str_size = strlen(content);
 						memset(content_buf, 0, sizeof(content_buf));
 						memcpy(content_buf, (void *)content, str_size);
+						content_buf[MAX_XML_STR_LEN-1] = '\0';
+						if (content_buf)
+						{
 						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v4.src_addr
 							 = ntohl(inet_addr(content_buf));
 						IPACMDBG("IPv4 source address is: %s \n", content_buf);
 					}
 				}
+				}
 				else if (0 == IPACM_util_icmp_string((char*)xml_node->name,
 																						 IPV4SourceSubnetMask_TAG))
 				{
@@ -533,11 +542,15 @@
 						str_size = strlen(content);
 						memset(content_buf, 0, sizeof(content_buf));
 						memcpy(content_buf, (void *)content, str_size);
+						content_buf[MAX_XML_STR_LEN-1] = '\0';
+							if (content_buf)
+							{
 						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v4.src_addr_mask
 							 = ntohl(inet_addr(content_buf));
 						IPACMDBG("IPv4 source subnet mask is: %s \n", content_buf);
 					}
 				}
+				}
 				else if (0 == IPACM_util_icmp_string((char*)xml_node->name,
 																						 IPV4DestinationAddress_TAG))
 				{
@@ -555,11 +568,15 @@
 						str_size = strlen(content);
 						memset(content_buf, 0, sizeof(content_buf));
 						memcpy(content_buf, (void *)content, str_size);
+						content_buf[MAX_XML_STR_LEN-1] = '\0';
+							if (content_buf)
+							{
 						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v4.dst_addr
 							 = ntohl(inet_addr(content_buf));
 						IPACMDBG("IPv4 destination address is: %s \n", content_buf);
 					}
 				}
+				}
 				else if (0 == IPACM_util_icmp_string((char*)xml_node->name,
 																						 IPV4DestinationSubnetMask_TAG))
 				{
@@ -569,11 +586,15 @@
 						str_size = strlen(content);
 						memset(content_buf, 0, sizeof(content_buf));
 						memcpy(content_buf, (void *)content, str_size);
+						content_buf[MAX_XML_STR_LEN-1] = '\0';
+							if (content_buf > 0)
+							{
 						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v4.dst_addr_mask
 							 = ntohl(inet_addr(content_buf));
 						IPACMDBG("IPv4 destination subnet mask is: %s \n", content_buf);
 					}
 				}
+				}
 				else if (0 == IPACM_util_icmp_string((char*)xml_node->name,
 																						 IPV4TypeOfService_TAG))
 				{
@@ -652,10 +673,10 @@
 						inet_pton(AF_INET6, content_buf, &ip6_addr);
 						memcpy(config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.src_addr,
 									 ip6_addr.s6_addr, IPACM_IPV6_ADDR_LEN * sizeof(uint8_t));
-						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.src_addr[0]=ntohl(config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.src_addr[0]);								 
-						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.src_addr[1]=ntohl(config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.src_addr[1]);								 
-						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.src_addr[2]=ntohl(config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.src_addr[2]);								 
-						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.src_addr[3]=ntohl(config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.src_addr[3]);									 			 
+						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.src_addr[0]=ntohl(config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.src_addr[0]);
+						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.src_addr[1]=ntohl(config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.src_addr[1]);
+						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.src_addr[2]=ntohl(config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.src_addr[2]);
+						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.src_addr[3]=ntohl(config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.src_addr[3]);
 
 						IPACMDBG("\n ipv6 source addr is %d \n ",
 										 config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.src_addr[0]);
@@ -709,10 +730,10 @@
 						inet_pton(AF_INET6, content_buf, &ip6_addr);
 						memcpy(config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.dst_addr,
 									 ip6_addr.s6_addr, IPACM_IPV6_ADDR_LEN * sizeof(uint8_t));
-						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.dst_addr[0]=ntohl(config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.dst_addr[0]);								 
-						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.dst_addr[1]=ntohl(config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.dst_addr[1]);								 
-						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.dst_addr[2]=ntohl(config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.dst_addr[2]);								 
-						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.dst_addr[3]=ntohl(config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.dst_addr[3]);									 			 
+						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.dst_addr[0]=ntohl(config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.dst_addr[0]);
+						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.dst_addr[1]=ntohl(config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.dst_addr[1]);
+						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.dst_addr[2]=ntohl(config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.dst_addr[2]);
+						config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.dst_addr[3]=ntohl(config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.dst_addr[3]);
 						IPACMDBG("\n ipv6 dest addr is %d \n",
 										 config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.u.v6.dst_addr[0]);
 					}
@@ -837,9 +858,9 @@
  						  config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port_lo
 							 = config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port;
 						  config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port_hi
-							 = config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port + atoi(content_buf);	 
+							 = config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port + atoi(content_buf);
 						  config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port
-							 = 0;						 
+							 = 0;
 						  IPACMDBG("\n tcp source port from %d to %d \n",
 						                 config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port_lo,
 										 config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port_hi);
@@ -849,8 +870,7 @@
 					       config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.attrib_mask |= IPA_FLT_SRC_PORT;
                            IPACMDBG("\n tcp source port= %d \n",
 										 config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port);
-
-						}						
+						}
 					}
 				}
 				else if (0 == IPACM_util_icmp_string((char*)xml_node->name,
@@ -888,9 +908,9 @@
  						  config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port_lo
 							 = config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port;
 						  config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port_hi
-							 = config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port + atoi(content_buf);						 
+							 = config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port + atoi(content_buf);
 						  config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port
-							 = 0;						 
+							 = 0;
 						  IPACMDBG("\n tcp dest port from %d to %d \n",
 						                 config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port_lo,
 										 config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port_hi);
@@ -938,9 +958,9 @@
  						  config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port_lo
 							 = config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port;
 						  config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port_hi
-							 = config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port + atoi(content_buf);						 
+							 = config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port + atoi(content_buf);
 						  config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port
-							 = 0;						 
+							 = 0;
 						  IPACMDBG("\n udp source port from %d to %d \n",
 						                 config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port_lo,
 										 config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port_hi);
@@ -989,9 +1009,9 @@
  						  config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port_lo
 							 = config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port;
 						  config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port_hi
-							 = config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port + atoi(content_buf);						 
+							 = config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port + atoi(content_buf);
 						  config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port
-							 = 0;						 
+							 = 0;
 						  IPACMDBG("\n UDP dest port from %d to %d \n",
 						                 config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port_lo,
 										 config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port_hi);
@@ -1085,9 +1105,9 @@
  						  config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port_lo
 							 = config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port;
 						  config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port_hi
-							 = config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port + atoi(content_buf);						 
+							 = config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port + atoi(content_buf);
 						  config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port
-							 = 0;						 
+							 = 0;
 						  IPACMDBG("\n tcp_udp source port from %d to %d \n",
 						                 config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port_lo,
 										 config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.src_port_hi);
@@ -1135,9 +1155,9 @@
  						  config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port_lo
 							 = config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port;
 						  config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port_hi
-							 = config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port + atoi(content_buf);						 
+							 = config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port + atoi(content_buf);
 						  config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port
-							 = 0;						 
+							 = 0;
 						  IPACMDBG("\n tcp_udp dest port from %d to %d \n",
 						                 config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port_lo,
 										 config->extd_firewall_entries[config->num_extd_firewall_entries - 1].attrib.dst_port_hi);