aboutsummaryrefslogtreecommitdiffstats
path: root/libtest/libtest_alloc.c
diff options
context:
space:
mode:
authorMattias Andrée <m@maandree.se>2026-05-10 13:37:34 +0200
committerMattias Andrée <m@maandree.se>2026-05-10 13:37:34 +0200
commitb7e8928005079171c7595fd336a76f655daed48a (patch)
tree9fa87ba8ada6cc52e343c32789ff7225d817e4fa /libtest/libtest_alloc.c
parentMisc (diff)
downloadlibrecrypt-b7e8928005079171c7595fd336a76f655daed48a.tar.gz
librecrypt-b7e8928005079171c7595fd336a76f655daed48a.tar.bz2
librecrypt-b7e8928005079171c7595fd336a76f655daed48a.tar.xz
Improvements to libtest
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to 'libtest/libtest_alloc.c')
-rw-r--r--libtest/libtest_alloc.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/libtest/libtest_alloc.c b/libtest/libtest_alloc.c
index 5aa3218..dc9cc8f 100644
--- a/libtest/libtest_alloc.c
+++ b/libtest/libtest_alloc.c
@@ -62,7 +62,7 @@ libtest_alloc(struct meminfo *meminfo)
size_t bookkeeping;
int saved_errno;
#ifdef WITH_BACKTRACE
- size_t backtrace_realignment;
+ size_t backtrace_realignment = 0u; /* initialised to make clang(1) happy */
size_t i, backtrace_n;
unw_cursor_t cursor;
unw_context_t context;
@@ -121,6 +121,12 @@ libtest_alloc(struct meminfo *meminfo)
bookkeeping -= meminfo->actual_alignment;
/* Allocate memory */
+ if (!libtest_malloc_internal_usage) {
+ if (libtest_malloc_fail_in && !--libtest_malloc_fail_in) {
+ errno = ENOMEM;
+ return NULL;
+ }
+ }
base_ptr = mmap_anon(meminfo->real_alloc_size);
if (!base_ptr)
return NULL;
@@ -152,6 +158,13 @@ libtest_alloc(struct meminfo *meminfo)
meminfo->usable_alloc_size = meminfo->real_alloc_size;
meminfo->usable_alloc_size -= (size_t)((char *)ret_ptr - (char *)base_ptr);
+ /* See CEVEATS section in mmap(2) */
+ if (meminfo->usable_alloc_size > PTRDIFF_MAX) {
+ assert(!libtest_real_munmap(base_ptr, meminfo->real_alloc_size));
+ errno = ENOMEM;
+ return NULL;
+ }
+
/* Store book-keeping */
meminfo->usable_area = ret_ptr;
memcpy(base_ptr, meminfo, sizeof(*meminfo));
@@ -183,7 +196,7 @@ libtest_alloc(struct meminfo *meminfo)
libtest_malloc_internal_usage++;
fprintf(stderr, "Memory allocated: %p (alloc-size=%zu, real-size=%zu, leak-allowed=%i)\n",
ret_ptr, meminfo->requested_alloc_size, meminfo->real_alloc_size, meminfo->accept_leakage);
- libtest_print_backtrace(stderr, "\tat ", 0u, NULL);
+ libtest_print_backtrace(stderr, NULL, "\tat ", 0u, NULL, NULL);
fflush(stderr);
libtest_malloc_internal_usage--;
}