summaryrefslogtreecommitdiff
path: root/sys/src/libc/port
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-08-19 10:50:39 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2012-08-19 10:50:39 +0200
commitbe0301f45850ca70db0f2ec8258e73615a0ec7be (patch)
tree4342fe3532728924212e2f60ace3c0de5323c6a0 /sys/src/libc/port
parentfeb58cce49491a980012c42b9a2decc671e32f6c (diff)
calloc: check multiplication overflow
Diffstat (limited to 'sys/src/libc/port')
-rw-r--r--sys/src/libc/port/malloc.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/src/libc/port/malloc.c b/sys/src/libc/port/malloc.c
index 741316926..e23e1f53b 100644
--- a/sys/src/libc/port/malloc.c
+++ b/sys/src/libc/port/malloc.c
@@ -280,10 +280,13 @@ msize(void *v)
}
void*
-calloc(ulong n, ulong szelem)
+calloc(ulong n, ulong s)
{
void *v;
- if(v = mallocz(n*szelem, 1))
+
+ if(n > 1 && ((ulong)-1)/n < s)
+ return nil;
+ if(v = mallocz(n*s, 1))
setmalloctag(v, getcallerpc(&n));
return v;
}