libc: fix needless malloc failures

The NetBSD libc malloc implementation performs its own out-of-memory
check, presumably for performance reasons.  The check makes a strong
assumption about the address space layout, which is that memory-
mapped pages are always located above the heap.  However, this
assumption does not necessarily hold on MINIX3, thus resulting in
malloc reporting an out-of-memory condition without the system
actually being out of memory at all.  Evidence suggests that in
particular dynamically linked (i.e., pkgsrc) binaries were affected
by this issue - most notably git.

Change-Id: If542fbace0a1cce12aa9e075d51992cbbbf26e94
This commit is contained in:
David van Moolenbroek 2015-10-28 01:05:39 +00:00
parent 2d6bbeb0b9
commit 2e23f1755e

View file

@ -818,8 +818,10 @@ imalloc(size_t size)
if ((size + malloc_pagesize) < size) /* Check for overflow */
result = NULL;
#ifndef __minix
else if ((size + malloc_pagesize) >= (uintptr_t)page_dir)
result = NULL;
#endif /* !__minix */
else if (size <= malloc_maxsize)
result = malloc_bytes(size);
else