From 09cf73cd3c0f37d178aa681023507b41ccb7f61f Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Tue, 31 Jul 2018 14:27:29 +0200 Subject: [PATCH] GoBackend: make socket IPC optional This fixes the multi-user case, which cannot be determined at compile time and probably isn't reasonable to consider anyway in a global manner. Signed-off-by: Jason A. Donenfeld --- .../git.zx2c4.com/wireguard-go/api-android.go | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/app/tools/libwg-go/src/git.zx2c4.com/wireguard-go/api-android.go b/app/tools/libwg-go/src/git.zx2c4.com/wireguard-go/api-android.go index 4d87acc8..e57da84f 100644 --- a/app/tools/libwg-go/src/git.zx2c4.com/wireguard-go/api-android.go +++ b/app/tools/libwg-go/src/git.zx2c4.com/wireguard-go/api-android.go @@ -91,28 +91,28 @@ func wgTurnOn(ifnameRef string, tun_fd int32, settings string) int32 { return -1 } + var uapi net.Listener; + uapiFile, err := UAPIOpen(name) if err != nil { - unix.Close(int(tun_fd)) logger.Error.Println(err) - return -1 - } - uapi, err := UAPIListen(name, uapiFile) - if err != nil { - uapiFile.Close() - unix.Close(int(tun_fd)) - logger.Error.Println(err) - return -1 - } - go func() { - for { - conn, err := uapi.Accept() - if err != nil { - return - } - go ipcHandle(device, conn) + } else { + uapi, err = UAPIListen(name, uapiFile) + if err != nil { + uapiFile.Close() + logger.Error.Println(err) + } else { + go func() { + for { + conn, err := uapi.Accept() + if err != nil { + return + } + go ipcHandle(device, conn) + } + }() } - }() + } device.Up() logger.Info.Println("Device started") @@ -138,7 +138,9 @@ func wgTurnOff(tunnelHandle int32) { return } delete(tunnelHandles, tunnelHandle) - handle.uapi.Close() + if handle.uapi != nil { + handle.uapi.Close() + } handle.device.Close() }