summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2025-01-10 11:45:30 +0100
committerDavid Lönnhager <david.l@mullvad.net>2025-01-24 17:34:45 +0100
commit2fec6bb168e29ea47976b07c188d0cf792d70b77 (patch)
tree86d05a4127f18e6f1acb03d882f0c195db12421e
parent696c60680a7e4a2c4c6f4778d2d63c135e4469d8 (diff)
downloadmullvadvpn-2fec6bb168e29ea47976b07c188d0cf792d70b77.tar.xz
mullvadvpn-2fec6bb168e29ea47976b07c188d0cf792d70b77.zip
Pass in interface buffer instead of allocating in libwg
-rw-r--r--wireguard-go-rs/libwg/libwg_windows.go17
1 files changed, 10 insertions, 7 deletions
diff --git a/wireguard-go-rs/libwg/libwg_windows.go b/wireguard-go-rs/libwg/libwg_windows.go
index f4ad7faa6d..fc3d9d18a2 100644
--- a/wireguard-go-rs/libwg/libwg_windows.go
+++ b/wireguard-go-rs/libwg/libwg_windows.go
@@ -8,6 +8,7 @@ package main
// #include <stdlib.h>
// #include <stdint.h>
+// #include <string.h>
import "C"
import (
@@ -31,11 +32,8 @@ type LogSink = unsafe.Pointer
type LogContext = C.uint64_t
//export wgTurnOn
-func wgTurnOn(cIfaceName *C.char, cIfaceNameOut **C.char, cLuidOut *C.uint64_t, mtu C.uint16_t, cSettings *C.char, logSink LogSink, logContext LogContext) C.int32_t {
+func wgTurnOn(cIfaceName *C.char, cIfaceNameOut *C.char, cIfaceNameOutSize C.size_t, cLuidOut *C.uint64_t, mtu C.uint16_t, cSettings *C.char, logSink LogSink, logContext LogContext) C.int32_t {
logger := logging.NewLogger(logSink, logging.LogContext(logContext))
- if cIfaceNameOut != nil {
- *cIfaceNameOut = nil
- }
if cIfaceName == nil {
logger.Errorf("cIfaceName is null\n")
@@ -60,7 +58,7 @@ func wgTurnOn(cIfaceName *C.char, cIfaceNameOut **C.char, cLuidOut *C.uint64_t,
tun.WintunTunnelType = "Mullvad"
- wintun, err := tun.CreateTUNWithRequestedGUID(ifaceName, &networkId, mtu)
+ wintun, err := tun.CreateTUNWithRequestedGUID(ifaceName, &networkId, int(mtu))
if err != nil {
logger.Errorf("Failed to create tunnel\n")
logger.Errorf("%s\n", err)
@@ -106,10 +104,15 @@ func wgTurnOn(cIfaceName *C.char, cIfaceNameOut **C.char, cLuidOut *C.uint64_t,
}
if cIfaceNameOut != nil {
- *cIfaceNameOut = C.CString(actualInterfaceName)
+ if int(cIfaceNameOutSize) <= len(actualInterfaceName) {
+ logger.Errorf("Interface name buffer too small\n")
+ device.Close()
+ return ERROR_GENERAL_FAILURE
+ }
+ C.strcpy(cIfaceNameOut, C.CString(actualInterfaceName))
}
if cLuidOut != nil {
- *cLuidOut = nativeTun.LUID()
+ *cLuidOut = C.uint64_t(nativeTun.LUID())
}
return C.int32_t(handle)