diff options
author | Maria Matejka <mq@ucw.cz> | 2020-07-22 00:09:15 +0200 |
---|---|---|
committer | Maria Matejka <mq@ucw.cz> | 2021-03-25 16:47:48 +0100 |
commit | 886dd92eeefa070d8db6aaf0245a67f7a9e9b983 (patch) | |
tree | 67911e19951d083c003e212578fae76d93deb01c /lib/resource.h | |
parent | 82f19ba95e421f00a8e99a866a2b8d9bbdba6cdc (diff) |
Slab: head now uses bitmask for used/free nodes info instead of lists
From now, there are no auxiliary pointers stored in the free slab nodes.
This led to strange debugging problems if use-after-free happened in
slab-allocated structures, especially if the structure's first member is
a next pointer.
This also reduces the memory needed by 1 pointer per allocated object.
OTOH, we now rely on pages being aligned to their size's multiple, which
is quite common anyway.
Diffstat (limited to 'lib/resource.h')
-rw-r--r-- | lib/resource.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/resource.h b/lib/resource.h index b56bcff5..48e62985 100644 --- a/lib/resource.h +++ b/lib/resource.h @@ -93,6 +93,10 @@ void sl_free(slab *, void *); void buffer_realloc(void **buf, unsigned *size, unsigned need, unsigned item_size); +/* Allocator of whole pages; for use in slabs and other high-level allocators. */ +u64 get_page_size(void); +void *alloc_page(void); +void free_page(void *); #ifdef HAVE_LIBDMALLOC /* |