From: Hamayama Date: Tue, 20 Jun 2017 08:56:20 +0000 (+0300) Subject: Fix null dereference in reclaim_block if DONT_ADD_BYTE_AT_END X-Git-Tag: v7.4.6~67 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=40111a87689b45fe2af9bc1d257dd15247b2d235;p=gc Fix null dereference in reclaim_block if DONT_ADD_BYTE_AT_END (Cherry-pick commit ddde4e5 from 'release-7_6' branch.) Issue #167 (bdwgc). * reclaim.c (GC_reclaim_block): If ok->ok_reclaim_list is null then do not update hhdr->hb_next (and *rlh). --- diff --git a/reclaim.c b/reclaim.c index f2bc8b29..a08c4b1b 100644 --- a/reclaim.c +++ b/reclaim.c @@ -439,9 +439,13 @@ STATIC void GC_reclaim_block(struct hblk *hbp, word report_if_found) } } else if (GC_find_leak || !GC_block_nearly_full(hhdr)) { /* group of smaller objects, enqueue the real work */ - rlh = &(ok -> ok_reclaim_list[BYTES_TO_GRANULES(sz)]); - hhdr -> hb_next = *rlh; - *rlh = hbp; + rlh = ok -> ok_reclaim_list; + + if (rlh != NULL) { + rlh += BYTES_TO_GRANULES(sz); + hhdr -> hb_next = *rlh; + *rlh = hbp; + } } /* else not worth salvaging. */ /* We used to do the nearly_full check later, but we */ /* already have the right cache context here. Also */