From 8ae146478c34ec7d1a91c087930e497f8216fa2b Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Sat, 14 Nov 2020 21:24:09 -0800 Subject: [PATCH] net/netstat: remove some unsafe Just removing any unnecessary unsafe while auditing unsafe usage for #921. (cherry picked from commit 7a01cd27ca846bd6aad109b4aaaba5c6939dad7e) --- cmd/tailscaled/depaware.txt | 2 +- net/netstat/netstat_windows.go | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/cmd/tailscaled/depaware.txt b/cmd/tailscaled/depaware.txt index ef174f3c2..aa390b83a 100644 --- a/cmd/tailscaled/depaware.txt +++ b/cmd/tailscaled/depaware.txt @@ -83,7 +83,7 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de tailscale.com/types/opt from tailscale.com/control/controlclient+ tailscale.com/types/strbuilder from tailscale.com/wgengine/packet tailscale.com/types/structs from tailscale.com/control/controlclient+ - W tailscale.com/util/endian from tailscale.com/net/netns + W tailscale.com/util/endian from tailscale.com/net/netns+ tailscale.com/util/lineread from tailscale.com/control/controlclient+ tailscale.com/util/pidowner from tailscale.com/ipn/ipnserver tailscale.com/version from tailscale.com/cmd/tailscaled+ diff --git a/net/netstat/netstat_windows.go b/net/netstat/netstat_windows.go index 893d264e9..8bacb1578 100644 --- a/net/netstat/netstat_windows.go +++ b/net/netstat/netstat_windows.go @@ -6,14 +6,15 @@ package netstat import ( - "encoding/binary" "errors" "fmt" + "math/bits" "syscall" "unsafe" "golang.org/x/sys/windows" "inet.af/netaddr" + "tailscale.com/util/endian" ) // See https://docs.microsoft.com/en-us/windows/win32/api/iphlpapi/nf-iphlpapi-getextendedtcptable @@ -153,9 +154,11 @@ func state(v uint32) string { } func ipport4(addr uint32, port uint16) netaddr.IPPort { - a4 := (*[4]byte)(unsafe.Pointer(&addr)) + if !endian.Big { + addr = bits.ReverseBytes32(addr) + } return netaddr.IPPort{ - IP: netaddr.IPv4(a4[0], a4[1], a4[2], a4[3]), + IP: netaddr.IPv4(byte(addr>>24), byte(addr>>16), byte(addr>>8), byte(addr)), Port: port, } } @@ -173,6 +176,8 @@ func ipport6(addr [16]byte, scope uint32, port uint16) netaddr.IPPort { } func port(v *uint32) uint16 { - p := (*[4]byte)(unsafe.Pointer(v)) - return binary.BigEndian.Uint16(p[:2]) + if !endian.Big { + return uint16(bits.ReverseBytes32(*v) >> 16) + } + return uint16(*v >> 16) }