summaryrefslogtreecommitdiff
path: root/transient_heap.c
diff options
context:
space:
mode:
authorAaron Patterson <tenderlove@ruby-lang.org>2020-09-28 09:53:30 -0700
committerAaron Patterson <tenderlove@ruby-lang.org>2020-09-28 10:18:15 -0700
commit85e9cc2c8721badb5c6a7f80518342194d5988b4 (patch)
tree88e9c04d6a2c6534eff7e078911fa34919f5cce7 /transient_heap.c
parent0555bd8435d352a24bab1e03a7879b9abcc34b88 (diff)
Unpoison THEAP header before reading
Another ASAN fix. THEAP header is poisoned, so we need to un-poison before reading
Diffstat (limited to 'transient_heap.c')
-rw-r--r--transient_heap.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/transient_heap.c b/transient_heap.c
index 809a2375b4..391dd59520 100644
--- a/transient_heap.c
+++ b/transient_heap.c
@@ -716,6 +716,7 @@ transient_heap_block_evacuate(struct transient_heap* theap, struct transient_hea
while (marked_index >= 0) {
struct transient_alloc_header *header = alloc_header(block, marked_index);
+ asan_unpoison_memory_region(header, sizeof *header, true);
VALUE obj = header->obj;
TH_ASSERT(header->magic == TRANSIENT_HEAP_ALLOC_MAGIC);
if (header->magic != TRANSIENT_HEAP_ALLOC_MAGIC) rb_bug("rb_transient_heap_mark: wrong header %s\n", rb_obj_info(obj));
@@ -744,6 +745,7 @@ transient_heap_block_evacuate(struct transient_heap* theap, struct transient_hea
header->obj = Qundef; /* for debug */
}
marked_index = header->next_marked_index;
+ asan_poison_memory_region(header, sizeof *header);
}
}