Added explicit check of MAC address specified via macaddr option. Multicast MAC addresses are no longer allowed. This fixes bug #495566.
Signed-off-by: Dmitry V. Krivenok <krivenok.dmi...@gmail.com> --- 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..b3a42e5 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..b86ac03 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) ? true : false; +} 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 <stdint.h> +#include <stdbool.h> 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