diff options
author | Thomas Haller <thaller@redhat.com> | 2018-09-10 15:45:04 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2018-09-11 13:20:25 +0200 |
commit | bc571fe3e00265c4746bf924b17c62b080d60b73 (patch) | |
tree | 4175236aafced67f51c153f34ffb12cac8a323a6 | |
parent | 725a753d1f5d9f2598e6ce17d33b2d612a7365dd (diff) | |
download | NetworkManager-th/dhcp-error-reason.tar.gz |
dhcp: abort DHCP on devices without MAC address earlyth/dhcp-error-reason
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, if we try to start sd_dhcp_client without setting a MAC address,
previously we would have triggered an assertion.
-rw-r--r-- | src/dhcp/nm-dhcp-manager.c | 17 |
1 files changed, 17 insertions, 0 deletions
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); |