mirror of
https://github.com/tailscale/tailscale.git
synced 2026-03-26 10:11:05 -04:00
net/tstun: do not write when Wrapper is closed (#19038)
Two methods could deadlock during shutdown when closing the wrapper. Ensure that the writers are aware of the wrapper being closed. Fixes #19037 Signed-off-by: Claus Lensbøl <claus@tailscale.com>
This commit is contained in:
@@ -512,8 +512,9 @@ func (t *Wrapper) injectOutbound(r tunInjectedRead) {
|
||||
if t.outboundClosed {
|
||||
return
|
||||
}
|
||||
t.vectorOutbound <- tunVectorReadResult{
|
||||
injected: r,
|
||||
select {
|
||||
case t.vectorOutbound <- tunVectorReadResult{injected: r}:
|
||||
case <-t.closed:
|
||||
}
|
||||
}
|
||||
|
||||
@@ -524,7 +525,10 @@ func (t *Wrapper) sendVectorOutbound(r tunVectorReadResult) {
|
||||
if t.outboundClosed {
|
||||
return
|
||||
}
|
||||
t.vectorOutbound <- r
|
||||
select {
|
||||
case t.vectorOutbound <- r:
|
||||
case <-t.closed:
|
||||
}
|
||||
}
|
||||
|
||||
// snat does SNAT on p if the destination address requires a different source address.
|
||||
|
||||
Reference in New Issue
Block a user