From 1cf89f5339b549236f38ce5fbc40f7bf993d9626 Mon Sep 17 00:00:00 2001 From: Jordan Whited Date: Wed, 8 Nov 2023 14:06:20 -0800 Subject: [PATCH] tun: fix Device.Read() buf length assumption on Windows The length of a packet read from the underlying TUN device may exceed the length of a supplied buffer when MTU exceeds device.MaxMessageSize. Reviewed-by: Brad Fitzpatrick Signed-off-by: Jordan Whited Signed-off-by: Jason A. Donenfeld --- tun/tun_windows.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tun/tun_windows.go b/tun/tun_windows.go index 34f2980..2af8e3e 100644 --- a/tun/tun_windows.go +++ b/tun/tun_windows.go @@ -160,11 +160,10 @@ retry: packet, err := tun.session.ReceivePacket() switch err { case nil: - packetSize := len(packet) - copy(bufs[0][offset:], packet) - sizes[0] = packetSize + n := copy(bufs[0][offset:], packet) + sizes[0] = n tun.session.ReleaseReceivePacket(packet) - tun.rate.update(uint64(packetSize)) + tun.rate.update(uint64(n)) return 1, nil case windows.ERROR_NO_MORE_ITEMS: if !shouldSpin || uint64(nanotime()-start) >= spinloopDuration {