Commit 1e3c374e authored by Thomas Weißschuh's avatar Thomas Weißschuh
Browse files

tools/nolibc: check for overflow in calloc() without divisions



On some architectures without native division instructions
the division can generate calls into libgcc/compiler-rt.
This library might not be available, so its use should be avoided.

Use the compiler builtin to check for overflows without needing a
division. The builtin has been available since GCC 3 and clang 3.8.

Signed-off-by: default avatarThomas Weißschuh <linux@weissschuh.net>
Acked-by: default avatarWilly Tarreau <w@1wt.eu>
Link: https://patch.msgid.link/20260404-nolibc-asprintf-v2-1-17d2d0df9763@weissschuh.net
parent 12496aad
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -145,9 +145,9 @@ void *malloc(size_t len)
static __attribute__((unused))
void *calloc(size_t size, size_t nmemb)
{
	size_t x = size * nmemb;
	size_t x;

	if (__builtin_expect(size && ((x / size) != nmemb), 0)) {
	if (__builtin_expect(__builtin_mul_overflow(size, nmemb, &x), 0)) {
		SET_ERRNO(ENOMEM);
		return NULL;
	}