summaryrefslogtreecommitdiff
path: root/usr/src/lib/libmtmalloc/common/mtmalloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libmtmalloc/common/mtmalloc.c')
-rw-r--r--usr/src/lib/libmtmalloc/common/mtmalloc.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/usr/src/lib/libmtmalloc/common/mtmalloc.c b/usr/src/lib/libmtmalloc/common/mtmalloc.c
index 91d9ae2371..0cf998c952 100644
--- a/usr/src/lib/libmtmalloc/common/mtmalloc.c
+++ b/usr/src/lib/libmtmalloc/common/mtmalloc.c
@@ -331,7 +331,19 @@ void *
calloc(size_t nelem, size_t bytes)
{
void * ptr;
- size_t size = nelem * bytes;
+ size_t size;
+
+ if (nelem == 0 || bytes == 0) {
+ size = 0;
+ } else {
+ size = nelem * bytes;
+
+ /* check for overflow */
+ if ((size / nelem) != bytes) {
+ errno = ENOMEM;
+ return (NULL);
+ }
+ }
ptr = malloc(size);
if (ptr == NULL)