From e1ef1325ec7d747d8dd62797897f6b79a4a75c8d Mon Sep 17 00:00:00 2001 From: Greg King Date: Sun, 19 Dec 2021 20:27:56 -0500 Subject: [PATCH] Put the alignment decrement code back into posix_memalign(). Without that code, the function returns a very broken pointer. --- libsrc/common/pmemalign.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/libsrc/common/pmemalign.c b/libsrc/common/pmemalign.c index d9d6b4e97..52adb240d 100644 --- a/libsrc/common/pmemalign.c +++ b/libsrc/common/pmemalign.c @@ -75,7 +75,7 @@ int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size) } /* Test alignment: is it a power of two? There must be only one bit set. */ - if (alignment == 0 || (alignment & alignment - 1) != 0) { + if (alignment == 0 || (alignment & (alignment - 1)) != 0) { *memptr = NULL; return EINVAL; } @@ -86,7 +86,7 @@ int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size) ** overhead added one time; and, the worst thing that might happen is that ** we cannot free the upper and lower blocks. */ - b = malloc (size + alignment); + b = malloc (--alignment + size); /* Handle out-of-memory */ if (b == NULL) { @@ -169,6 +169,3 @@ int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size) return EOK; } - - -