Skip to content

Commit

Permalink
Merge pull request from GHSA-2qjp-425j-52j9
Browse files Browse the repository at this point in the history
CRI stream server: Fix goroutine leak in Exec
  • Loading branch information
dmcgowan committed Dec 7, 2022
2 parents 5f84558 + f012617 commit 241563b
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions pkg/cri/streaming/remotecommand/httpstream.go
Expand Up @@ -33,6 +33,7 @@ limitations under the License.
package remotecommand

import (
gocontext "context"
"encoding/json"
"errors"
"fmt"
Expand Down Expand Up @@ -132,7 +133,7 @@ func createStreams(req *http.Request, w http.ResponseWriter, opts *Options, supp

if ctx.resizeStream != nil {
ctx.resizeChan = make(chan remotecommand.TerminalSize)
go handleResizeEvents(ctx.resizeStream, ctx.resizeChan)
go handleResizeEvents(req.Context(), ctx.resizeStream, ctx.resizeChan)
}

return ctx, true
Expand Down Expand Up @@ -425,7 +426,7 @@ WaitForStreams:
// supportsTerminalResizing returns false because v1ProtocolHandler doesn't support it.
func (*v1ProtocolHandler) supportsTerminalResizing() bool { return false }

func handleResizeEvents(stream io.Reader, channel chan<- remotecommand.TerminalSize) {
func handleResizeEvents(ctx gocontext.Context, stream io.Reader, channel chan<- remotecommand.TerminalSize) {
defer runtime.HandleCrash()
defer close(channel)

Expand All @@ -435,7 +436,15 @@ func handleResizeEvents(stream io.Reader, channel chan<- remotecommand.TerminalS
if err := decoder.Decode(&size); err != nil {
break
}
channel <- size

select {
case channel <- size:
case <-ctx.Done():
// To avoid leaking this routine, exit if the http request finishes. This path
// would generally be hit if starting the process fails and nothing is started to
// ingest these resize events.
return
}
}
}

Expand Down

0 comments on commit 241563b

Please sign in to comment.