From ec8f6f82c20c617a3ea94478f2b5e4d49c6d3c2c Mon Sep 17 00:00:00 2001
From: James Tucker <james@tailscale.com>
Date: Wed, 27 Sep 2023 14:52:21 -0700
Subject: [PATCH] tun: fix crash when ForceMTU is called after close

Close closes the events channel, resulting in a panic from send on
closed channel.

Reported-By: Brad Fitzpatrick <brad@tailscale.com>
Signed-off-by: James Tucker <james@tailscale.com>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
---
 tun/tun_windows.go | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/tun/tun_windows.go b/tun/tun_windows.go
index 0cb4ce1..34f2980 100644
--- a/tun/tun_windows.go
+++ b/tun/tun_windows.go
@@ -127,6 +127,9 @@ func (tun *NativeTun) MTU() (int, error) {
 
 // TODO: This is a temporary hack. We really need to be monitoring the interface in real time and adapting to MTU changes.
 func (tun *NativeTun) ForceMTU(mtu int) {
+	if tun.close.Load() {
+		return
+	}
 	update := tun.forcedMTU != mtu
 	tun.forcedMTU = mtu
 	if update {