From: Lennart Poettering Date: Wed, 20 Mar 2019 09:31:13 +0000 (+0100) Subject: alloc-util: add extra overflow checks to GREEDY_REALLOC() X-Git-Tag: v242-rc1~103^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=23964f7faf86df7fd297dc5b0a9f1dfb03a0eb56;p=thirdparty%2Fsystemd.git alloc-util: add extra overflow checks to GREEDY_REALLOC() --- diff --git a/src/basic/alloc-util.c b/src/basic/alloc-util.c index 15b67665d26..f4bd33f4e01 100644 --- a/src/basic/alloc-util.c +++ b/src/basic/alloc-util.c @@ -48,13 +48,17 @@ void* greedy_realloc(void **p, size_t *allocated, size_t need, size_t size) { if (*allocated >= need) return *p; - newalloc = MAX(need * 2, 64u / size); - a = newalloc * size; + if (_unlikely_(need > SIZE_MAX/2)) /* Overflow check */ + return NULL; - /* check for overflows */ - if (a < size * need) + newalloc = need * 2; + if (size_multiply_overflow(newalloc, size)) return NULL; + a = newalloc * size; + if (a < 64) /* Allocate at least 64 bytes */ + a = 64; + q = realloc(*p, a); if (!q) return NULL;