summaryrefslogtreecommitdiffhomepage
path: root/dhcpv4/nclient4/conn_linux.go
diff options
context:
space:
mode:
Diffstat (limited to 'dhcpv4/nclient4/conn_linux.go')
-rw-r--r--dhcpv4/nclient4/conn_linux.go15
1 files changed, 15 insertions, 0 deletions
diff --git a/dhcpv4/nclient4/conn_linux.go b/dhcpv4/nclient4/conn_linux.go
index 2fe69ce..6cdb071 100644
--- a/dhcpv4/nclient4/conn_linux.go
+++ b/dhcpv4/nclient4/conn_linux.go
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+//go:build go1.12
// +build go1.12
package nclient4
@@ -98,12 +99,26 @@ func (upc *BroadcastRawUDPConn) ReadFrom(b []byte) (int, net.Addr, error) {
buf := uio.NewBigEndianBuffer(pkt)
// To read the header length, access data directly.
+ if !buf.Has(ipv4MinimumSize) {
+ continue
+ }
+
ipHdr := ipv4(buf.Data())
+
+ if !buf.Has(int(ipHdr.headerLength())) {
+ continue
+ }
+
ipHdr = ipv4(buf.Consume(int(ipHdr.headerLength())))
if ipHdr.transportProtocol() != udpProtocolNumber {
continue
}
+
+ if !buf.Has(udpHdrLen) {
+ continue
+ }
+
udpHdr := udp(buf.Consume(udpHdrLen))
addr := &net.UDPAddr{