diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-08-19 10:50:39 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-08-19 10:50:39 +0200 |
commit | be0301f45850ca70db0f2ec8258e73615a0ec7be (patch) | |
tree | 4342fe3532728924212e2f60ace3c0de5323c6a0 /sys/src/libc/port/malloc.c | |
parent | feb58cce49491a980012c42b9a2decc671e32f6c (diff) |
calloc: check multiplication overflow
Diffstat (limited to 'sys/src/libc/port/malloc.c')
-rw-r--r-- | sys/src/libc/port/malloc.c | 7 |
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; } |