dotnet / dotnet/runtime

[release/10.0] Backport #127638: Fix !m_RedirectContextInUse assert in RestoreContextSimulated on win-x86

Open
#130,767 3 comments 1 reaction 2 assignees Claimed by @VSadov View on GitHub
area-System.Threading
Dominant language
C#
Stars
18.3k
Forks
5.6k
PR merge metrics
PR metrics pending

Description

### Summary

This is a request to backport **PR #127638** to the `release/10.0` branch so it ships in a future .NET 10 servicing update.

The original bug is tracked in #127637 (now closed). The fix was merged to `main` on 2026-05-01 (merge commit `bd9e85e4b37557e649fccc083f33a50acdda2dde`) but has **not** been backported to `release/10.0`. I verified that `v10.0.8`, `v10.0.9`, and `v10.0.10` all still contain the buggy code:

- `Thread::RestoreContextSimulated` still calls `HandleThreadAbort()` while `m_RedirectContextInUse` is `true`
- The x86 `RestoreContextSimulated` call still happens **before** `COMPlusCheckForAbort()`

### Why this matters

This is not just a Windows 7 compatibility issue. The root cause is a **correctness bug in the x86 `RestoreContextSimulated` path** that can affect **any x86 .NET 10 process** running in an environment where `RtlRestoreContext` is unavailable in `ntdll.dll` (x86 Win7, WOW64 on Win7, and potentially other setups).

The double-redirect race silently corrupts the saved thread context and causes **random, hard-to-diagnose crashes** — exactly the kind of issue that LTS users will hit in production.

### Why it's safe to backport

- The change is minimal: **+10 / -12 lines** in a single file (`src/coreclr/vm/threadsuspend.cpp`)
- It only reorders the abort check before the context-restore call and removes the inlined `HandleThreadAbort()` from `RestoreContextSimulated`
- It was authored/reviewed by the runtime team (jkotas) and is already live on `main`

### Request

Could this please be backported to `release/10.0` for an upcoming servicing release? .NET 10 is an LTS release supported through November 2028, so a large number of users will remain on it for years.

Related:
- Original issue: #127637
- Fix PR (merged to main): #127638

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.