diff --git a/src/libcharon/plugins/dhcp/dhcp_socket.c b/src/libcharon/plugins/dhcp/dhcp_socket.c index 2474a0b10..f7e7ba1e1 100644 --- a/src/libcharon/plugins/dhcp/dhcp_socket.c +++ b/src/libcharon/plugins/dhcp/dhcp_socket.c @@ -641,14 +641,14 @@ CALLBACK(receive_dhcp, void, int fd, chunk_t pkt) { dhcp_packet_t *packet = (dhcp_packet_t*)pkt.ptr; - size_t optlen, origoptlen, optpos = 0, optsize; + size_t optoffset, optlen, origoptlen, optpos = 0, optsize; dhcp_option_t *option; - if (pkt.len >= sizeof(struct ip) + sizeof(struct udphdr) + - offsetof(dhcp_t, options)) + optoffset = sizeof(struct ip) + sizeof(struct udphdr) + + offsetof(dhcp_t, options); + if (pkt.len >= optoffset) { - origoptlen = optlen = pkt.len - sizeof(struct ip) + - sizeof(struct udphdr) + offsetof(dhcp_t, options); + origoptlen = optlen = pkt.len - optoffset; while (optlen > sizeof(dhcp_option_t)) { option = (dhcp_option_t*)&packet->dhcp.options[optpos];