mirror of
https://github.com/cwinfo/yggdrasil-go.git
synced 2024-11-22 23:41:35 +00:00
check packet length before checking if it's an ipv6 packet, and add some trace level logging whenever a packet is rejected for being too short to parse
This commit is contained in:
parent
a87581b0fa
commit
e16d3efb0a
@ -148,6 +148,11 @@ func (tun *TunAdapter) _handlePacket(recvd []byte, err error) {
|
|||||||
// Offset the buffer from now on so that we can ignore ethernet frames if
|
// Offset the buffer from now on so that we can ignore ethernet frames if
|
||||||
// they are present
|
// they are present
|
||||||
bs := recvd[offset:]
|
bs := recvd[offset:]
|
||||||
|
// Check if the packet is long enough to detect if it's an ICMP packet or not
|
||||||
|
if len(bs) < 7 {
|
||||||
|
tun.log.Traceln("TUN/TAP iface read undersized unknown packet, length:", len(bs))
|
||||||
|
return
|
||||||
|
}
|
||||||
// If we detect an ICMP packet then hand it to the ICMPv6 module
|
// If we detect an ICMP packet then hand it to the ICMPv6 module
|
||||||
if bs[6] == 58 {
|
if bs[6] == 58 {
|
||||||
// Found an ICMPv6 packet - we need to make sure to give ICMPv6 the full
|
// Found an ICMPv6 packet - we need to make sure to give ICMPv6 the full
|
||||||
@ -175,6 +180,7 @@ func (tun *TunAdapter) _handlePacket(recvd []byte, err error) {
|
|||||||
if bs[0]&0xf0 == 0x60 {
|
if bs[0]&0xf0 == 0x60 {
|
||||||
// Check if we have a fully-sized IPv6 header
|
// Check if we have a fully-sized IPv6 header
|
||||||
if len(bs) < 40 {
|
if len(bs) < 40 {
|
||||||
|
tun.log.Traceln("TUN/TAP iface read undersized ipv6 packet, length:", len(bs))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// Check the packet size
|
// Check the packet size
|
||||||
@ -188,6 +194,7 @@ func (tun *TunAdapter) _handlePacket(recvd []byte, err error) {
|
|||||||
} else if bs[0]&0xf0 == 0x40 {
|
} else if bs[0]&0xf0 == 0x40 {
|
||||||
// Check if we have a fully-sized IPv4 header
|
// Check if we have a fully-sized IPv4 header
|
||||||
if len(bs) < 20 {
|
if len(bs) < 20 {
|
||||||
|
tun.log.Traceln("TUN/TAP iface read undersized ipv6 packet, length:", len(bs))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// Check the packet size
|
// Check the packet size
|
||||||
|
Loading…
Reference in New Issue
Block a user