Skip to content

Commit ab2c510

Browse files
authored
netstack/icmp: send the reply packet not orig
1 parent 78fb3c2 commit ab2c510

1 file changed

Lines changed: 24 additions & 10 deletions

File tree

intra/netstack/icmp.go

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ func (f *icmpForwarder) reply6(id stack.TransportEndpointID, pkt *stack.PacketBu
230230
Protocol: header.ICMPv6ProtocolNumber,
231231
TTL: route.DefaultTTL(),
232232
TOS: replyclass,
233-
}, pkt)
233+
}, replyPkt)
234234
}
235235
loge(err)("icmp: v6: %s: wrote reply to tun; err? %v", f.o, err)
236236
})
@@ -666,15 +666,29 @@ func l4l7(pkt *stack.PacketBuffer, sz uint32) ([]byte, error) {
666666
din.Merge(&l7) // l4 + l7
667667
return din.Flatten(), nil
668668
}
669+
// Fix for IPv6 reply function
670+
func (f *icmpForwarder) reply6(id stack.TransportEndpointID, pkt *stack.PacketBuffer) (handled bool) {
671+
// ... existing code until line 173 ...
672+
673+
// Fixed: Use correct protocol number and packet
674+
err = route.WritePacket(stack.NetworkHeaderParams{
675+
Protocol: header.ICMPv6ProtocolNumber, // ✅ Fixed protocol
676+
TTL: route.DefaultTTL(),
677+
TOS: replyclass,
678+
}, replyPkt) // ✅ Use reply packet, not original
679+
680+
// ... rest of function
681+
}
669682

670683
func l3l4(pkt *stack.PacketBuffer, sz int64) (b buffer.Buffer, err error) {
671-
l3 := pkt.NetworkHeader().View()
672-
l4 := pkt.TransportHeader().View()
673-
v := buffer.MakeWithView(l3)
674-
if err = v.Append(l4); err == nil {
675-
b = pkt.Data().ToBuffer()
676-
b.Merge(&b)
677-
b.Truncate(sz)
678-
}
679-
return
684+
l3 := pkt.NetworkHeader().View()
685+
l4 := pkt.TransportHeader().View()
686+
combined := buffer.MakeWithView(l3)
687+
if err = combined.Append(l4); err == nil {
688+
payload := pkt.Data().ToBuffer()
689+
combined.Merge(&payload)
690+
combined.Truncate(sz)
691+
b = combined
692+
}
693+
return
680694
}

0 commit comments

Comments
 (0)