Index: head/net/wireguard-go/files/patch-bb42ec7d185ab5f5cd3867ac1258edff86b7f307 =================================================================== --- head/net/wireguard-go/files/patch-bb42ec7d185ab5f5cd3867ac1258edff86b7f307 (revision 502043) +++ head/net/wireguard-go/files/patch-bb42ec7d185ab5f5cd3867ac1258edff86b7f307 (nonexistent) @@ -1,204 +0,0 @@ -From bb42ec7d185ab5f5cd3867ac1258edff86b7f307 Mon Sep 17 00:00:00 2001 -From: "Jason A. Donenfeld" -Date: Sat, 20 Apr 2019 11:29:07 +0900 -Subject: tun: freebsd: work around numerous kernel panics on shutdown - -There are numerous race conditions. But even this will crash it: - -while true; do ifconfig tun0 create; ifconfig tun0 destroy; done - -It seems like LLv6 is related, which we're not using anyway, so -explicitly disable it on the interface. ---- - tun/tun_freebsd.go | 105 +++++++++++++++++++++++++++++++++++++++++------------ - 1 file changed, 82 insertions(+), 23 deletions(-) - -diff --git a/tun/tun_freebsd.go b/tun/tun_freebsd.go -index 01a4348..c9c89ef 100644 ---- tun/tun_freebsd.go -+++ tun/tun_freebsd.go -@@ -19,9 +19,19 @@ import ( - - // _TUNSIFHEAD, value derived from sys/net/{if_tun,ioccom}.h - // const _TUNSIFHEAD = ((0x80000000) | (((4) & ((1 << 13) - 1) ) << 16) | (uint32(byte('t')) << 8) | (96)) --const _TUNSIFHEAD = 0x80047460 --const _TUNSIFMODE = 0x8004745e --const _TUNSIFPID = 0x2000745f -+const ( -+ _TUNSIFHEAD = 0x80047460 -+ _TUNSIFMODE = 0x8004745e -+ _TUNSIFPID = 0x2000745f -+) -+ -+//TODO: move into x/sys/unix -+const ( -+ SIOCGIFINFO_IN6 = 0xc048696c -+ SIOCSIFINFO_IN6 = 0xc048696d -+ ND6_IFF_AUTO_LINKLOCAL = 0x20 -+ ND6_IFF_NO_DAD = 0x100 -+) - - // Iface status string max len - const _IFSTATMAX = 800 -@@ -32,7 +42,7 @@ const SIZEOF_UINTPTR = 4 << (^uintptr(0) >> 32 & 1) - type ifreq_ptr struct { - Name [unix.IFNAMSIZ]byte - Data uintptr -- Pad0 [24 - SIZEOF_UINTPTR]byte -+ Pad0 [16 - SIZEOF_UINTPTR]byte - } - - // Structure for iface mtu get/set ioctls -@@ -48,6 +58,23 @@ type ifstat struct { - Ascii [_IFSTATMAX]byte - } - -+// Structures for nd6 flag manipulation -+type in6_ndireq struct { -+ Name [unix.IFNAMSIZ]byte -+ Linkmtu uint32 -+ Maxmtu uint32 -+ Basereachable uint32 -+ Reachable uint32 -+ Retrans uint32 -+ Flags uint32 -+ Recalctm int -+ Chlim uint8 -+ Initialized uint8 -+ Randomseed0 [8]byte -+ Randomseed1 [8]byte -+ Randomid [8]byte -+} -+ - type NativeTun struct { - name string - tunFile *os.File -@@ -191,23 +218,18 @@ func tunName(fd uintptr) (string, error) { - - // Destroy a named system interface - func tunDestroy(name string) error { -- // open control socket -+ // Open control socket. - var fd int -- - fd, err := unix.Socket( - unix.AF_INET, - unix.SOCK_DGRAM, - 0, - ) -- - if err != nil { - return err - } -- - defer unix.Close(fd) - -- // do ioctl call -- - var ifr [32]byte - copy(ifr[:], name) - _, _, errno := unix.Syscall( -@@ -216,7 +238,6 @@ func tunDestroy(name string) error { - uintptr(unix.SIOCIFDESTROY), - uintptr(unsafe.Pointer(&ifr[0])), - ) -- - if errno != 0 { - return fmt.Errorf("failed to destroy interface %s: %s", name, errno.Error()) - } -@@ -263,33 +284,71 @@ func CreateTUN(name string, mtu int) (TUNDevice, error) { - }) - - if errno != 0 { -- return nil, fmt.Errorf("error %s", errno.Error()) -+ tunFile.Close() -+ tunDestroy(assignedName) -+ return nil, fmt.Errorf("Unable to put into IFHEAD mode: %v", errno) - } - -- // Rename tun interface -- -- // Open control socket -+ // Open control sockets - confd, err := unix.Socket( - unix.AF_INET, - unix.SOCK_DGRAM, - 0, - ) -- - if err != nil { -+ tunFile.Close() -+ tunDestroy(assignedName) - return nil, err - } -- - defer unix.Close(confd) -+ confd6, err := unix.Socket( -+ unix.AF_INET6, -+ unix.SOCK_DGRAM, -+ 0, -+ ) -+ if err != nil { -+ tunFile.Close() -+ tunDestroy(assignedName) -+ return nil, err -+ } -+ defer unix.Close(confd6) - -- // set up struct for iface rename -+ // Disable link-local v6, not just because WireGuard doesn't do that anyway, but -+ // also because there are serious races with attaching and detaching LLv6 addresses -+ // in relation to interface lifetime within the FreeBSD kernel. -+ var ndireq in6_ndireq -+ copy(ndireq.Name[:], assignedName) -+ _, _, errno = unix.Syscall( -+ unix.SYS_IOCTL, -+ uintptr(confd6), -+ uintptr(SIOCGIFINFO_IN6), -+ uintptr(unsafe.Pointer(&ndireq)), -+ ) -+ if errno != 0 { -+ tunFile.Close() -+ tunDestroy(assignedName) -+ return nil, fmt.Errorf("Unable to get nd6 flags for %s: %v", assignedName, errno) -+ } -+ ndireq.Flags = ndireq.Flags &^ ND6_IFF_AUTO_LINKLOCAL -+ ndireq.Flags = ndireq.Flags | ND6_IFF_NO_DAD -+ _, _, errno = unix.Syscall( -+ unix.SYS_IOCTL, -+ uintptr(confd6), -+ uintptr(SIOCSIFINFO_IN6), -+ uintptr(unsafe.Pointer(&ndireq)), -+ ) -+ if errno != 0 { -+ tunFile.Close() -+ tunDestroy(assignedName) -+ return nil, fmt.Errorf("Unable to set nd6 flags for %s: %v", assignedName, errno) -+ } -+ -+ // Rename the interface - var newnp [unix.IFNAMSIZ]byte - copy(newnp[:], name) -- - var ifr ifreq_ptr - copy(ifr.Name[:], assignedName) - ifr.Data = uintptr(unsafe.Pointer(&newnp[0])) -- -- //do actual ioctl to rename iface - _, _, errno = unix.Syscall( - unix.SYS_IOCTL, - uintptr(confd), -@@ -298,8 +357,8 @@ func CreateTUN(name string, mtu int) (TUNDevice, error) { - ) - if errno != 0 { - tunFile.Close() -- tunDestroy(name) -- return nil, fmt.Errorf("failed to rename %s to %s: %s", assignedName, name, errno.Error()) -+ tunDestroy(assignedName) -+ return nil, fmt.Errorf("Failed to rename %s to %s: %v", assignedName, name, errno) - } - - return CreateTUNFromFile(tunFile, mtu) --- -cgit v1.2.1-20-gc37e - Property changes on: head/net/wireguard-go/files/patch-bb42ec7d185ab5f5cd3867ac1258edff86b7f307 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/net/wireguard-go/Makefile =================================================================== --- head/net/wireguard-go/Makefile (revision 502043) +++ head/net/wireguard-go/Makefile (revision 502044) @@ -1,29 +1,28 @@ # $FreeBSD$ PORTNAME= wireguard-go -PORTVERSION= 0.0.20190409 -PORTREVISION= 1 +PORTVERSION= 0.0.20190517 CATEGORIES= net MASTER_SITES= https://git.zx2c4.com/wireguard-go/snapshot/ DISTFILES= ${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX} MAINTAINER= decke@FreeBSD.org COMMENT= WireGuard implementation in Go LICENSE= MIT LICENSE_FILE= ${WRKSRC}/COPYING BUILD_DEPENDS= go:lang/go USES= gmake tar:xz USE_GITHUB= nodefault GH_TUPLE= golang:crypto:b7391e95e576:crypto/vendor/golang.org/x/crypto \ golang:net:1272bf9dcd53:net/vendor/golang.org/x/net \ golang:sys:f7bb7a8bee54:sys/vendor/golang.org/x/sys MAKE_ENV+= GOFLAGS=-mod=vendor PLIST_FILES= bin/${PORTNAME} .include Index: head/net/wireguard-go/distinfo =================================================================== --- head/net/wireguard-go/distinfo (revision 502043) +++ head/net/wireguard-go/distinfo (revision 502044) @@ -1,9 +1,9 @@ -TIMESTAMP = 1554802706 -SHA256 (wireguard-go-0.0.20190409.tar.xz) = bd7305d69435438ece56df62695197c38469fd0be8c9b6fe56484b6347bf05d6 -SIZE (wireguard-go-0.0.20190409.tar.xz) = 66364 +TIMESTAMP = 1558295893 +SHA256 (wireguard-go-0.0.20190517.tar.xz) = 6877d431847df0afd514e753eed8571bc7e85069b837bc8472b5186fbb004e78 +SIZE (wireguard-go-0.0.20190517.tar.xz) = 69496 SHA256 (golang-crypto-b7391e95e576_GH0.tar.gz) = 42dd14bcc1b2b0e24b3824fc774f63d6c9a78da3a9da0e26eb79ddf200a44d07 SIZE (golang-crypto-b7391e95e576_GH0.tar.gz) = 1656089 SHA256 (golang-net-1272bf9dcd53_GH0.tar.gz) = 331354b9b8a5fa0243fb4bbf9198c0072e9091c3e6a5f3714a62d17b8811f9e2 SIZE (golang-net-1272bf9dcd53_GH0.tar.gz) = 974586 SHA256 (golang-sys-f7bb7a8bee54_GH0.tar.gz) = 62a187935014be861c26921c47cbdeaffaca684425cbd055d5f1650422504a19 SIZE (golang-sys-f7bb7a8bee54_GH0.tar.gz) = 1260311