mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-29 04:55:31 +00:00
ssh/tailssh: fix race in errors returned when starting recorder
There were two code paths that could fail depending on how fast the recorder responses. This fixes that by returning the correct error from both paths. Fixes #7707 Signed-off-by: Maisem Ali <maisem@tailscale.com>
This commit is contained in:
parent
cb960d6cdd
commit
e04acabfde
@ -1065,7 +1065,12 @@ func (ss *sshSession) run() {
|
||||
var err error
|
||||
rec, err = ss.startNewRecording()
|
||||
if err != nil {
|
||||
fmt.Fprintf(ss, "can't start new recording\r\n")
|
||||
var uve userVisibleError
|
||||
if errors.As(err, &uve) {
|
||||
fmt.Fprintf(ss, "%s\r\n", uve)
|
||||
} else {
|
||||
fmt.Fprintf(ss, "can't start new recording\r\n")
|
||||
}
|
||||
ss.logf("startNewRecording: %v", err)
|
||||
ss.Exit(1)
|
||||
return
|
||||
@ -1079,7 +1084,7 @@ func (ss *sshSession) run() {
|
||||
logf("start failed: %v", err.Error())
|
||||
if errors.Is(err, context.Canceled) {
|
||||
err := context.Cause(ss.ctx)
|
||||
uve := userVisibleError{}
|
||||
var uve userVisibleError
|
||||
if errors.As(err, &uve) {
|
||||
fmt.Fprintf(ss, "%s\r\n", uve)
|
||||
}
|
||||
@ -1500,6 +1505,12 @@ func (ss *sshSession) startNewRecording() (_ *recording, err error) {
|
||||
}
|
||||
j = append(j, '\n')
|
||||
if _, err := pw.Write(j); err != nil {
|
||||
if errors.Is(err, io.ErrClosedPipe) && ss.ctx.Err() != nil {
|
||||
// If we got an io.ErrClosedPipe, it's likely because
|
||||
// the recording server closed the connection on us. Return
|
||||
// the original context error instead.
|
||||
return nil, context.Cause(ss.ctx)
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
return rec, nil
|
||||
|
Loading…
Reference in New Issue
Block a user