summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/net/udp/dhcp.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/net/udp/dhcp.c b/src/net/udp/dhcp.c
index 2ef8c084d..40670232b 100644
--- a/src/net/udp/dhcp.c
+++ b/src/net/udp/dhcp.c
@@ -845,16 +845,20 @@ static void dhcp_rx_proxydhcpack ( struct dhcp_session *dhcp,
struct in_addr ack_server_id = { 0 };
int rc;
- /* Verify server ID matches */
+ /* Verify server ID matches, if present */
assert ( dhcp->proxydhcpoffer != NULL );
- dhcppkt_fetch ( &dhcp->proxydhcpoffer->dhcppkt, DHCP_SERVER_IDENTIFIER,
- &offer_server_id, sizeof ( offer_server_id ) );
- dhcppkt_fetch ( &proxydhcpack->dhcppkt, DHCP_SERVER_IDENTIFIER,
- &ack_server_id, sizeof ( ack_server_id ) );
- if ( offer_server_id.s_addr != ack_server_id.s_addr ) {
- DBGC ( dhcp, "DHCP %p ignoring ProxyDHCPACK with wrong server "
- "ID %s\n", dhcp, inet_ntoa ( ack_server_id ) );
- return;
+ if ( ( rc = dhcppkt_fetch ( &proxydhcpack->dhcppkt,
+ DHCP_SERVER_IDENTIFIER, &ack_server_id,
+ sizeof ( ack_server_id ) ) ) > 0 ) {
+ dhcppkt_fetch ( &dhcp->proxydhcpoffer->dhcppkt,
+ DHCP_SERVER_IDENTIFIER, &offer_server_id,
+ sizeof ( offer_server_id ) );
+ if ( offer_server_id.s_addr != ack_server_id.s_addr ) {
+ DBGC ( dhcp, "DHCP %p ignoring ProxyDHCPACK with "
+ "wrong server ID %s\n",
+ dhcp, inet_ntoa ( ack_server_id ) );
+ return;
+ }
}
/* Rename settings */