summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authormmcc <mmcc@cvs.openbsd.org>2015-10-16 23:13:36 +0000
committermmcc <mmcc@cvs.openbsd.org>2015-10-16 23:13:36 +0000
commit8a431915954c006a4c0fcd6553b5daade619b688 (patch)
tree8c3324147630c10ac7352e908ebf11b5fee678fd /bin
parentf57bdc1233c877fced52c883076f325dd392b4ea (diff)
Move the overflow check to alloc() so that the link struct overhead can
never bite us. Suggested by Theo Buehler, inspired by Bitrig's natano@. ok tedu@
Diffstat (limited to 'bin')
-rw-r--r--bin/ksh/alloc.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/bin/ksh/alloc.c b/bin/ksh/alloc.c
index 3a6b35a79a4..21128454c68 100644
--- a/bin/ksh/alloc.c
+++ b/bin/ksh/alloc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: alloc.c,v 1.9 2015/10/16 03:17:56 mmcc Exp $ */
+/* $OpenBSD: alloc.c,v 1.10 2015/10/16 23:13:35 mmcc Exp $ */
/*
* Copyright (c) 2002 Marc Espie.
*
@@ -63,6 +63,10 @@ alloc(size_t size, Area *ap)
{
struct link *l;
+ /* ensure that we don't overflow by allocating space for link */
+ if (size > SIZE_MAX - sizeof(struct link))
+ internal_errorf(1, "unable to allocate memory");
+
l = malloc(sizeof(struct link) + size);
if (l == NULL)
internal_errorf(1, "unable to allocate memory");
@@ -92,10 +96,6 @@ allocarray(size_t nmemb, size_t size, Area *ap)
internal_errorf(1, "unable to allocate memory");
}
- /* additional check because alloc() allocates space for link */
- if (nmemb * size > SIZE_MAX - sizeof(struct link))
- internal_errorf(1, "unable to allocate memory");
-
return alloc(nmemb * size, ap);
}