From e8fa75ce061c1dddd607a8b1fd77ba1f09f4b9e0 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 10 Sep 2018 15:45:04 +0200 Subject: [PATCH] dhcp: abort DHCP on devices without MAC address early Internal DHCPv4 client requires a valid MAC address for functioning. Just always require a MAC address to start DHCP, both v4 and v6. We have no MAC address for example on Layer3 devices like tun or wireguard. Also, before "34af574d58 systemd/dhcp: fix assertion starting DHCP client without MAC address", if we tired to start sd_dhcp_client without setting a MAC address, an assertion was triggered. --- src/dhcp/nm-dhcp-manager.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/dhcp/nm-dhcp-manager.c b/src/dhcp/nm-dhcp-manager.c index 2fa86f7c98..6c71af9d0b 100644 --- a/src/dhcp/nm-dhcp-manager.c +++ b/src/dhcp/nm-dhcp-manager.c @@ -178,6 +178,7 @@ client_start (NMDhcpManager *self, NMDhcpManagerPrivate *priv; NMDhcpClient *client; gboolean success = FALSE; + gsize hwaddr_len; g_return_val_if_fail (NM_IS_DHCP_MANAGER (self), NULL); g_return_val_if_fail (ifindex > 0, NULL); @@ -185,6 +186,22 @@ client_start (NMDhcpManager *self, g_return_val_if_fail (!dhcp_client_id || g_bytes_get_size (dhcp_client_id) >= 2, NULL); g_return_val_if_fail (!error || !*error, NULL); + if (!hwaddr) { + nm_utils_error_set (error, + NM_UTILS_ERROR_UNKNOWN, + "missing MAC address"); + return NULL; + } + + hwaddr_len = g_bytes_get_size (hwaddr); + if ( hwaddr_len == 0 + || hwaddr_len > NM_UTILS_HWADDR_LEN_MAX) { + nm_utils_error_set (error, + NM_UTILS_ERROR_UNKNOWN, + "invalid MAC address"); + g_return_val_if_reached (NULL) ; + } + priv = NM_DHCP_MANAGER_GET_PRIVATE (self); nm_assert (priv->client_factory);