Preserve provenance through pointer offsetting
This commit is contained in:
@@ -43,8 +43,7 @@ namespace snmalloc
|
||||
void* head = meta.head;
|
||||
|
||||
assert(rsize == sizeclass_to_size(meta.sizeclass));
|
||||
meta.debug_slab_invariant(this);
|
||||
assert(sl.get_head() == (SlabLink*)((size_t)this + meta.link));
|
||||
assert(sl.get_head() == (SlabLink*)pointer_offset(this, meta.link));
|
||||
assert(!meta.is_full());
|
||||
|
||||
void* p = nullptr;
|
||||
|
||||
@@ -173,7 +173,7 @@ void test_external_pointer()
|
||||
|
||||
for (size_t offset = 0; offset < size; offset += 17)
|
||||
{
|
||||
void* p2 = (void*)((size_t)p1 + offset);
|
||||
void* p2 = pointer_offset(p1, offset);
|
||||
void* p3 = Alloc::external_pointer(p2);
|
||||
void* p4 = Alloc::external_pointer<End>(p2);
|
||||
UNUSED(p3);
|
||||
|
||||
@@ -72,8 +72,8 @@ namespace test
|
||||
size_t* external_ptr = objects[oid];
|
||||
size_t size = *external_ptr;
|
||||
size_t offset = (size >> 4) * (rand & 15);
|
||||
size_t interior_ptr = ((size_t)external_ptr) + offset;
|
||||
void* calced_external = Alloc::external_pointer((void*)interior_ptr);
|
||||
void* interior_ptr = pointer_offset(external_ptr, offset);
|
||||
void* calced_external = Alloc::external_pointer(interior_ptr);
|
||||
if (calced_external != external_ptr)
|
||||
abort();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user