Fix integer conversions

This commit is contained in:
Jason A. Donenfeld 2018-05-22 18:33:50 +02:00
parent 7038de95e1
commit b4cef2524f
5 changed files with 8 additions and 29 deletions

View 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
}

View 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
}

View 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) {

View 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
}

View 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