use region quarantine even if MAP_FIXED call fails
This is a more sensible way of handling an out-of-memory failure in this edge case. It doesn't matter much in practice.pull/138/head
parent
2335f56713
commit
5c974bdf82
|
@ -1008,7 +1008,7 @@ System calls used by all build configurations:
|
|||
* `mremap(old, old_size, new_size, MREMAP_MAYMOVE|MREMAP_FIXED, new)`
|
||||
* `munmap`
|
||||
* `write(STDERR_FILENO, buf, len)` (before aborting due to memory corruption)
|
||||
* `madvise(ptr, size, MADV_DONTNEED)` for `malloc_trim` with slab quarantines
|
||||
* `madvise(ptr, size, MADV_DONTNEED)`
|
||||
|
||||
The main distinction from a typical malloc implementation is the use of
|
||||
getrandom. A common compatibility issue is that existing system call whitelists
|
||||
|
|
|
@ -839,10 +839,10 @@ static void regions_quarantine_deallocate_pages(void *p, size_t size, size_t gua
|
|||
}
|
||||
|
||||
if (unlikely(memory_map_fixed(p, size))) {
|
||||
deallocate_pages(p, size, guard_size);
|
||||
return;
|
||||
}
|
||||
memory_purge(p, size);
|
||||
} else {
|
||||
memory_set_name(p, size, "malloc large quarantine");
|
||||
}
|
||||
|
||||
struct quarantine_info target =
|
||||
(struct quarantine_info){(char *)p - guard_size, size + guard_size * 2};
|
||||
|
|
Loading…
Reference in New Issue