/* Pointer to the current position in the frame */
uint8_t *end = dhcp_packet;
uint16_t l4_len;
+ size_t header_len;
/* fill in Ethernet layer (L2) */
eth_hdr = (ethernet_header_t *)dhcp_packet;
/* DHCP layer (L7) */
/* just copy what FreeRADIUS has encoded for us. */
+ header_len = (size_t)(end - dhcp_packet);
+ if (packet->data_len > sizeof(dhcp_packet) - header_len) {
+ fr_strerror_printf("DHCP packet too large (%zu bytes), maximum %zu bytes",
+ packet->data_len, sizeof(dhcp_packet) - header_len);
+ return -1;
+ }
memcpy(end, packet->data, packet->data_len);
/* UDP checksum is done here */