From bf913385ae0a3671cb729010a1aa4ec3e700d7bb Mon Sep 17 00:00:00 2001 From: Laine Stump Date: Thu, 16 Jun 2016 13:03:00 -0400 Subject: [PATCH] util: fix missing broadcast address in bridge and tap device IP addresses Commit b3d069872ce53eb added peer address setting to the low level virNetDevSetIPAddress() function, but ended up causing a segfault in cases where the caller passed NULL for peer address. Commit a3510e33d33e52c fixed the segfault, but managed to cause us to skip setting the broadcast address when setting an interface's IP address. The result is that the broadcast address is 0.0.0.0 for all libvirt-created bridges (and interfaces in lxc containers with IP addresses set by libvirt). This was reported on the mailing list: https://www.redhat.com/archives/libvir-list/2016-June/msg00027.html but I was too busy to investigate at the time. I found it by accident today while refactoring virNetDevSetIPAddress(). Since this regression is present in the 1.3.5 release, I'm sending the bugfix as a separate patch from my larger refactoring patchset. --- src/util/virnetdev.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c index 925b41fe4c..5a4ccc62e3 100644 --- a/src/util/virnetdev.c +++ b/src/util/virnetdev.c @@ -1129,7 +1129,8 @@ int virNetDevSetIPAddress(const char *ifname, unsigned int recvbuflen; /* The caller needs to provide a correct address */ - if (VIR_SOCKET_ADDR_FAMILY(addr) == AF_INET && peer && !VIR_SOCKET_ADDR_VALID(peer)) { + if (VIR_SOCKET_ADDR_FAMILY(addr) == AF_INET && + !(peer && VIR_SOCKET_ADDR_VALID(peer))) { /* compute a broadcast address if this is IPv4 */ if (VIR_ALLOC(broadcast) < 0) return -1;