summaryrefslogtreecommitdiff
path: root/ipacm/src/IPACM_Iface.cpp
diff options
context:
space:
mode:
authorSkylar Chang <chiaweic@codeaurora.org>2014-05-20 06:34:25 -0700
committerSkylar Chang <chiaweic@codeaurora.org>2014-05-21 19:27:09 -0700
commitfcb575daa6cbb751a4014a05f6a8f1983a0f89c5 (patch)
tree3b7de5d7b69953621161703823e236d320bad6bb /ipacm/src/IPACM_Iface.cpp
parent30c1b45560d5315100322e7a172f029a7cd188b8 (diff)
downloadipacfg-mgr-fcb575daa6cbb751a4014a05f6a8f1983a0f89c5.tar.gz
IPACM: fix klocwork issue
Fix some potential memory overflow/leak issue reported by Klocwork tool. Change-Id: Id6f8874eb13fd69eae5e0b30cc32025ccd199492
Diffstat (limited to 'ipacm/src/IPACM_Iface.cpp')
-rw-r--r--ipacm/src/IPACM_Iface.cpp64
1 files changed, 60 insertions, 4 deletions
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 @@ int IPACM_Iface::query_iface_property(void)
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 @@ int IPACM_Iface::query_iface_property(void)
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 @@ int IPACM_Iface::query_iface_property(void)
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 @@ fail:
return res;
}
-
/* get ipa interface name */
int IPACM_Iface::ipa_get_if_index
(
@@ -868,3 +879,48 @@ int IPACM_Iface::ipa_get_if_index
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;
+}