Daniel Micay
535466fdfd
avoid undefined shifts with multi-word bitmaps
2018-10-14 18:58:17 -04:00
Daniel Micay
7798b2693e
fix loop exit condition boundary for get_free_slot
2018-10-14 18:49:48 -04:00
Daniel Micay
9ea2fd6667
write_after_free_check only reads data
2018-10-14 18:30:20 -04:00
Daniel Micay
d35674c67e
expected_size is not an output parameter
2018-10-14 18:28:01 -04:00
Daniel Micay
4fbfe4d3ec
fix canary space reservation for pvalloc
2018-10-14 17:49:36 -04:00
Daniel Micay
f11c448a0d
slightly reorganize slab metadata
2018-10-14 15:13:06 -04:00
Daniel Micay
3db3e167ed
remove usage of ATOMIC_VAR_INIT
...
This was never truly required in practice and has been officially
obsoleted in C17.
2018-10-13 16:50:49 -04:00
Daniel Micay
65a7014b48
randomize free slabs reuse
2018-10-13 13:57:00 -04:00
Daniel Micay
83df37436d
fix usage of pthread_atfork for glibc < 2.28
2018-10-12 16:03:15 -04:00
Daniel Micay
6669166fe9
move memory_unmap outside of lock scope
2018-10-12 15:06:51 -04:00
Daniel Micay
b2007ad3d9
implement randomization for the region quarantine
2018-10-12 15:03:59 -04:00
Daniel Micay
ac2b940f0f
fix compatibility with older GCC versions
...
Avoid relying on compiler extensions supporting more flexible usage of
constants closer to how it works in C++.
2018-10-11 18:12:49 -04:00
Daniel Micay
ddcdd9423c
make the memory mapping quarantine more efficient
2018-10-09 14:13:59 -04:00
Daniel Micay
5fa6e01929
clearer name for MREMAP_MAYMOVE threshold
2018-10-08 17:18:13 -04:00
Daniel Micay
1a10c17e8b
add quarantine for large allocations
2018-10-08 16:14:07 -04:00
Daniel Micay
cc9699f1b4
use multi-word bitmap to support up to 256 slots
2018-10-07 18:50:06 -04:00
Daniel Micay
5e2f03296e
remove old debugging code
2018-10-07 16:18:17 -04:00
Daniel Micay
348f9fa557
add configuration for frequency of guard slabs
2018-10-06 15:36:03 -04:00
Daniel Micay
4ee12e64e0
configuration for guard region sizes
2018-10-06 15:17:55 -04:00
Daniel Micay
d18b05eaf4
avoid redundant checks for large realloc
2018-10-06 13:31:16 -04:00
Daniel Micay
eb7ced7781
implement in-place growth of large allocations
2018-10-06 13:24:22 -04:00
Daniel Micay
3dc49f8f73
slightly improve sized deallocation error messages
2018-10-05 01:06:12 -04:00
Daniel Micay
dcd969ae04
use a consistent style for fixed-size int types
...
The stdint.h types don't cover 128-bit integers and the underscore makes
them ill suited to usage in function suffixes. Instead, use the common
naming style in the Linux kernel and elsewhere including the ChaCha8
implementation included here.
2018-10-04 15:17:11 -04:00
Daniel Micay
642eed81c0
allow using larger guards on large allocations
2018-10-04 02:58:24 -04:00
Daniel Micay
5811bd184c
avoid unnecessary preprocessor use for canary mask
2018-10-03 17:17:20 -04:00
Daniel Micay
b24569b6ca
zero leading byte of canaries
2018-10-03 17:09:57 -04:00
Daniel Micay
cf449b3df4
add sized deallocation support
2018-09-19 13:05:12 -04:00
Daniel Micay
82314f4471
make get_size_info straightforward for zero size
2018-09-11 14:51:36 -04:00
Daniel Micay
7a404ddbf2
optimize size calculation for 16 byte spaced sizes
2018-09-11 14:46:44 -04:00
Daniel Micay
2d6ad18aa4
make function naming a bit more consistent
2018-09-11 14:18:13 -04:00
Daniel Micay
684291bf6a
avoid overhead of init check for slab deallocation
2018-09-11 14:13:43 -04:00
Daniel Micay
ef098fea06
simplify init function
2018-09-11 14:12:27 -04:00
Daniel Micay
61684925e8
fix overly naive slab allocation alignment support
2018-09-10 19:01:11 -04:00
Daniel Micay
9a1acce5eb
optimize calloc when zero on free is disabled
2018-09-07 16:33:28 -04:00
Daniel Micay
7ae7abedea
mark more unlikely code paths
2018-09-07 02:53:15 -04:00
Daniel Micay
49af83a817
wrap mutex type to enable future optimization
2018-09-07 01:13:08 -04:00
Daniel Micay
fc2473e7ee
add configuration for canaries
2018-09-07 00:35:08 -04:00
Daniel Micay
96c538d90f
add configuration for zero on free
2018-09-07 00:33:51 -04:00
Daniel Micay
ba3a8b0058
add slot randomization to configuration header
2018-09-07 00:25:02 -04:00
Daniel Micay
bed303a76f
remove unnecessary else branch
2018-09-07 00:22:51 -04:00
Daniel Micay
d398384b90
add header for configuration
2018-09-07 00:17:31 -04:00
Daniel Micay
99d68238d2
implement slab allocation write-after-free check
2018-09-07 00:00:32 -04:00
Daniel Micay
684e63a878
handle pthread_atfork calling into malloc
...
This results in compatibility with the malloc replacement support added
in musl 1.1.20.
2018-09-06 19:48:00 -04:00
Daniel Micay
1be74ec40d
add initial guard slabs implementation
2018-09-06 18:55:24 -04:00
Daniel Micay
cc1e79fdba
abstract metadata allocation to allow guard slabs
2018-09-06 18:45:41 -04:00
Daniel Micay
d8e18e0011
aligned_alloc is now the same as BSD memalign
...
The resolution to DR 460 (which is explicitly included in C17) removed
the requirement for the size to be a multiple of the alignment.
2018-09-06 16:30:22 -04:00
Daniel Micay
0d3c2e1988
no need for a dedicated init rng
2018-09-06 16:02:25 -04:00
Daniel Micay
8624201f06
refresh canary value when allocating free slabs
2018-09-06 15:07:01 -04:00
Daniel Micay
a875951e82
fix build with musl
2018-09-06 14:35:08 -04:00
Daniel Micay
e891b40588
implement Android malloc_disable/malloc_enable API
2018-09-06 14:17:23 -04:00