]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-dhcp-client: reject NAKs from servers that we did not send an offer to (#29290)
authorAlexandre Peixoto Ferreira <alexandref75@gmail.com>
Mon, 25 Sep 2023 02:46:41 +0000 (21:46 -0500)
committerGitHub <noreply@github.com>
Mon, 25 Sep 2023 02:46:41 +0000 (11:46 +0900)
To support multiple DHCP servers in a network.

src/libsystemd-network/sd-dhcp-client.c

index cfdee5d6b4e43e35d9a1a79f72bf8c1596ab7b06..79f308f6528f339ef7ab18150302269a2722beff 100644 (file)
@@ -1591,9 +1591,14 @@ static int client_parse_message(
         case DHCP_STATE_REQUESTING:
         case DHCP_STATE_RENEWING:
         case DHCP_STATE_REBINDING:
-                if (r == DHCP_NAK)
+                if (r == DHCP_NAK) {
+                        if (client->lease && client->lease->server_address != lease->server_address)
+                                    return log_dhcp_client_errno(client, SYNTHETIC_ERRNO(ENOMSG),
+                                                                 "NAK from unexpected server, ignoring: %s",
+                                                                 strna(error_message));
                         return log_dhcp_client_errno(client, SYNTHETIC_ERRNO(EADDRNOTAVAIL),
                                                      "NAK: %s", strna(error_message));
+                }
                 if (r != DHCP_ACK)
                         return log_dhcp_client_errno(client, SYNTHETIC_ERRNO(ENOMSG),
                                                      "received message was not an ACK, ignoring.");