From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35464) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VXADQ-00081J-Np for qemu-devel@nongnu.org; Fri, 18 Oct 2013 09:35:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VXADK-0003lL-9q for qemu-devel@nongnu.org; Fri, 18 Oct 2013 09:35:44 -0400 Received: from mx1.redhat.com ([209.132.183.28]:17240) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VXADK-0003jk-1M for qemu-devel@nongnu.org; Fri, 18 Oct 2013 09:35:38 -0400 From: Stefan Hajnoczi Date: Fri, 18 Oct 2013 15:35:14 +0200 Message-Id: <1382103314-21608-5-git-send-email-stefanha@redhat.com> In-Reply-To: <1382103314-21608-1-git-send-email-stefanha@redhat.com> References: <1382103314-21608-1-git-send-email-stefanha@redhat.com> Subject: [Qemu-devel] [PULL 4/4] net: disallow to specify multicast MAC address List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi , Dmitry Krivenok , Anthony Liguori From: Dmitry Krivenok Added explicit check of MAC address specified via macaddr option. Multicast MAC addresses are no longer allowed. This fixes bug lp#495566. Signed-off-by: Dmitry V. Krivenok Signed-off-by: Stefan Hajnoczi --- net/net.c | 5 +++++ net/util.c | 5 +++++ net/util.h | 2 ++ 3 files changed, 12 insertions(+) diff --git a/net/net.c b/net/net.c index c330c9a..009dece 100644 --- a/net/net.c +++ b/net/net.c @@ -689,6 +689,11 @@ static int net_init_nic(const NetClientOptions *opts, const char *name, error_report("invalid syntax for ethernet address"); return -1; } + if (nic->has_macaddr && + net_macaddr_is_multicast(nd->macaddr.a)) { + error_report("NIC cannot have multicast MAC address (odd 1st byte)"); + return -1; + } qemu_macaddr_default_if_unset(&nd->macaddr); if (nic->has_vectors) { diff --git a/net/util.c b/net/util.c index 7e95076..0177bb3 100644 --- a/net/util.c +++ b/net/util.c @@ -58,3 +58,8 @@ int net_parse_macaddr(uint8_t *macaddr, const char *p) return 0; } + +bool net_macaddr_is_multicast(uint8_t *macaddr) +{ + return macaddr[0] % 2; +} diff --git a/net/util.h b/net/util.h index 10c7da9..4581cb7 100644 --- a/net/util.h +++ b/net/util.h @@ -26,7 +26,9 @@ #define QEMU_NET_UTIL_H #include +#include int net_parse_macaddr(uint8_t *macaddr, const char *p); +bool net_macaddr_is_multicast(uint8_t *macaddr); #endif /* QEMU_NET_UTIL_H */ -- 1.8.3.1