summaryrefslogtreecommitdiffstats
path: root/contrib/unbound/util/alloc.c
diff options
context:
space:
mode:
authorRenato Botelho <renato@netgate.com>2015-12-10 17:01:14 -0200
committerRenato Botelho <renato@netgate.com>2015-12-10 17:01:14 -0200
commita7ed3b08bcfc9de3d1e75679fe9292e5b09aea82 (patch)
tree71acee51f11c433be4c4a51635ce1ea4302ca4b6 /contrib/unbound/util/alloc.c
parent54cf5d1b6607c1e6f2cbf32784c33720517bce49 (diff)
parent3bc7f4d78d27696df85e118c07aa5a2630188922 (diff)
downloadFreeBSD-src-a7ed3b08bcfc9de3d1e75679fe9292e5b09aea82.zip
FreeBSD-src-a7ed3b08bcfc9de3d1e75679fe9292e5b09aea82.tar.gz
Merge remote-tracking branch 'origin/stable/10' into devel
Diffstat (limited to 'contrib/unbound/util/alloc.c')
-rw-r--r--contrib/unbound/util/alloc.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/contrib/unbound/util/alloc.c b/contrib/unbound/util/alloc.c
index 4b81beb..05d2fa3 100644
--- a/contrib/unbound/util/alloc.c
+++ b/contrib/unbound/util/alloc.c
@@ -364,11 +364,18 @@ void *unbound_stat_malloc(size_t size)
#ifdef calloc
#undef calloc
#endif
+#ifndef INT_MAX
+#define INT_MAX (((int)-1)>>1)
+#endif
/** calloc with stats */
void *unbound_stat_calloc(size_t nmemb, size_t size)
{
- size_t s = (nmemb*size==0)?(size_t)1:nmemb*size;
- void* res = calloc(1, s+16);
+ size_t s;
+ void* res;
+ if(nmemb != 0 && INT_MAX/nmemb < size)
+ return NULL; /* integer overflow check */
+ s = (nmemb*size==0)?(size_t)1:nmemb*size;
+ res = calloc(1, s+16);
if(!res) return NULL;
log_info("stat %p=calloc(%u, %u)", res+16, (unsigned)nmemb, (unsigned)size);
unbound_mem_alloc += s;
@@ -503,8 +510,12 @@ void *unbound_stat_malloc_lite(size_t size, const char* file, int line,
void *unbound_stat_calloc_lite(size_t nmemb, size_t size, const char* file,
int line, const char* func)
{
- size_t req = nmemb * size;
- void* res = malloc(req+lite_pad*2+sizeof(size_t));
+ size_t req;
+ void* res;
+ if(nmemb != 0 && INT_MAX/nmemb < size)
+ return NULL; /* integer overflow check */
+ req = nmemb * size;
+ res = malloc(req+lite_pad*2+sizeof(size_t));
if(!res) return NULL;
memmove(res, lite_pre, lite_pad);
memmove(res+lite_pad, &req, sizeof(size_t));
OpenPOWER on IntegriCloud