From: Peter Krempa Date: Thu, 2 Jul 2015 14:46:46 +0000 (+0200) Subject: util: bitmap: Don't alloc overly large binary bitmaps X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=e8c5f61e91025f244bb022b1774a3fc6484625f8;p=libvirt.git util: bitmap: Don't alloc overly large binary bitmaps Optimize the virBitmap to array-of-char bitmap conversion by skipping trailing zero bytes. This also fixes a regression when requesting iothread information from a live VM since after commit 825df8c3158cfaf5f398418471f10f4ff3c3515a the bitmap returned from virProcessGetAffinity is too big to be formatted properly via RPC. A user would get the following error: error: Unable to get domain IOThreads information error: Unable to encode message payload Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1238589 --- diff --git a/src/util/virbitmap.c b/src/util/virbitmap.c index 9abc8073dc..4d270a910c 100644 --- a/src/util/virbitmap.c +++ b/src/util/virbitmap.c @@ -498,9 +498,12 @@ virBitmapPtr virBitmapNewData(void *data, int len) */ int virBitmapToData(virBitmapPtr bitmap, unsigned char **data, int *dataLen) { - int len; + ssize_t len; - len = (bitmap->max_bit + CHAR_BIT - 1) / CHAR_BIT; + if ((len = virBitmapLastSetBit(bitmap)) < 0) + len = 1; + else + len = (len + CHAR_BIT) / CHAR_BIT; if (VIR_ALLOC_N(*data, len) < 0) return -1;