]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
aligned_alloc wrapper: handle size and aligned values of 0
authorPaul Floyd <pjfloyd@wanadoo.fr>
Sat, 6 Sep 2025 18:56:25 +0000 (20:56 +0200)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Sat, 6 Sep 2025 18:57:31 +0000 (20:57 +0200)
coregrind/m_replacemalloc/vg_replace_malloc.c

index 96edc5bfe9a0b76d331ef95717aef8d8c6aad9db..1df4419ca47069d8daf467881b5cfbcde4e5b914 100644 (file)
@@ -2299,7 +2299,13 @@ extern int * __error(void) __attribute__((weak));
 #define VG_ALIGNED_ALLOC_ALIGN_FACTOR_FOUR 0
 #endif
 
-#if defined(MUSL_LIBC)
+#if defined(VGO_freebsd) || defined(VGO_solaris)
+#define VG_ALIGNED_ALLOC_NO_ALIGN_ZERO 1
+#else
+#define VG_ALIGNED_ALLOC_NO_ALIGN_ZERO 0
+#endif
+
+#if defined(VGO_freebsd) || defined(MUSL_LIBC)
 #define VG_ALIGNED_ALLOC_NO_SIZE_ZERO 0
 #else
 #define VG_ALIGNED_ALLOC_NO_SIZE_ZERO 1
@@ -2364,8 +2370,9 @@ extern int * __error(void) __attribute__((weak));
        VERIFY_ALIGNMENT(&aligned_alloc_info); \
        MALLOC_TRACE("aligned_alloc(al %llu, size %llu)", \
                 (ULong)alignment, (ULong)size ); \
-       if ((VG_ALIGNED_ALLOC_NO_SIZE_ZERO && (alignment == 0)) \
-           || (VG_ALIGNED_ALLOC_SIZE_MULTIPLE_ALIGN && (size % alignment != 0)) \
+       if ((VG_ALIGNED_ALLOC_NO_SIZE_ZERO && (size == 0)) \
+           || (VG_ALIGNED_ALLOC_NO_ALIGN_ZERO && (alignment == 0)) \
+           || (VG_ALIGNED_ALLOC_SIZE_MULTIPLE_ALIGN && alignment && (size % alignment != 0)) \
            || (VG_ALIGNED_ALLOC_ALIGN_POWER_TWO && (alignment & (alignment - 1)) != 0) \
            || (VG_ALIGNED_ALLOC_ALIGN_FACTOR_FOUR && (alignment % 4 != 0))) { \
           SET_ERRNO_EINVAL; \