Add a missing asan_unpoisoning_p in gc_set_candidate_object_i

It walks the heap, and checks for T_NONE and T_ZOMBIE objects, so it
needs to unpoison these slots before accessing them when ASAN is
enabled.
This commit is contained in:
KJ Tsanaktsidis 2024-03-12 18:24:07 +11:00
parent 75234beb24
commit dc9d2455b6

2
gc.c
View File

@ -9362,6 +9362,7 @@ gc_set_candidate_object_i(void *vstart, void *vend, size_t stride, void *data)
rb_objspace_t *objspace = &rb_objspace; rb_objspace_t *objspace = &rb_objspace;
VALUE v = (VALUE)vstart; VALUE v = (VALUE)vstart;
for (; v != (VALUE)vend; v += stride) { for (; v != (VALUE)vend; v += stride) {
asan_unpoisoning_object(v) {
switch (BUILTIN_TYPE(v)) { switch (BUILTIN_TYPE(v)) {
case T_NONE: case T_NONE:
case T_ZOMBIE: case T_ZOMBIE:
@ -9377,6 +9378,7 @@ gc_set_candidate_object_i(void *vstart, void *vend, size_t stride, void *data)
} }
} }
} }
}
return 0; return 0;
} }