aboutsummaryrefslogtreecommitdiff
path: root/src/microhttpd/memorypool.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/microhttpd/memorypool.c')
-rw-r--r--src/microhttpd/memorypool.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/microhttpd/memorypool.c b/src/microhttpd/memorypool.c
index cd358f95..e0511830 100644
--- a/src/microhttpd/memorypool.c
+++ b/src/microhttpd/memorypool.c
@@ -345,6 +345,7 @@ MHD_pool_destroy (struct MemoryPool *pool)
345 345
346 mhd_assert (pool->end >= pool->pos); 346 mhd_assert (pool->end >= pool->pos);
347 mhd_assert (pool->size >= pool->end - pool->pos); 347 mhd_assert (pool->size >= pool->end - pool->pos);
348 mhd_assert (pool->pos == ROUND_TO_ALIGN (pool->pos));
348 _MHD_UNPOISON_MEMORY (pool->memory, pool->size); 349 _MHD_UNPOISON_MEMORY (pool->memory, pool->size);
349 if (! pool->is_mmap) 350 if (! pool->is_mmap)
350 free (pool->memory); 351 free (pool->memory);
@@ -374,6 +375,7 @@ MHD_pool_get_free (struct MemoryPool *pool)
374{ 375{
375 mhd_assert (pool->end >= pool->pos); 376 mhd_assert (pool->end >= pool->pos);
376 mhd_assert (pool->size >= pool->end - pool->pos); 377 mhd_assert (pool->size >= pool->end - pool->pos);
378 mhd_assert (pool->pos == ROUND_TO_ALIGN (pool->pos));
377#ifdef MHD_ASAN_POISON_ACTIVE 379#ifdef MHD_ASAN_POISON_ACTIVE
378 if ((pool->end - pool->pos) <= _MHD_RED_ZONE_SIZE) 380 if ((pool->end - pool->pos) <= _MHD_RED_ZONE_SIZE)
379 return 0; 381 return 0;
@@ -403,6 +405,7 @@ MHD_pool_allocate (struct MemoryPool *pool,
403 405
404 mhd_assert (pool->end >= pool->pos); 406 mhd_assert (pool->end >= pool->pos);
405 mhd_assert (pool->size >= pool->end - pool->pos); 407 mhd_assert (pool->size >= pool->end - pool->pos);
408 mhd_assert (pool->pos == ROUND_TO_ALIGN (pool->pos));
406 asize = ROUND_TO_ALIGN_PLUS_RED_ZONE (size); 409 asize = ROUND_TO_ALIGN_PLUS_RED_ZONE (size);
407 if ( (0 == asize) && (0 != size) ) 410 if ( (0 == asize) && (0 != size) )
408 return NULL; /* size too close to SIZE_MAX */ 411 return NULL; /* size too close to SIZE_MAX */
@@ -452,6 +455,7 @@ MHD_pool_try_alloc (struct MemoryPool *pool,
452 455
453 mhd_assert (pool->end >= pool->pos); 456 mhd_assert (pool->end >= pool->pos);
454 mhd_assert (pool->size >= pool->end - pool->pos); 457 mhd_assert (pool->size >= pool->end - pool->pos);
458 mhd_assert (pool->pos == ROUND_TO_ALIGN (pool->pos));
455 asize = ROUND_TO_ALIGN_PLUS_RED_ZONE (size); 459 asize = ROUND_TO_ALIGN_PLUS_RED_ZONE (size);
456 if ( (0 == asize) && (0 != size) ) 460 if ( (0 == asize) && (0 != size) )
457 { /* size is too close to SIZE_MAX, very unlikely */ 461 { /* size is too close to SIZE_MAX, very unlikely */
@@ -505,6 +509,10 @@ MHD_pool_reallocate (struct MemoryPool *pool,
505 mhd_assert (pool->size >= pool->end - pool->pos); 509 mhd_assert (pool->size >= pool->end - pool->pos);
506 mhd_assert (old != NULL || old_size == 0); 510 mhd_assert (old != NULL || old_size == 0);
507 mhd_assert (pool->size >= old_size); 511 mhd_assert (pool->size >= old_size);
512 mhd_assert (pool->pos == ROUND_TO_ALIGN (pool->pos));
513#if defined(MHD_ASAN_POISON_ACTIVE) && defined(HAVE___ASAN_REGION_IS_POISONED)
514 mhd_assert (NULL == __asan_region_is_poisoned (old, old_size));
515#endif /* MHD_ASAN_POISON_ACTIVE && HAVE___ASAN_REGION_IS_POISONED */
508 516
509 if (NULL != old) 517 if (NULL != old)
510 { /* Have previously allocated data */ 518 { /* Have previously allocated data */
@@ -596,6 +604,9 @@ MHD_pool_reset (struct MemoryPool *pool,
596 /* (keep == NULL || pool->memory + pool->size >= (uint8_t*) keep + copy_bytes) */ 604 /* (keep == NULL || pool->memory + pool->size >= (uint8_t*) keep + copy_bytes) */
597 mhd_assert ((keep == NULL) || \ 605 mhd_assert ((keep == NULL) || \
598 (pool->size >= mp_ptr_diff_ (keep, pool->memory) + copy_bytes)); 606 (pool->size >= mp_ptr_diff_ (keep, pool->memory) + copy_bytes));
607#if defined(MHD_ASAN_POISON_ACTIVE) && defined(HAVE___ASAN_REGION_IS_POISONED)
608 mhd_assert (NULL == __asan_region_is_poisoned (keep, copy_bytes));
609#endif /* MHD_ASAN_POISON_ACTIVE && HAVE___ASAN_REGION_IS_POISONED */
599 _MHD_UNPOISON_MEMORY (pool->memory, new_size); 610 _MHD_UNPOISON_MEMORY (pool->memory, new_size);
600 if ( (NULL != keep) && 611 if ( (NULL != keep) &&
601 (keep != pool->memory) ) 612 (keep != pool->memory) )