summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2018-09-10 15:45:04 +0200
committerThomas Haller <thaller@redhat.com>2018-09-11 13:20:25 +0200
commitbc571fe3e00265c4746bf924b17c62b080d60b73 (patch)
tree4175236aafced67f51c153f34ffb12cac8a323a6
parent725a753d1f5d9f2598e6ce17d33b2d612a7365dd (diff)
downloadNetworkManager-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.c17
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);