Skip to content

Commit 6ab1666

Browse files
committed
netstack/icmp: forward iff src, dst are valid ips
1 parent 3f28bbf commit 6ab1666

1 file changed

Lines changed: 10 additions & 5 deletions

File tree

intra/netstack/icmpecho.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -159,14 +159,19 @@ func (r *icmpResponder) forward(h *icmpForwarder, pkt *stack.PacketBuffer, src,
159159
pkt.IncRef()
160160
defer pkt.DecRef()
161161

162-
var id stack.TransportEndpointID
163162
// local is dst / remote is src; see: netstack/icmp/icmp.go:func (h *icmpForwarder) reply4
164163
// and netstack/icmp/icmp.go:func (h *icmpForwarder) reply6
165-
id.LocalAddress = tcpip.AddrFrom16Slice(dst.Addr().AsSlice())
166-
id.RemoteAddress = tcpip.AddrFrom16Slice(src.Addr().AsSlice())
164+
local := dst.Addr().AsSlice()
165+
remote := src.Addr().AsSlice()
166+
if len(local) == 0 || len(remote) == 0 {
167+
log.W("icmp: responder: forward: (sz: %d) empty addr; %s => %s", pkt.Size(), src, dst)
168+
return false
169+
}
170+
171+
var id stack.TransportEndpointID
172+
id.LocalAddress = tcpip.AddrFromSlice(local)
173+
id.RemoteAddress = tcpip.AddrFromSlice(remote)
167174
// ICMP does not use ports, so they remain zero.
168-
id.LocalPort = 0
169-
id.RemotePort = 0
170175

171176
switch pkt.NetworkProtocolNumber {
172177
case header.IPv4ProtocolNumber:

0 commit comments

Comments
 (0)