Package: release.debian.org
Severity: normal
Tags: bullseye
User: release.debian....@packages.debian.org
Usertags: pu
X-Debbugs-Cc: contain...@packages.debian.org, z...@debian.org
Control: affects -1 + src:containerd

[ Reason ]

Backport patch for CVE-2022-23471.

https://github.com/containerd/containerd/security/advisories/GHSA-2qjp-425j-52j9

> A bug was found in containerd's CRI implementation where a user can exhaust
> memory on the host.

[ Impact ]


[ Tests ]

No new test is added, but the patch is simple and easy to review.
It is taken from upstream 1.5 release branch without modification.

[ Risks ]

Code is trivial.

[ Checklist ]
  [x] *all* changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in (old)stable
  [x] the issue is verified as fixed in unstable

[ Changes ]

See attachment

[ Other info ]

No
diff -Nru containerd-1.4.13~ds1/debian/changelog 
containerd-1.4.13~ds1/debian/changelog
--- containerd-1.4.13~ds1/debian/changelog      2022-06-07 03:07:20.000000000 
+0800
+++ containerd-1.4.13~ds1/debian/changelog      2022-12-08 10:24:34.000000000 
+0800
@@ -1,3 +1,9 @@
+containerd (1.4.13~ds1-1~deb11u3) bullseye; urgency=medium
+
+  * CVE-2022-23471: CRI plugin: Fix goroutine leak during Exec
+
+ -- Shengjing Zhu <z...@debian.org>  Thu, 08 Dec 2022 10:24:34 +0800
+
 containerd (1.4.13~ds1-1~deb11u2) bullseye-security; urgency=high
 
   * CVE-2022-31030: CRI plugin: Host memory exhaustion through ExecSync
diff -Nru containerd-1.4.13~ds1/debian/patches/0011-CVE-2022-23471.patch 
containerd-1.4.13~ds1/debian/patches/0011-CVE-2022-23471.patch
--- containerd-1.4.13~ds1/debian/patches/0011-CVE-2022-23471.patch      
1970-01-01 08:00:00.000000000 +0800
+++ containerd-1.4.13~ds1/debian/patches/0011-CVE-2022-23471.patch      
2022-12-08 10:24:34.000000000 +0800
@@ -0,0 +1,56 @@
+From: Danny Canter <da...@dcantah.dev>
+Date: Mon, 28 Nov 2022 14:45:34 -0800
+Subject: CVE-2022-23471
+
+Origin: backport, https://github.com/containerd/containerd/commit/6cd11527
+---
+ .../cri/pkg/streaming/remotecommand/httpstream.go         | 15 ++++++++++++---
+ 1 file changed, 12 insertions(+), 3 deletions(-)
+
+diff --git 
a/vendor/github.com/containerd/cri/pkg/streaming/remotecommand/httpstream.go 
b/vendor/github.com/containerd/cri/pkg/streaming/remotecommand/httpstream.go
+index 0417a1a..9177fa7 100644
+--- 
a/vendor/github.com/containerd/cri/pkg/streaming/remotecommand/httpstream.go
++++ 
b/vendor/github.com/containerd/cri/pkg/streaming/remotecommand/httpstream.go
+@@ -33,6 +33,7 @@ limitations under the License.
+ package remotecommand
+ 
+ import (
++      gocontext "context"
+       "encoding/json"
+       "errors"
+       "fmt"
+@@ -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
+@@ -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)
+ 
+@@ -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
++              }
+       }
+ }
+ 
diff -Nru containerd-1.4.13~ds1/debian/patches/series 
containerd-1.4.13~ds1/debian/patches/series
--- containerd-1.4.13~ds1/debian/patches/series 2022-06-07 03:07:20.000000000 
+0800
+++ containerd-1.4.13~ds1/debian/patches/series 2022-12-08 10:24:34.000000000 
+0800
@@ -8,3 +8,4 @@
 0008-Add-RPi1-RPi0-workaround.patch
 0009-CVE-2022-31030.patch
 0010-CVE-2022-24769.patch
+0011-CVE-2022-23471.patch

Reply via email to