[libvirt] [PATCH 1/2] virdbus: don't force users to pass int for bool values
Ian Campbell
Ian.Campbell at citrix.com
Mon Nov 24 09:43:51 UTC 2014
On Fri, 2014-11-21 at 17:16 -0700, Eric Blake wrote:
> On 11/20/2014 04:17 PM, Eric Blake wrote:
> > On 11/20/2014 08:12 AM, Conrad Meyer wrote:
> >> Hi Eric,
> >>
> >> I think this change breaks build on FreeBSD:
> >>
> >> CC util/libvirt_util_la-virdbus.lo
> >> util/virdbus.c:956:13: error: cast from 'bool *' to 'dbus_bool_t *' (aka 'unsigned int *') increases required alignment from 1 to 4 [-Werror,-Wcast-align]
> >> GET_NEXT_VAL(dbus_bool_t, bool_val, bool, "%d");
> >> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >> util/virdbus.c:858:17: note: expanded from macro 'GET_NEXT_VAL'
> >> x = (dbustype *)(*xptrptr + (*narrayptr - 1)); \
> >> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 error generated.
> >
> > Valid complaint, so I'll have to figure something out to avoid it. :(
> > Thanks for the heads up.
>
> Thanks again for flagging this!
>
> We had a pre-existing bug. Even something like "a&n" was broken on
> encoding, because even though type 'n' (int16_t) promotes to a full
> 'int' when parsed via varargs, passing an array of shorts and then
> dereferencing it via (int*) will read beyond array bounds. We had a
> hole in our testsuite for never testing arrayref with sub-int types,
> even before my commit added 'bool *' to the list of sub-int types that
> we now need to support.
I'm, guessing that this is the same underlying issue as:
util/virdbus.c: In function 'virDBusMessageIterDecode':
util/virdbus.c:956:346: error: cast increases required alignment of target type [-Werror=cast-align]
which we are seeing in the Xen automated tests [0, 1] (on armhf only,
probably compiler dependent?).
Ian.
[0] http://www.chiark.greenend.org.uk/~xensrcts/logs/31787/build-armhf-libvirt/5.ts-libvirt-build.log
[1] http://www.chiark.greenend.org.uk/~xensrcts/logs/31787/build-armhf-libvirt/info.html
More information about the libvir-list
mailing list