From c05107767b589e9aac9711eb385738887f86eb77 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Tue, 9 Oct 2018 16:53:43 +0200 Subject: [PATCH] alloc-util: return NULL if 0-sized allocation is requested That would almost certainly be an error (e.g., an overflow in computing _need_), so it's better to fail. --- src/basic/alloc-util.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/basic/alloc-util.h b/src/basic/alloc-util.h index ebe42889ea..62b591117b 100644 --- a/src/basic/alloc-util.h +++ b/src/basic/alloc-util.h @@ -52,8 +52,11 @@ static inline void freep(void *p) { #define _cleanup_free_ _cleanup_(freep) +/* Checks the size arguments of allocation functions for overflow in multiplication. In addition, checks if either of + * them is 0; that is almost certainly an error (e.g., an overflow in computing _need_), so it's better to fail (and + * we cannot leave this check to malloc, because the behavior of malloc(0) is impl. specific). */ static inline bool size_multiply_overflow(size_t size, size_t need) { - return _unlikely_(need != 0 && size > (SIZE_MAX / need)); + return _unlikely_(need == 0 || size == 0 || size > (SIZE_MAX / need)); } _malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t size, size_t need) {