Skip to content

Commit 54d9543

Browse files
committed
ipn/wg: release read-lock before return
1 parent 68e4e3e commit 54d9543

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

intra/ipn/wg/wgconn.go

+8-4
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,7 @@ func (bind *StdNetBind) Close() error {
332332
func (s *StdNetBind) makeReceiveFn(uc net.PacketConn) conn.ReceiveFunc {
333333
// github.com/WireGuard/wireguard-go/blob/469159ecf/device/device.go#L531
334334
return func(bufs [][]byte, sizes []int, eps []conn.Endpoint) (n int, err error) {
335+
defer core.Recover(core.Exit11, "wgconn.recv."+s.id)
335336
defer func() {
336337
s.observer("r", err)
337338
}()
@@ -373,6 +374,7 @@ func timedout(err error) bool {
373374
}
374375

375376
func (s *StdNetBind) Send(buf [][]byte, peer conn.Endpoint) (err error) {
377+
defer core.Recover(core.Exit11, "wgconn.send."+s.id)
376378
defer func() {
377379
s.observer("w", err)
378380
}()
@@ -547,18 +549,20 @@ func (s *StdNetBind) asEndpoint(ap net.Addr) conn.Endpoint {
547549
return invalidStdNetEndpoint
548550
}
549551
s.epmu.RLock()
550-
if ep, ok := s.eps[ap]; ok {
552+
ep, ok := s.eps[ap]
553+
s.epmu.RUnlock()
554+
555+
if ok {
551556
return ep
552557
}
553-
s.epmu.RUnlock()
554558

555559
s.epmu.Lock()
556560
defer s.epmu.Unlock()
557-
if ep, ok := s.eps[ap]; ok {
561+
ep, ok = s.eps[ap]
562+
if ok {
558563
return ep
559564
}
560565

561-
var ep StdNetEndpoint
562566
if tcp, ok := ap.(*net.TCPAddr); ok {
563567
ipp := tcp.AddrPort()
564568
ep = StdNetEndpoint{ipp, udpaddr(ipp)}

0 commit comments

Comments
 (0)