diff options
Diffstat (limited to 'src/microhttpd/memorypool.c')
-rw-r--r-- | src/microhttpd/memorypool.c | 11 |
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) ) |