hbitmap: Fix shifts of constants by granularity
commit6725f887acc023fc8850d62e1aaef083fdb4f3d4
authorMax Reitz <mreitz@redhat.com>
Tue, 15 Nov 2016 22:47:32 +0000 (15 23:47 +0100)
committerFam Zheng <famz@redhat.com>
Tue, 29 Nov 2016 09:46:36 +0000 (29 17:46 +0800)
tree7556b8a8b2fa801b3127444b9b9488ab527c1e08
parent00227fefd2059464cd2f59aed29944874c630e2f
hbitmap: Fix shifts of constants by granularity

An hbitmap's granularity may be anything from 0 to 63, so when shifting
constants by its value, they should not be plain ints.

Even having changed the types, hbitmap_serialization_granularity() still
tries to shift 64 to the right by the granularity. This operation is
undefined if the granularity is greater than 57. Adding an assertion is
fine for now, because serializing is done only in tests so far, but this
means that only bitmaps with a granularity below 58 can be serialized
and we should thus add a hbitmap_is_serializable() function later.

One of the two places touched in this patch uses
QEMU_ALIGN_UP(x, 1 << y). We can use ROUND_UP() there, since the second
parameter is obviously a power of two.

Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-Id: <20161115224732.1334-1-mreitz@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Fam Zheng <famz@redhat.com>
util/hbitmap.c