From 23964f7faf86df7fd297dc5b0a9f1dfb03a0eb56 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 20 Mar 2019 10:31:13 +0100 Subject: [PATCH] alloc-util: add extra overflow checks to GREEDY_REALLOC() --- src/basic/alloc-util.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/basic/alloc-util.c b/src/basic/alloc-util.c index 15b67665d2..f4bd33f4e0 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; - - /* check for overflows */ - if (a < size * need) + if (_unlikely_(need > SIZE_MAX/2)) /* Overflow check */ return NULL; + 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;