Preserve provenance through pointer offsetting

This commit is contained in:
Nathaniel Filardo
2019-04-26 17:23:22 +01:00
parent 00268fc2ad
commit 261249d9cb
3 changed files with 4 additions and 5 deletions

View File

@@ -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;

View File

@@ -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);

View File

@@ -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();
}