2
0
mirror of https://gitlab.isc.org/isc-projects/dhcp synced 2025-08-30 05:47:45 +00:00

Handle a relay forward message with an unspecified address in the

link address field.  Previously such a message would cause the
server to crash.  [ISC-Bugs #21992]
This commit is contained in:
Shawn Routhier 2010-10-22 19:50:24 +00:00
parent ad59838e33
commit 4dc5a6b1fa
2 changed files with 23 additions and 2 deletions

View File

@ -129,6 +129,11 @@ work on other platforms. Please report any problems and suggested fixes to
backwards compatible with older lease files not finding a semi-colon
is also accepted. [ISC-Bugs #22303].
! Handle a relay forward message with an unspecified address in the
link address field. Previously such a message would cause the
server to crash. [ISC-Bugs #21992]
CERT: TBA CVE: TBA
Changes since 4.2.0b2
- Add declaration for variable in debug code in alloc.c. [ISC-Bugs #21472]

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2006-2009 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2006-2010 by Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@ -4207,10 +4207,25 @@ shared_network_from_packet6(struct shared_network **shared,
* If there is no link address, we will use the interface
* that this packet came in on to pick the shared_network.
*/
} else {
} else if (packet->interface != NULL) {
status = shared_network_reference(shared,
packet->interface->shared_network,
MDL);
if (packet->dhcpv6_container_packet != NULL) {
log_info("[L2 Relay] No link address in relay packet "
"assuming L2 relay and using receiving "
"interface");
}
} else {
/*
* We shouldn't be able to get here but if there is no link
* address and no interface we don't know where to get the
* pool from log an error and return an error.
*/
log_error("No interface and no link address "
"can't determine pool");
status = DHCP_R_INVALIDARG;
}
return status;
@ -5508,6 +5523,7 @@ dhcpv6_relay_forw(struct data_string *reply_ret, struct packet *packet) {
enc_packet->client_port = packet->client_port;
enc_packet->client_addr = packet->client_addr;
interface_reference(&enc_packet->interface, packet->interface, MDL);
enc_packet->dhcpv6_container_packet = packet;
msg_type = enc_opt_data.data[0];