|
| 1 | +From 7e9e82f8c3033974b16d93835521f6e133a7c9aa Mon Sep 17 00:00:00 2001 |
| 2 | +From: AllSpark <allspark@microsoft.com> |
| 3 | +Date: Thu, 14 May 2026 09:00:37 +0000 |
| 4 | +Subject: [PATCH] http2: prevent hanging Transport due to bad SETTINGS frame |
| 5 | + |
| 6 | +This CL backports https://go.dev/cl/761581 to x/net. |
| 7 | + |
| 8 | +Fixes golang/go#78476 |
| 9 | +Fixes CVE-2026-33814 |
| 10 | + |
| 11 | +Upstream-reference: https://github.com/golang/net/commit/1e71bd86e4a302b4e731bc06da6eb51679c7bd49.patch |
| 12 | +--- |
| 13 | + vendor/golang.org/x/net/http2/transport.go | 6 +++--- |
| 14 | + 1 file changed, 3 insertions(+), 3 deletions(-) |
| 15 | + |
| 16 | +diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go |
| 17 | +index 8cf64b7..3b514a3 100644 |
| 18 | +--- a/vendor/golang.org/x/net/http2/transport.go |
| 19 | ++++ b/vendor/golang.org/x/net/http2/transport.go |
| 20 | +@@ -2865,6 +2865,9 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { |
| 21 | + |
| 22 | + var seenMaxConcurrentStreams bool |
| 23 | + err := f.ForeachSetting(func(s Setting) error { |
| 24 | ++ if err := s.Valid(); err != nil { |
| 25 | ++ return err |
| 26 | ++ } |
| 27 | + switch s.ID { |
| 28 | + case SettingMaxFrameSize: |
| 29 | + cc.maxFrameSize = s.Val |
| 30 | +@@ -2896,9 +2899,6 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { |
| 31 | + cc.henc.SetMaxDynamicTableSize(s.Val) |
| 32 | + cc.peerMaxHeaderTableSize = s.Val |
| 33 | + case SettingEnableConnectProtocol: |
| 34 | +- if err := s.Valid(); err != nil { |
| 35 | +- return err |
| 36 | +- } |
| 37 | + // If the peer wants to send us SETTINGS_ENABLE_CONNECT_PROTOCOL, |
| 38 | + // we require that it do so in the first SETTINGS frame. |
| 39 | + // |
| 40 | +-- |
| 41 | +2.45.4 |
| 42 | + |
0 commit comments