diff options
author | Skylar Chang <chiaweic@codeaurora.org> | 2014-05-20 06:34:25 -0700 |
---|---|---|
committer | Skylar Chang <chiaweic@codeaurora.org> | 2014-05-21 19:27:09 -0700 |
commit | fcb575daa6cbb751a4014a05f6a8f1983a0f89c5 (patch) | |
tree | 3b7de5d7b69953621161703823e236d320bad6bb /ipacm/src/IPACM_Iface.cpp | |
parent | 30c1b45560d5315100322e7a172f029a7cd188b8 (diff) | |
download | ipacfg-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.cpp | 64 |
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; +} |