In function bitmap_allocate1(), the last "unsigned long" in bitmap will be set to all 0-bits when (n_bits % BITMAP_ULONG_BITS == 0), it actually should be set to all 1-bits.
Signed-off-by: ZhengLingyun <konghuaru...@163.com> --- lib/bitmap.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/bitmap.c b/lib/bitmap.c index d607526..ac568e9 100644 --- a/lib/bitmap.c +++ b/lib/bitmap.c @@ -24,6 +24,7 @@ bitmap_allocate1(size_t n_bits) { size_t n_bytes = bitmap_n_bytes(n_bits); size_t n_longs = bitmap_n_longs(n_bits); + size_t r_bits = n_bits % BITMAP_ULONG_BITS; unsigned long *bitmap; /* Allocate and initialize most of the bitmap. */ @@ -32,7 +33,9 @@ bitmap_allocate1(size_t n_bits) /* Ensure that the last "unsigned long" in the bitmap only has as many * 1-bits as there actually should be. */ - bitmap[n_longs - 1] = (1UL << (n_bits % BITMAP_ULONG_BITS)) - 1; + if (r_bits) { + bitmap[n_longs - 1] = (1UL << r_bits) - 1; + } return bitmap; } -- 1.8.1.4
_______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev