]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
Fix integer conversions
authorJason A. Donenfeld <Jason@zx2c4.com>
Tue, 22 May 2018 16:33:50 +0000 (18:33 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Tue, 22 May 2018 16:35:52 +0000 (18:35 +0200)
tun_darwin.go
tun_freebsd.go
tun_linux.go
tun_openbsd.go
uapi_bsd.go

index 8e4b9708125411b2edc816c74be694234863d789..e5a01a7b3f2b010650bceec4e640ba924b83b401 100644 (file)
@@ -380,11 +380,5 @@ func (tun *NativeTun) MTU() (int, error) {
                return 0, fmt.Errorf("failed to get MTU on %s", tun.name)
        }
 
-       // convert result to signed 32-bit int
-
-       val := binary.LittleEndian.Uint32(ifr[16:20])
-       if val >= (1 << 31) {
-               return int(val-(1<<31)) - (1 << 31), nil
-       }
-       return int(val), nil
+       return int(*(*int32)(unsafe.Pointer(&ifr[16]))), nil
 }
index dfd5d46eec6178d4670e90e40205598b6a4fb570..5461c45ede90b28d6670bc2f2ceff02eeb87d64e 100644 (file)
@@ -515,11 +515,5 @@ func (tun *NativeTun) MTU() (int, error) {
                return 0, fmt.Errorf("failed to get MTU on %s", tun.name)
        }
 
-       // convert result to signed 32-bit int
-       mtu := ifr.MTU
-       if mtu >= (1 << 31) {
-               return int(mtu-(1<<31)) - (1 << 31), nil
-       }
-       return int(mtu), nil
-
+       return int(*(*int32)(unsafe.Pointer(&ifr.MTU))), nil
 }
index b43ded80d7cf3aa06a8730231a05c16bab652507..db9cb515e3839852ae4d854762958bd67c843f8b 100644 (file)
@@ -263,13 +263,7 @@ func (tun *NativeTun) MTU() (int, error) {
                return 0, errors.New("failed to get MTU of TUN device: " + strconv.FormatInt(int64(errno), 10))
        }
 
-       // convert result to signed 32-bit int
-
-       val := binary.LittleEndian.Uint32(ifr[16:20])
-       if val >= (1 << 31) {
-               return int(toInt32(val)), nil
-       }
-       return int(val), nil
+       return int(*(*int32)(unsafe.Pointer(&ifr[16]))), nil
 }
 
 func (tun *NativeTun) Name() (string, error) {
index 97d8f384413f5294717c41b61921600403239d0c..932404ec26bcf559d0de564e8d5fe703caeb34e8 100644 (file)
@@ -356,11 +356,5 @@ func (tun *NativeTun) MTU() (int, error) {
                return 0, fmt.Errorf("failed to get MTU on %s", tun.name)
        }
 
-       // convert result to signed 32-bit int
-       mtu := ifr.MTU
-       if mtu >= (1 << 31) {
-               return int(mtu-(1<<31)) - (1 << 31), nil
-       }
-       return int(mtu), nil
-
+       return int(*(*int32)(unsafe.Pointer(&ifr.MTU))), nil
 }
index e94991886e6bb775ff04dd6948f393c800a35385..b2a7644833de8cda8f9daebf3dbde39608bca8da 100644 (file)
@@ -15,6 +15,7 @@ import (
        "net"
        "os"
        "path"
+       "unsafe"
 )
 
 const (
@@ -101,11 +102,13 @@ func UAPIListen(name string, file *os.File) (net.Listener, error) {
 
        go func(l *UAPIListener) {
                event := unix.Kevent_t{
-                       Ident:  uint64(uapi.keventFd),
                        Filter: unix.EVFILT_VNODE,
                        Flags:  unix.EV_ADD | unix.EV_ENABLE | unix.EV_ONESHOT,
                        Fflags: unix.NOTE_WRITE,
                }
+               // Allow this assignment to work with both the 32-bit and 64-bit version
+               // of the above struct. If you know another way, please submit a patch.
+               *(*uintptr)(unsafe.Pointer(&event.Ident)) = uintptr(uapi.keventFd)
                events := make([]unix.Kevent_t, 1)
                n := 1
                var kerr error