diff --git a/listener/tap/listener.go b/listener/tap/listener.go index e86ff31f..3b868a2f 100644 --- a/listener/tap/listener.go +++ b/listener/tap/listener.go @@ -2,6 +2,7 @@ package tap import ( "context" + "fmt" "net" "time" @@ -68,7 +69,13 @@ func (l *tapListener) Init(md mdata.Metadata) (err error) { func (l *tapListener) listenLoop() { for { ctx, cancel := context.WithCancel(context.Background()) - err := func() error { + err := func() (err error) { + defer func() { + if r := recover(); r != nil { + err = fmt.Errorf("panic in createTap: %v", r) + } + }() + ifce, name, ip, err := l.createTap() if err != nil { if ifce != nil { diff --git a/listener/tun/listener.go b/listener/tun/listener.go index 551a339e..a94a0451 100644 --- a/listener/tun/listener.go +++ b/listener/tun/listener.go @@ -2,6 +2,7 @@ package tun import ( "context" + "fmt" "net" "time" @@ -75,7 +76,13 @@ func (l *tunListener) Init(md mdata.Metadata) (err error) { func (l *tunListener) listenLoop(ready context.CancelCauseFunc) { for { ctx, cancel := context.WithCancel(context.Background()) - err := func() error { + err := func() (err error) { + defer func() { + if r := recover(); r != nil { + err = fmt.Errorf("panic in createTun: %v", r) + } + }() + ifce, name, ip, err := l.createTun() if err != nil { if ifce != nil { diff --git a/listener/tungo/listener.go b/listener/tungo/listener.go index 548e8ff6..fac92098 100644 --- a/listener/tungo/listener.go +++ b/listener/tungo/listener.go @@ -2,6 +2,7 @@ package tungo import ( "context" + "fmt" "net" "time" @@ -68,7 +69,13 @@ func (l *tunListener) Init(md mdata.Metadata) (err error) { func (l *tunListener) listenLoop(ready context.CancelCauseFunc) { for { ctx, cancel := context.WithCancel(context.Background()) - err := func() error { + err := func() (err error) { + defer func() { + if r := recover(); r != nil { + err = fmt.Errorf("panic in createTun: %v", r) + } + }() + ifce, name, ip, err := l.createTun() if err != nil { if ifce != nil {