Previously, a channel registered in the mux's chanList is not usable until it is established. A malicious peer was able flood the channel's incomingRequests, deadlocking the entire connection. Now, we add an atomic established state, set when a channel becomes usable. Until such a time, handlePacket drops every packet other than the open confirmation/failure, without blocking and without tearing down the connection.
{
"binaries": [
{
"binary_name": "golang",
"binary_version": "2:1.6-1ubuntu4"
},
{
"binary_name": "golang-any",
"binary_version": "2:1.6-1ubuntu4"
},
{
"binary_name": "golang-go",
"binary_version": "2:1.6-1ubuntu4"
},
{
"binary_name": "golang-race-detector-runtime",
"binary_version": "2:1.6-1ubuntu4"
},
{
"binary_name": "golang-src",
"binary_version": "2:1.6-1ubuntu4"
}
]
}{
"binaries": [
{
"binary_name": "gccgo-go",
"binary_version": "2:1.10~4ubuntu1"
},
{
"binary_name": "golang",
"binary_version": "2:1.10~4ubuntu1"
},
{
"binary_name": "golang-any",
"binary_version": "2:1.10~4ubuntu1"
},
{
"binary_name": "golang-go",
"binary_version": "2:1.10~4ubuntu1"
},
{
"binary_name": "golang-race-detector-runtime",
"binary_version": "2:1.10~4ubuntu1"
},
{
"binary_name": "golang-src",
"binary_version": "2:1.10~4ubuntu1"
}
]
}{
"binaries": [
{
"binary_name": "gccgo-go",
"binary_version": "2:1.13~1ubuntu2"
},
{
"binary_name": "golang",
"binary_version": "2:1.13~1ubuntu2"
},
{
"binary_name": "golang-any",
"binary_version": "2:1.13~1ubuntu2"
},
{
"binary_name": "golang-go",
"binary_version": "2:1.13~1ubuntu2"
},
{
"binary_name": "golang-race-detector-runtime",
"binary_version": "2:1.13~1ubuntu2"
},
{
"binary_name": "golang-src",
"binary_version": "2:1.13~1ubuntu2"
}
]
}{
"binaries": [
{
"binary_name": "gccgo-go",
"binary_version": "2:1.18~0ubuntu2"
},
{
"binary_name": "golang",
"binary_version": "2:1.18~0ubuntu2"
},
{
"binary_name": "golang-any",
"binary_version": "2:1.18~0ubuntu2"
},
{
"binary_name": "golang-go",
"binary_version": "2:1.18~0ubuntu2"
},
{
"binary_name": "golang-src",
"binary_version": "2:1.18~0ubuntu2"
}
]
}{
"binaries": [
{
"binary_name": "gccgo-go",
"binary_version": "2:1.22~2build1"
},
{
"binary_name": "golang",
"binary_version": "2:1.22~2build1"
},
{
"binary_name": "golang-any",
"binary_version": "2:1.22~2build1"
},
{
"binary_name": "golang-go",
"binary_version": "2:1.22~2build1"
},
{
"binary_name": "golang-src",
"binary_version": "2:1.22~2build1"
}
]
}{
"binaries": [
{
"binary_name": "gccgo-go",
"binary_version": "2:1.26~1"
},
{
"binary_name": "golang",
"binary_version": "2:1.26~1"
},
{
"binary_name": "golang-any",
"binary_version": "2:1.26~1"
},
{
"binary_name": "golang-go",
"binary_version": "2:1.26~1"
},
{
"binary_name": "golang-src",
"binary_version": "2:1.26~1"
}
]
}