File 19a18bf7_port.patch of Package freeradius-server.14503

commit 19a18bf7c8af649c9e9742fb6a046f6aff639866
Author: Alan T. DeKok <aland@freeradius.org>
Date:   Mon Jul 3 15:42:35 2017 -0400

    FR-GV-304 - check for option overflowing the packet

Index: freeradius-server-3.0.3/src/modules/proto_dhcp/dhcp.c
===================================================================
--- freeradius-server-3.0.3.orig/src/modules/proto_dhcp/dhcp.c
+++ freeradius-server-3.0.3/src/modules/proto_dhcp/dhcp.c
@@ -486,6 +486,24 @@ static int decode_tlv(RADIUS_PACKET *pac
 
 	p = data;
 	while (p < (data + data_len)) {
+		/*
+		 *      Not enough room for the option header, it's a
+		 *      bad packet.
+		 */
+		if ((p + 2) > (data + data_len)) {
+			pairfree(&head);
+			goto make_tlv;
+		}
+
+		/*
+		 *      Not enough room for the option header + data,
+		 *      it's a bad packet.
+		 */
+		if ((p + 2 + p[1]) > (data + data_len)) {
+			pairfree(&head);
+			goto make_tlv;
+		}
+
 		vp = paircreate(packet, tlv->da->attr | (p[0] << 8), DHCP_MAGIC_VENDOR);
 		if (!vp) {
 			pairfree(&head);
openSUSE Build Service is sponsored by