NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
port-evbarm/49974: mmap(2) of large anonymous regions is broken
>Number: 49974
>Category: port-evbarm
>Synopsis: mmap(2) of large anonymous regions is broken
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: port-evbarm-maintainer
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Mon Jun 15 17:05:01 +0000 2015
>Originator: Tobias Nygren
>Release: 7.99.18
>Organization:
>Environment:
Banana Pi
>Description:
mmap(2) of an anonymous 768MB region without address hint at program startup fails. Presumably the system picks a user VA above 1GB (0x6000000) which is not large enough to hold the requested region. If a hint is supplied, then mmap works.
This breaks pkgsrc/lang/openjdk7. It wants to allocate the object heap with mmap and expects that it can get a contiguous region at startup, which is not unreasonable. The system should figure it needs to use a sub 1GB VA based on the len parameter.
>How-To-Repeat:
#include <stdio.h>
#include <sys/mman.h>
int main(void) {
size_t len = 768 * 1024 * 1024;
void * addr = NULL;
void *ret;
/* this call fails */
ret = mmap(addr, len, PROT_READ|PROT_WRITE, MAP_ANON, -1, 0);
if (ret == MAP_FAILED) {
printf("map without hint failed!\n");
}
addr = (void*)0x100000; /* 1MB */
/* this call works fine */
ret = mmap(addr, len, PROT_READ|PROT_WRITE, MAP_ANON|MAP_FIXED, -1, 0);
if (ret == MAP_FAILED) {
printf("map with hint failed\n");
}
printf("%p\n", ret);
}
>Fix:
unknown. I don't recall having this problem on NetBSD 7, it might be a recent regression.
Home |
Main Index |
Thread Index |
Old Index