Prevent panic in web app transport#35501
Merged
rosstimothy merged 1 commit intomasterfrom Dec 7, 2023
Merged
Conversation
The case where no app servers were available was not handled and resulted in exceeding the bounds of the app servers slice. When no servers are available now the slice is set to nil instead of trying to shift it beyond the bounds. A test was added to validate that the panic is not possible any more. Fixes #35460
36ce870 to
36879f9
Compare
tigrato
approved these changes
Dec 7, 2023
zmb3
approved these changes
Dec 7, 2023
|
@rosstimothy See the table below for backport results.
|
rosstimothy
added a commit
that referenced
this pull request
Jun 10, 2024
#35501 incorrectly checked the length on the local servers variable instead of `t.c.servers` which could lead to panics like the one below. ```bash panic: runtime error: slice bounds out of range [1:0] goroutine 6558252 [running]: github.com/gravitational/teleport/lib/web/app.(*transport).DialContext(0xc00296d5f0, {0xae8bbd8, 0xc002596a20}, {0x42c525?, 0xc001dc4d80?}, {0x120?, 0x118?}) github.com/gravitational/teleport/lib/web/app/transport.go:264 +0x5dc net/http.(*Transport).dial(0xc002596a20?, {0xae8bbd8?, 0xc002596a20?}, {0x92ff0a2?, 0x4e4fc13?}, {0xc000b8dfc0?, 0xc00226f000?}) net/http/transport.go:1183 +0xd2 net/http.(*Transport).dialConn(0xc002f9cb40, {0xae8bbd8, 0xc002596a20}, {{}, 0x0, {0x9301a85, 0x5}, {0xc000b8dfc0, 0x1a}, 0x0}) net/http/transport.go:1625 +0x7e8 net/http.(*Transport).dialConnFor(0xae8bc10?, 0xc003340370) net/http/transport.go:1467 +0x9f created by net/http.(*Transport).queueForDial in goroutine 6562349 net/http/transport.go:1436 +0x3cb ```
github-merge-queue Bot
pushed a commit
that referenced
this pull request
Jun 11, 2024
* Fix panic in app dialing #35501 incorrectly checked the length on the local servers variable instead of `t.c.servers` which could lead to panics like the one below. ```bash panic: runtime error: slice bounds out of range [1:0] goroutine 6558252 [running]: github.com/gravitational/teleport/lib/web/app.(*transport).DialContext(0xc00296d5f0, {0xae8bbd8, 0xc002596a20}, {0x42c525?, 0xc001dc4d80?}, {0x120?, 0x118?}) github.com/gravitational/teleport/lib/web/app/transport.go:264 +0x5dc net/http.(*Transport).dial(0xc002596a20?, {0xae8bbd8?, 0xc002596a20?}, {0x92ff0a2?, 0x4e4fc13?}, {0xc000b8dfc0?, 0xc00226f000?}) net/http/transport.go:1183 +0xd2 net/http.(*Transport).dialConn(0xc002f9cb40, {0xae8bbd8, 0xc002596a20}, {{}, 0x0, {0x9301a85, 0x5}, {0xc000b8dfc0, 0x1a}, 0x0}) net/http/transport.go:1625 +0x7e8 net/http.(*Transport).dialConnFor(0xae8bc10?, 0xc003340370) net/http/transport.go:1467 +0x9f created by net/http.(*Transport).queueForDial in goroutine 6562349 net/http/transport.go:1436 +0x3cb ``` * prevent modifying servers if changed
github-actions Bot
pushed a commit
that referenced
this pull request
Jun 11, 2024
#35501 incorrectly checked the length on the local servers variable instead of `t.c.servers` which could lead to panics like the one below. ```bash panic: runtime error: slice bounds out of range [1:0] goroutine 6558252 [running]: github.com/gravitational/teleport/lib/web/app.(*transport).DialContext(0xc00296d5f0, {0xae8bbd8, 0xc002596a20}, {0x42c525?, 0xc001dc4d80?}, {0x120?, 0x118?}) github.com/gravitational/teleport/lib/web/app/transport.go:264 +0x5dc net/http.(*Transport).dial(0xc002596a20?, {0xae8bbd8?, 0xc002596a20?}, {0x92ff0a2?, 0x4e4fc13?}, {0xc000b8dfc0?, 0xc00226f000?}) net/http/transport.go:1183 +0xd2 net/http.(*Transport).dialConn(0xc002f9cb40, {0xae8bbd8, 0xc002596a20}, {{}, 0x0, {0x9301a85, 0x5}, {0xc000b8dfc0, 0x1a}, 0x0}) net/http/transport.go:1625 +0x7e8 net/http.(*Transport).dialConnFor(0xae8bc10?, 0xc003340370) net/http/transport.go:1467 +0x9f created by net/http.(*Transport).queueForDial in goroutine 6562349 net/http/transport.go:1436 +0x3cb ```
github-actions Bot
pushed a commit
that referenced
this pull request
Jun 11, 2024
#35501 incorrectly checked the length on the local servers variable instead of `t.c.servers` which could lead to panics like the one below. ```bash panic: runtime error: slice bounds out of range [1:0] goroutine 6558252 [running]: github.com/gravitational/teleport/lib/web/app.(*transport).DialContext(0xc00296d5f0, {0xae8bbd8, 0xc002596a20}, {0x42c525?, 0xc001dc4d80?}, {0x120?, 0x118?}) github.com/gravitational/teleport/lib/web/app/transport.go:264 +0x5dc net/http.(*Transport).dial(0xc002596a20?, {0xae8bbd8?, 0xc002596a20?}, {0x92ff0a2?, 0x4e4fc13?}, {0xc000b8dfc0?, 0xc00226f000?}) net/http/transport.go:1183 +0xd2 net/http.(*Transport).dialConn(0xc002f9cb40, {0xae8bbd8, 0xc002596a20}, {{}, 0x0, {0x9301a85, 0x5}, {0xc000b8dfc0, 0x1a}, 0x0}) net/http/transport.go:1625 +0x7e8 net/http.(*Transport).dialConnFor(0xae8bc10?, 0xc003340370) net/http/transport.go:1467 +0x9f created by net/http.(*Transport).queueForDial in goroutine 6562349 net/http/transport.go:1436 +0x3cb ```
github-actions Bot
pushed a commit
that referenced
this pull request
Jun 11, 2024
#35501 incorrectly checked the length on the local servers variable instead of `t.c.servers` which could lead to panics like the one below. ```bash panic: runtime error: slice bounds out of range [1:0] goroutine 6558252 [running]: github.com/gravitational/teleport/lib/web/app.(*transport).DialContext(0xc00296d5f0, {0xae8bbd8, 0xc002596a20}, {0x42c525?, 0xc001dc4d80?}, {0x120?, 0x118?}) github.com/gravitational/teleport/lib/web/app/transport.go:264 +0x5dc net/http.(*Transport).dial(0xc002596a20?, {0xae8bbd8?, 0xc002596a20?}, {0x92ff0a2?, 0x4e4fc13?}, {0xc000b8dfc0?, 0xc00226f000?}) net/http/transport.go:1183 +0xd2 net/http.(*Transport).dialConn(0xc002f9cb40, {0xae8bbd8, 0xc002596a20}, {{}, 0x0, {0x9301a85, 0x5}, {0xc000b8dfc0, 0x1a}, 0x0}) net/http/transport.go:1625 +0x7e8 net/http.(*Transport).dialConnFor(0xae8bc10?, 0xc003340370) net/http/transport.go:1467 +0x9f created by net/http.(*Transport).queueForDial in goroutine 6562349 net/http/transport.go:1436 +0x3cb ```
github-merge-queue Bot
pushed a commit
that referenced
this pull request
Jun 11, 2024
* Fix panic in app dialing #35501 incorrectly checked the length on the local servers variable instead of `t.c.servers` which could lead to panics like the one below. ```bash panic: runtime error: slice bounds out of range [1:0] goroutine 6558252 [running]: github.com/gravitational/teleport/lib/web/app.(*transport).DialContext(0xc00296d5f0, {0xae8bbd8, 0xc002596a20}, {0x42c525?, 0xc001dc4d80?}, {0x120?, 0x118?}) github.com/gravitational/teleport/lib/web/app/transport.go:264 +0x5dc net/http.(*Transport).dial(0xc002596a20?, {0xae8bbd8?, 0xc002596a20?}, {0x92ff0a2?, 0x4e4fc13?}, {0xc000b8dfc0?, 0xc00226f000?}) net/http/transport.go:1183 +0xd2 net/http.(*Transport).dialConn(0xc002f9cb40, {0xae8bbd8, 0xc002596a20}, {{}, 0x0, {0x9301a85, 0x5}, {0xc000b8dfc0, 0x1a}, 0x0}) net/http/transport.go:1625 +0x7e8 net/http.(*Transport).dialConnFor(0xae8bc10?, 0xc003340370) net/http/transport.go:1467 +0x9f created by net/http.(*Transport).queueForDial in goroutine 6562349 net/http/transport.go:1436 +0x3cb ``` * prevent modifying servers if changed
github-merge-queue Bot
pushed a commit
that referenced
this pull request
Jun 11, 2024
* Fix panic in app dialing #35501 incorrectly checked the length on the local servers variable instead of `t.c.servers` which could lead to panics like the one below. ```bash panic: runtime error: slice bounds out of range [1:0] goroutine 6558252 [running]: github.com/gravitational/teleport/lib/web/app.(*transport).DialContext(0xc00296d5f0, {0xae8bbd8, 0xc002596a20}, {0x42c525?, 0xc001dc4d80?}, {0x120?, 0x118?}) github.com/gravitational/teleport/lib/web/app/transport.go:264 +0x5dc net/http.(*Transport).dial(0xc002596a20?, {0xae8bbd8?, 0xc002596a20?}, {0x92ff0a2?, 0x4e4fc13?}, {0xc000b8dfc0?, 0xc00226f000?}) net/http/transport.go:1183 +0xd2 net/http.(*Transport).dialConn(0xc002f9cb40, {0xae8bbd8, 0xc002596a20}, {{}, 0x0, {0x9301a85, 0x5}, {0xc000b8dfc0, 0x1a}, 0x0}) net/http/transport.go:1625 +0x7e8 net/http.(*Transport).dialConnFor(0xae8bc10?, 0xc003340370) net/http/transport.go:1467 +0x9f created by net/http.(*Transport).queueForDial in goroutine 6562349 net/http/transport.go:1436 +0x3cb ``` * prevent modifying servers if changed
github-merge-queue Bot
pushed a commit
that referenced
this pull request
Jun 11, 2024
* Fix panic in app dialing #35501 incorrectly checked the length on the local servers variable instead of `t.c.servers` which could lead to panics like the one below. ```bash panic: runtime error: slice bounds out of range [1:0] goroutine 6558252 [running]: github.com/gravitational/teleport/lib/web/app.(*transport).DialContext(0xc00296d5f0, {0xae8bbd8, 0xc002596a20}, {0x42c525?, 0xc001dc4d80?}, {0x120?, 0x118?}) github.com/gravitational/teleport/lib/web/app/transport.go:264 +0x5dc net/http.(*Transport).dial(0xc002596a20?, {0xae8bbd8?, 0xc002596a20?}, {0x92ff0a2?, 0x4e4fc13?}, {0xc000b8dfc0?, 0xc00226f000?}) net/http/transport.go:1183 +0xd2 net/http.(*Transport).dialConn(0xc002f9cb40, {0xae8bbd8, 0xc002596a20}, {{}, 0x0, {0x9301a85, 0x5}, {0xc000b8dfc0, 0x1a}, 0x0}) net/http/transport.go:1625 +0x7e8 net/http.(*Transport).dialConnFor(0xae8bc10?, 0xc003340370) net/http/transport.go:1467 +0x9f created by net/http.(*Transport).queueForDial in goroutine 6562349 net/http/transport.go:1436 +0x3cb ``` * prevent modifying servers if changed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The case where no app servers were available was not handled and resulted in exceeding the bounds of the app servers slice. When no servers are available now the slice is set to nil instead of trying to shift it beyond the bounds. A test was added to validate that the panic is not possible any more.
Fixes #35460
Changelog: Prevent panic when dialing a deleted Application Server