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);
