From 535466fdfd8f64bfb2a6488254b79da954867c92 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Sun, 14 Oct 2018 18:57:59 -0400 Subject: [PATCH] avoid undefined shifts with multi-word bitmaps --- malloc.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/malloc.c b/malloc.c index 2920926..abb9244 100644 --- a/malloc.c +++ b/malloc.c @@ -199,15 +199,18 @@ static struct slab_metadata *alloc_metadata(struct size_class *c, size_t slab_si } static void set_slot(struct slab_metadata *metadata, size_t index) { - metadata->bitmap[index / 64] |= 1UL << index; + size_t bucket = index / 64; + metadata->bitmap[bucket] |= 1UL << (index - bucket * 64); } static void clear_slot(struct slab_metadata *metadata, size_t index) { - metadata->bitmap[index / 64] &= ~(1UL << index); + size_t bucket = index / 64; + metadata->bitmap[bucket] &= ~(1UL << (index - bucket * 64)); } static bool get_slot(struct slab_metadata *metadata, size_t index) { - return (metadata->bitmap[index / 64] >> index) & 1UL; + size_t bucket = index / 64; + return (metadata->bitmap[bucket] >> (index - bucket * 64)) & 1UL; } static u64 get_mask(size_t slots) {