tun: windows: decrease alignment to 4

This commit is contained in:
Jason A. Donenfeld 2019-07-05 07:53:19 +02:00
parent 13abbdf14b
commit d8448f8a02

View File

@ -20,7 +20,7 @@ import (
) )
const ( const (
packetExchangeAlignment uint32 = 16 // Number of bytes packets are aligned to in exchange buffers packetExchangeAlignment uint32 = 4 // Number of bytes packets are aligned to in exchange buffers
packetSizeMax uint32 = 0xf000 - packetExchangeAlignment // Maximum packet size packetSizeMax uint32 = 0xf000 - packetExchangeAlignment // Maximum packet size
packetExchangeSize uint32 = 0x100000 // Exchange buffer size (defaults to 1MiB) packetExchangeSize uint32 = 0x100000 // Exchange buffer size (defaults to 1MiB)
retryRate = 4 // Number of retries per second to reopen device pipe retryRate = 4 // Number of retries per second to reopen device pipe
@ -255,7 +255,7 @@ func (tun *NativeTun) Read(buff []byte, offset int) (int, error) {
// Get packet from the exchange buffer. // Get packet from the exchange buffer.
packet := tun.rdBuff.data[tun.rdBuff.offset:] packet := tun.rdBuff.data[tun.rdBuff.offset:]
size := *(*uint32)(unsafe.Pointer(&packet[0])) size := *(*uint32)(unsafe.Pointer(&packet[0]))
pSize := packetAlign(packetExchangeAlignment + size) pSize := packetAlign(size) + packetExchangeAlignment
if packetSizeMax < size || tun.rdBuff.avail < tun.rdBuff.offset+pSize { if packetSizeMax < size || tun.rdBuff.avail < tun.rdBuff.offset+pSize {
// Invalid packet size. // Invalid packet size.
tun.rdBuff.avail = 0 tun.rdBuff.avail = 0
@ -363,7 +363,7 @@ func (tun *NativeTun) putTunPacket(buff []byte) error {
if size > packetSizeMax { if size > packetSizeMax {
return errors.New("Packet too big") return errors.New("Packet too big")
} }
pSize := packetAlign(packetExchangeAlignment + size) pSize := packetAlign(size) + packetExchangeAlignment
if tun.wrBuff.offset+pSize >= packetExchangeSize { if tun.wrBuff.offset+pSize >= packetExchangeSize {
// Exchange buffer is full -> flush first. // Exchange buffer is full -> flush first.