Fix socket-bound TLS post-handshake authentication progress (#136475)
Fix a post-handshake authentication race that can leave a socket-bound TLS session waiting indefinitely even though the peer has finished the exchange.
The first native handshake call currently invokes
SSL_peek, which can process a fast peer’s entire response. The driver then returnsNeedMoreDatabecause it considers that call request-flushing only. Subsequent calls wait for socket readability, but the response has already been consumed.Separate request emission from response processing: skip the peek while flushing the initial certificate request, then retain it on subsequent calls. This preserves write-backpressure retries, handshake completion checks, and certificate-validation suspension. Extend the existing TLS 1.2/1.3 theory with idle-peer cases to verify that sending the request alone does not prematurely complete authentication. No timeout increases or test skips.
Validation
- Linux
clr+libsbaseline and native/managed incremental builds passed with zero warnings or errors. The WSL baseline used explicit Git revision metadata for the Windows-created worktree.- Controlled managed fast-peer reproduction: both TLS 1.2/1.3 cases timed out before the fix and passed afterward. The temporary BIO scheduling hook was removed before final validation.
- Full
System.Net.Securityfunctional suite: 5,127 passed, 0 failed, 8 existing conditional skips.- Focused four-case theory repeated five times in each reported configuration (
DOTNET_JitStress=2with tiering enabled, and withDOTNET_JitStressRegs=4and tiering disabled): 40 passed, 0 skipped.- Native schedule/certificate controls: 2,400 cases, zero unexpected outcomes.
Validation used Ubuntu WSL and OpenSSL 3.5.3, not the exact AzureLinux CI image. Older OpenSSL versions and forced write-backpressure were not exercised.
Resolves dotnet/runtime#134222
[!NOTE] This pull request was authored with assistance from GitHub Copilot.
Co-authored-by: Copilot App 223556219+Copilot@users.noreply.github.com
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802047560号
.NET Runtime
This repo contains the code to build the .NET runtime, libraries and shared host (
dotnet) installers for all supported platforms, as well as the sources to .NET runtime and libraries.What is .NET?
Official Starting Page: https://dotnet.microsoft.com
How can I contribute?
We welcome contributions! Many people all over the world have helped make this project better.
Reporting security issues and security bugs
Security issues and bugs should be reported privately to the Microsoft Security Response Center (MSRC) via the MSRC Researcher Portal. You should receive a response within 24 hours. Further information can be found in the Security TechCenter. You can also find these instructions in this repo’s Security doc.
Also see info about related Microsoft .NET Bounty Program.
Filing issues
This repo should contain issues that are tied to the runtime, the class libraries and frameworks, the installation of the
dotnetbinary (sometimes known as themuxer) and the installation of the .NET runtime and libraries.For other issues, please file them to their appropriate sibling repos. We have links to many of them on our new issue page.
Useful Links
.NET Foundation
.NET Runtime is a .NET Foundation project.
There are many .NET related projects on GitHub.
This project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behavior in our community. For more information, see the .NET Foundation Code of Conduct.
General .NET OSS discussions: .NET Foundation Discussions
License
.NET (including the runtime repo) is licensed under the MIT license.