From 1f6c4ba7c38cbb25c7f72aec3d777746bb51cd02 Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Thu, 29 Apr 2021 15:48:00 -0700 Subject: [PATCH] wgengine/wgcfg: prevent ReconfigDevice from hanging on error When wireguard-go's UAPI interface fails with an error, ReconfigDevice hangs. Fix that by buffering the channel and closing the writer after the call. The code now matches the corresponding code in DeviceConfig, where I got it right. Signed-off-by: Josh Bleecher Snyder --- wgengine/wgcfg/device.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/wgengine/wgcfg/device.go b/wgengine/wgcfg/device.go index fd00f2229..d425eda10 100644 --- a/wgengine/wgcfg/device.go +++ b/wgengine/wgcfg/device.go @@ -47,9 +47,10 @@ func ReconfigDevice(d *device.Device, cfg *Config, logf logger.Logf) (err error) } r, w := io.Pipe() - errc := make(chan error) + errc := make(chan error, 1) go func() { errc <- d.IpcSetOperation(r) + w.Close() }() err = cfg.ToUAPI(w, prev)