]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: do not set invalid MAC address for non-ethernet interface
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 13 Jul 2022 20:23:01 +0000 (05:23 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 13 Jul 2022 21:52:07 +0000 (06:52 +0900)
src/network/networkd-link.c
src/network/networkd-ndisc.c
src/network/networkd-radv.c

index 29a5609483a5ab3921c58978654d461980f4f2d0..b314f5db8f2b194ddd0dc62a0f8d9aca30dfc132 100644 (file)
@@ -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");
index 8ace451f7fde861455ee82d0fa958736f685e8fe..2b02978ab47c8fa9c0f8082e7399d83c658da393 100644 (file)
@@ -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)
index 26448b518d3dc4435e9fa9a93bfbea3c8dd1a075..32ee7aa7abfaceff868360138cad7a719538fbef 100644 (file)
@@ -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);