Skip to content

Commit 5f61a9e

Browse files
committed
add mprotect error when the mmap limit might be reached in secure mode (see issue #77)
1 parent be10ebe commit 5f61a9e

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

src/os.c

+14
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,18 @@ static void* mi_os_page_align_area_conservative(void* addr, size_t size, size_t*
596596
return mi_os_page_align_areax(true, addr, size, newsize);
597597
}
598598

599+
static void mi_mprotect_hint(int err) {
600+
#if defined(MI_OS_USE_MMAP) && (MI_SECURE>=2) // guard page around every mimalloc page
601+
if (err == ENOMEM) {
602+
_mi_warning_message("the previous warning may have been caused by a low memory map limit.\n"
603+
" On Linux this is controlled by the vm.max_map_count. For example:\n"
604+
" > sudo sysctl -w vm.max_map_count=262144\n");
605+
}
606+
#else
607+
UNUSED(err);
608+
#endif
609+
}
610+
599611
// Commit/Decommit memory.
600612
// Usuelly commit is aligned liberal, while decommit is aligned conservative.
601613
// (but not for the reset version where we want commit to be conservative as well)
@@ -644,6 +656,7 @@ static bool mi_os_commitx(void* addr, size_t size, bool commit, bool conservativ
644656
#endif
645657
if (err != 0) {
646658
_mi_warning_message("%s error: start: 0x%p, csize: 0x%x, err: %i\n", commit ? "commit" : "decommit", start, csize, err);
659+
mi_mprotect_hint(err);
647660
}
648661
mi_assert_internal(err == 0);
649662
return (err == 0);
@@ -762,6 +775,7 @@ static bool mi_os_protectx(void* addr, size_t size, bool protect) {
762775
#endif
763776
if (err != 0) {
764777
_mi_warning_message("mprotect error: start: 0x%p, csize: 0x%x, err: %i\n", start, csize, err);
778+
mi_mprotect_hint(err);
765779
}
766780
return (err == 0);
767781
}

0 commit comments

Comments
 (0)