From 3be64aa462642de9fbe9f95536f8d167c19994bb Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 14 Jul 2022 05:23:01 +0900 Subject: [PATCH] network: do not set invalid MAC address for non-ethernet interface --- src/network/networkd-link.c | 2 +- src/network/networkd-ndisc.c | 8 +++++--- src/network/networkd-radv.c | 11 ++++++++--- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 29a5609483a..b314f5db8f2 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -2192,7 +2192,7 @@ static int link_update_hardware_address(Link *link, sd_netlink_message *message) if (r < 0) return log_link_debug_errno(link, r, "Could not update MAC address for Router Advertisement: %m"); - if (link->ndisc) { + if (link->ndisc && link->hw_addr.length == ETH_ALEN) { r = sd_ndisc_set_mac(link->ndisc, &link->hw_addr.ether); if (r < 0) return log_link_debug_errno(link, r, "Could not update MAC for NDisc: %m"); diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c index 8ace451f7fd..2b02978ab47 100644 --- a/src/network/networkd-ndisc.c +++ b/src/network/networkd-ndisc.c @@ -1054,9 +1054,11 @@ static int ndisc_configure(Link *link) { if (r < 0) return r; - r = sd_ndisc_set_mac(link->ndisc, &link->hw_addr.ether); - if (r < 0) - return r; + if (link->hw_addr.length == ETH_ALEN) { + r = sd_ndisc_set_mac(link->ndisc, &link->hw_addr.ether); + if (r < 0) + return r; + } r = sd_ndisc_set_ifindex(link->ndisc, link->ifindex); if (r < 0) diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c index 26448b518d3..32ee7aa7abf 100644 --- a/src/network/networkd-radv.c +++ b/src/network/networkd-radv.c @@ -458,9 +458,11 @@ static int radv_configure(Link *link) { if (r < 0) return r; - r = sd_radv_set_mac(link->radv, &link->hw_addr.ether); - if (r < 0) - return r; + if (link->hw_addr.length == ETH_ALEN) { + r = sd_radv_set_mac(link->radv, &link->hw_addr.ether); + if (r < 0) + return r; + } r = sd_radv_set_ifindex(link->radv, link->ifindex); if (r < 0) @@ -518,6 +520,9 @@ int radv_update_mac(Link *link) { if (!link->radv) return 0; + if (link->hw_addr.length != ETH_ALEN) + return 0; + restart = sd_radv_is_running(link->radv); r = sd_radv_stop(link->radv); -- 2.47.3