Skip to content

Fix potential deadlock in between VM exit callback and session shutdown - #41910

Merged
Blue (OneBlue) merged 2 commits into
masterfrom
user/oneblue/fix-race-10
Oct 14, 2026
Merged

Blue (OneBlue) merged 2 commits into
masterfrom
user/oneblue/fix-race-10

Conversation

@OneBlue

Copy link
Copy Markdown
Collaborator

Summary of the Pull Request

This change solves a potential deadlock: If the VM exits, its HCS callback will invoke m_onExit, which calls ends up locking the session's m_instanceLock. If the session is being shut down, _VmTerminate() resets m_utilityVm() while holding the instance lock, which blocks the HCS callback is waiting on the same lock.

This change solves the issue by making the VM exit callback run its cleanup in a threadpool task and adding logic to wait for that threadpool work to complete on the shutdown paths

PR Checklist

  • Closes: Link to issue #xxx
  • Communication: I've discussed this with core contributors already. If work hasn't been agreed, this work might be rejected
  • Tests: Added/updated if needed and all pass
  • Localization: All end user facing strings can be localized
  • Dev docs: Added/updated if needed
  • Documentation updated: If checked, please file a pull request on our docs repo and link it here: #xxx

Detailed Description of the Pull Request / Additional comments

Validation Steps Performed

@OneBlue
Blue (OneBlue) requested a review from a team as a code owner October 13, 2026 20:58
Copilot AI balanced review requested due to automatic review settings October 13, 2026 20:58

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Session destruction must drain VM-exit work before releasing its callback context.

1 open finding
What changed in this PR

Moves VM-exit cleanup off the HCS callback thread to prevent shutdown deadlocks.

Changes:

  • Queues VM-exit cleanup through a thread-pool work item.
  • Drains pending work during permanent shutdown.
  • Prevents VM recreation after permanent shutdown begins.
File Description
WslCoreVm.cpp Invokes termination callback synchronously.
LxssUserSession.h Adds VM-exit work state.
LxssUserSession.cpp Queues and coordinates VM-exit cleanup.

🧠 Review effort: Balanced


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread src/windows/service/exe/LxssUserSession.cpp

@dkbennett David Bennett (dkbennett) left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Regression test would be nice but these are not easy things to reliably test so don't consider it blocking.

@OneBlue
Blue (OneBlue) merged commit 4d24362 into master Oct 14, 2026
12 checks passed
@OneBlue
Blue (OneBlue) deleted the user/oneblue/fix-race-10 branch October 14, 2026 19:52
Daman Mulye (damanm24) added a commit that referenced this pull request Oct 16, 2026
* repo: modify CODEOWNERS to change wsl-maintainers to wsl-reviewers team (#41617)

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>

* Localization change from build: 157736413 (#41621)

Co-authored-by: WSL localization <noreply@microsoft.com>

* CLI: Global option scopes for nested commands (related to compose support) (#41546)

* Change default relay  buffer size to 64KiB (#41603)

The current logic uses a fixed 4KiB buffer for stdio relay on the Windows side. And uses an initial 4KiB buffer for stdio relay on the Linux side, which grows only if the message won't fit. This can severely limit the relay performance in some situations. For example, in #41572, when redirecting stdout to a SMB share.

This PR increases thedefault relay buffer size to 64KiB. Which shows significant performance improvements according to buffer size tests.

* Fix redirect stdout and stderror to the same file overlapping (#41611)

Currently the stdout and stderr relay tracks the output offset separately. And when redirected to the same file, the writes could overlap.

This PR uses the append mode for overlap io writes instead of the separate offsets in the relay. So, the file write offset is correctly tracked by the system.

* move installer log collection after repro (#41620)

The installer log files were collected before the log collection starts. Which will miss the user repro.

This PR moves it after the user repro.

* wslc: add --digests to image list for docker parity (#41457)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Localization change from build: 157843092 (#41630)

Co-authored-by: WSL localization <noreply@microsoft.com>

* Explicitely return SOCKET from WSLCPluginAPI_ProcessGetFd() (#41626)

* In mirrored mode, handle route update as add instead of replace (#41391)

In mirrored mode, handle route update as add instead of replace
Remove usage of route update as it can overwrite routes on other interfaces. add tests that verify host routing changes are correctly reflected in Linux

---------

Co-authored-by: Catalin-Emil Fetoiu <cfetoiu@microsoft.com>

* Add wslc events command (#41608)

* Don't fail the UnitTests::Warnings test case if GlobalSecureAccess VPN is running (#41638)

* Don't fail the UnitTests::Warnings test case if GlobalSecureAccess VPN is running

* Cleanup diff

* Fix test

* Wait for wslservice to be started when running tests (#41639)

* Wait for wslservice to be started when running tests

* Fail on timeout

* Improve check

* Format

* Create new namespaces for distro cgroups (#41512)

In 2.9.8, the distro processes are separated into their own cgroups. But they remain in the same cgroup namespace. That caused compatibility issues with softwares that assume a fixed systemd cgroup layout. For example, rootless docker and nerdctl.
Fixes on Moby and nertctl are being worked on. However, to avoid issues with other software, WSL's cgroup handling should also be improved.

This PR creates new cgroup namespaces for the distros. So, to the non-critical distro processes, the systemd cgroup layout stays the same as before.
This PR also introduces a cgroup structure change to accomplish this. The systemd init is moved from wsl-user/distro-N/systemd to wsl-user/distro-N. And the initialization of the distro-N controllers is handled by systemd instead.
The processes are also moved into the non-systemd cgroup in systemdless distros. This makes sure that sub-group controllers can be enabled in the distro root.
Cgroup v2 is now enforced when distro isolation is enabled. Instead of constructing an unusable cgroup v1 layout when cgroup v1 and distro isolation are both enabled.

* Fix unnecessary delay in the port tracking loop (#41472)

Before this change, an additional 10ms delay was added in the port tracker loop presumably to make the main loop slower than the worker loop. So, the worker result does not get super dated. This is not reliable. And the 10ms delay also slows down every consecutive bind call.

This PR refactors the thread synchronization method. So, the timing between those two loops is more deterministic. And removes the performance penalty for all bind calls.

* Localization change from build: 157954210 (#41643)

Co-authored-by: WSL localization <noreply@microsoft.com>

* wslc: add --follow-link to cp (#41501)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Disable unstable bind cap test and re-enable Loopback test that was incorrectly disabled- #41648 (#41648)

Co-authored-by: Catalin-Emil Fetoiu <cfetoiu@microsoft.com>

* Move objects shared by wslc.exe and the tests to src/windows/common (#41619)

* Move objects shared by wslc.exe and the tests to src/windows/common

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Link yaml-cpp, advapi32 and Crypt32 into common

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Drop yaml-cpp, advapi32 and crypt32 from wslclib now that common provides them

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Move wslc code in common under common/wslc and namespace CLI types as wslc::cli

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix various protocol parsing issues (#41637)

* Save state

* Use proper arrays

* Format

* Add new tests

* Cleanup tests

* Cleanup diff

* Format

* Apply PR feedback

* Apply PR feedback

* Format

* Apply PR feedback

* Move logging call

* Apply PR feedback

* Apply PR feedback

* Localization change from build: 157980831 (#41647)

Co-authored-by: WSL localization <noreply@microsoft.com>

* Add WSLC network lifecycle events (#41576)

* Add WSLC network lifecycle events

* Localize pending network prune errors

* Fix network operation wait ownership and cleanup ordering

* Fix prune event correlation after timed-out

* Fix network event rollback and timeout recovery

* Format

* Forward Docker network events directly

* Restore lock_guard after removing event waits

* fix test

* align event stream test helpers after merge

* feedback

* Fix potential out of bound access when pretty-printing string field in init messages (#41664)

* Localization change from build: 158197536 (#41662)

Co-authored-by: WSL localization <noreply@microsoft.com>

* simplify event reader cleanup and remove unused include (#41667)

* Fix ipv4 forwarding when both v4 and v6 ports are listening

* Fix config's handling of non-ascii characters (#41657)

When parsing the config file, non-ascii utf-16 values are casted into char. This will mangle non-ascii values in the config file. For example, a custom kernel path containing Chinese characters will cause WSL_E_CUSTOM_KERNEL_NOT_FOUND.

This PR removes the faulty static cast and stores the config value in wstring instead of string. So non-ascii values are preserved.

* Prevent potential invalid access for string array pretty print (#41673)

* resolve comments (#41642)

This is a follow up to PR #41512

Remove the redundant restore cgroup namespace code.
Simplify the cgroup check logic by moving the retry inside the debug shell.
Add a new systemd boot timeout test.

* Use a static CRT in debug builds (#41684)

* Fix potential test failure in BrokenDistroImport by not assuming the disk's block device in WSL (#41686)

* Update releaseScripts reference from v1 to v2 (#41687)

* INcrease the VM termination timeout to 30 seconds (#41688)

* Impersonate the caller before making various filesystem operations (#41689)

* Impersonate the caller before making various filesystem operations

* Apply PR feedback

* Support STDIN through SDK (#41698)

* stdin flag

* add winrt test, fix coroutine bug in streams

* Followup to STDIN PR (#41703)

* Add ability to format your branch (#41699)

* Remove references to WSLC being in a preview (#41704)

* Don't write to the install log file if it's a reparse point (#41705)

* Use the latest ESRP signing key code (#41640)

* Use the latest ESRP signing key code

* Only change key code

* Restore original pipeline line endings

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Refactor event stream cancellation waits (#41696)

* Don't expect the brd module logline to stabilize the CustomDmesgOutput test case (#41714)

* Use WSL icon for developer docs (#41715)

* Use WSL icon for developer docs

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: ce78a21f-e946-4e9c-b2ea-934a5b0935f3

* Reuse docs logo as favicon

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: ce78a21f-e946-4e9c-b2ea-934a5b0935f3

---------

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
Copilot-Session: ce78a21f-e946-4e9c-b2ea-934a5b0935f3

* Fix: update drvfs gid uid after default uid is set in oobe (#41521)

For a newly installed distro, the drvfs are initially mount as 0:0. And is not updated after oobe sets the default uid. This could cause access issues before the distro is restarted.

This PR updates the auto mounted drvfs gid uid before completing the oobe. The non-auto mounted shares are not remounted to avoid breaking user set gid uid values.

* Update WSLC SDK API documentation (#41677)

* Update WSLC SDK API documentation

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update docs

* Update docs

* Quick fixes

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Craig Loewen <crloewen@microsoft.com>

* Updated README (#41723)

* Expose kernel headers and perf to distributions (#41400)

* Expose kernel headers and perf to distributions

Mount kernel-matched headers and perf tooling from the artifacts VHD into each distribution, expose perf through the default environment, and cover the resulting paths and replacement behavior.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: cdebc331-ad3e-492e-9591-c25587c859c5

* Address kernel artifact review feedback

Correct the documented header target and directory fallback, and log failures while removing mount path environment variables.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: cdebc331-ad3e-492e-9591-c25587c859c5

---------

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
Copilot-Session: cdebc331-ad3e-492e-9591-c25587c859c5

* Use iterators in FromJson to avoid copies (#41641)

* Use iterators in FromJson to avoid copies

* Cleanup

* Fix template build

* Format

* Use a retry with timeout in HostPortCantBeBoundByGuest (#41728)

* Run the nightly tests on ge-current (#41725)

* Don't fail configuring the consommé loopback adapter when ipv6 is disabled (#41729)

* Enable experimental sparse VHD creation (#41726)

* Refine sparse VHD creation policy

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Enable experimental sparse VHD creation in WSL

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Make sparse VHD unsafe flag optional

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Keep fixed VHD creation non-sparse

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update Microsoft.RemoteDesktop.Client.MSRDC.SessionHost to version 1.2.7391 (#41730)

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>

* Fix WSL container event timestamps (#41717)

* Revert "Enable RedirectionGuard process mitigation" (#41744)

* Revert "Enable RedirectionGuard process mitigation (#41542)"

This reverts commit e53598d.

* Add comments

* Fix comment

* Add --format json to wslc events (#41734)

* Update the DACL to only allow access to the user when creating virtual disks (#41678)

* Update the DACL to only allow access to the user when creating virtual disks

* Save state

* Increase test coverage

* Fix test

* Apply PR feedback

* Apply PR feedback

* Format

* Apply PR suggestions

* Apply PR suggestions

* Clarify container image localization context (#41743)

Add translator guidance distinguishing container images from pictures or photos for the affected WSLC strings.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
Copilot-Session: 88d3d4b4-5a0e-4d97-9ed4-0fcd856e61de

* Add RLCPlus-9 and RLCPlus-10 (Rocky Linux Plus, CIQ) (#41323)

* Add RLCPlus-9 and RLCPlus-10 (Rocky Linux Plus, CIQ)

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Re-trigger CI: xattr check confirmed clean (no security.selinux attributes found), all four combinations remain boot-tested

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Fix race condition on system distro & init port access (#41762)

* archlinux: Release 2026.10.01.179549 (#41755)

This is an automated release [1].

[1] https://gitlab.archlinux.org/archlinux/archlinux-wsl/-/blob/main/.gitlab-ci.yml

* Enable automatic vNUMA for large WSL VMs (#41741)

* Enable automatic vNUMA for WSL VMs

Add the HCS NUMA topology object so HCS can derive a supported virtual topology for large processor counts instead of requiring WSL to clamp the VM to 256 processors.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: ea0c67c5-0211-479b-a7b5-59aebb19b71c

* Gate automatic vNUMA on Germanium

Preserve the existing single-node HCS configuration on older Windows builds where vNUMA topology creation is unsupported.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: ea0c67c5-0211-479b-a7b5-59aebb19b71c

* Remove vNUMA test coverage

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: ea0c67c5-0211-479b-a7b5-59aebb19b71c

---------

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
Copilot-Session: ea0c67c5-0211-479b-a7b5-59aebb19b71c

* Exclude wslc.exe and wslcsession.exe from custom LSP providers (#41767)

* Exclude wslc.exe and wslcsession.exe from custom LSP providers

* Include container.exe

* Localization change from build: 159271766 (#41772)

Co-authored-by: WSL localization <noreply@microsoft.com>

* Reuse EmptyObject for HCS NUMA configuration (#41768)

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Implement container health notifications to wslc events (#41763)

* Save state

* Increase test coverage

* Remove useless state

* Replace TableOutput with TableData model and TableRenderer (#41700)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* refactor container cp task to be simpler and move logic to container service and common filesystem helpers (#41668)

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Use a fallback gateway if no ipv4 gateway is available in consommé networking (#41779)

* Record Docker die and stop events with parity (#41770)

* Save state (#41780)

* Localization change from build: 159357096 (#41786)

Co-authored-by: WSL localization <noreply@microsoft.com>

* Update issue template for WSLC (#41778)

* Update issue tempalte for WSLC

* Fix description

* Run the nightly tests on Windows Server 2025 (#41760)

* Run the nightly tests on ge-current

* Run the nightly tests on Windows Server 2025

* Skip some network tests

* Update name

* Fix mirrored check

* Use the server field

* Localization change from build: 159470205 (#41800)

Co-authored-by: WSL localization <noreply@microsoft.com>

* Fix various issues preventing the ModernOOBE test from running multiple times on the same test_distro (#41781)

* Remove unused delay-load options (#41804)

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Disable pushing to the store by default (#41782)

* Scope down the ephemeral port range in various consommé tests (#41805)

* Fix race condition in LifetimeManager (#41807)

* Use DistroFileChange instead of going through wsl.localhost (#41810)

* Explicitely setup impersonation when instanciating IWslSupport (#41815)

* Wait for bound ports to be released by the port relay in the tests (#41817)

* Support reading the wslc image build context from stdin (#41765)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update Microsoft.WSL.Kernel to 6.18.54.1 (#41822)

* Add logic to reject commands with extra arguments (#41821)

* Add logic to reject commands with extra arguments

* Simplify tests

* Improve wslc event filters (#41809)

* Localization change from build: 159727887 (#41826)

Co-authored-by: WSL localization <noreply@microsoft.com>

* Make the binfmt mount writable (#41808)

* Make the binfmt mount writeable

* Apply PR suggestions

* Match container and network filters across event types (#41818)

* Fix incorrect wsl.conf warnings being displayed when creating a new distribution (#41820)

* Convert EnsureCaseSensitiveDirectoryRecursive to iterative traversal (#40347)

* Convert EnsureCaseSensitiveDirectoryRecursive to iterative traversal

Replace unbounded recursive depth-first traversal with an iterative
approach using an explicit stack. A deeply nested directory tree could
overflow the thread stack during the recursive calls.

The iterative version collects directories in reverse post-order during
traversal, then marks them bottom-up (children before parents),
preserving the ordering invariant that EnsureCaseSensitiveDirectory
relies on for its early-exit optimization.

Bug: 61964147, 61974992, 61911308, 61463090

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add deep-nesting regression test for case-sensitive recursion

The original recursive EnsureCaseSensitiveDirectoryRecursive could blow
the Windows 1 MB thread stack at a few hundred levels of nesting because
each frame carried a FILE_ID_BOTH_DIR_INFORMATION enumeration buffer.
The iterative implementation in this PR moves that state to the heap, so
a very deep tree must complete without crashing.

The test creates a 1024-level chain via the \\\\?\\ long-path prefix
(cumulative path length exceeds MAX_PATH) and then calls
EnsureCaseSensitiveDirectory on the root. Cleanup goes through the same
long-path prefix so remove_all can see every component.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add publishing to DCAT, nuget to the release pipeline (#41549)

* Add a testpass on rs_base2 (#41832)

* Run the nightly tests on rs_base2

* Update tests for os change

* Update tests

* Localization change from build: 159856815 (#41839)

Co-authored-by: WSL localization <noreply@microsoft.com>

* Fix the security model link in SECURITY.md (#41835)

#41605 moved the security model to doc/docs/technical-documentation/security.md; the link in SECURITY.md still pointed at doc/docs/security.md.

* Fix RLCPlus distribution manifest formatting (#41841)

Restore canonical JSON indentation without changing distribution data so the distribution validation workflow passes its formatting check.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
Copilot-Session: aa251cac-d075-47a8-8757-92e013a714d8

* Update GitPython to resolve Dependabot alerts (#41840)

Upgrade both Python tooling requirement pins to 3.1.62, which fixes all four advisories reported across eight Dependabot alerts.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
Copilot-Session: aa251cac-d075-47a8-8757-92e013a714d8

* Fix CaseSensitivityDeepNesting test build failure (#41849)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Reorganize test/windows into common/, wsl/, and wslc/ (#41661)

* Reorganize test/windows and split WSLCTests.cpp into per-domain files

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Split wslc tests into per-layer directories and move common unit tests under common/unit

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Flatten test/windows into common/, wsl/, wslc/ and move wslc helpers to common

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Port master's WSLC event and network tests into the split test files

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Revert WSLCTests.cpp split so the change is file moves only

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Update test layout guidance for common/wsl/wslc split

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Make CaseSensitivityDeepNesting testDir static constexpr so the lambda can use it

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Drop static from CaseSensitivityDeepNesting testDir so it can be captured

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix e2fsck return code 1 treated as failure in resize (#41720)

e2fsck -f -y returns 1 or 2 when there were errors fixed. However, the resize implementation currently only accepts 0 as a success.

This PR adds 1 and 2 to the accepted return codes.

* Document WSL architecture and contributor commands for Copilot (#41843)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
Copilot-Session: 25aa9436-0656-41c8-a222-d81d6414a9e6

* Add WSLC volume events (#41831)

* Fix incorrect AAAA DNS resolution for static DNS records causing resolution failure in musl (#41859)

* Fix race condition causing potential use-after-free in NatNetworking (#41850)

* Acquire m_instanceLock before calling _ValidateDistributionNameAndPathNotInUse() (#41855)

* Acquire m_instanceLock before calling _ValidateDistributionNameAndPathNotInUse

* Cleanup diff

* Cleanup diff

* Make the store publish stage opt-in (#41857)

* Remove the gate before publishing nuget packages, and rename to avoid confusion (#41858)

* Remove the gate before publishing nuget packages, and rename to avoid confusion

* Complete nuget

* Fail bind() requests that fail in Windows (#41856)

* Don't add swiotlb=force with the hv_pci swiotlb pool (#41829)

The hv_pci pool is created with force_bounce set, so virtio devices
bounce through it without the global flag. swiotlb=force only made every
other device, mainly hv_storvsc, bounce all its I/O through the default
64 MB pool, which runs out under load (#41828).

* Fix potential crash caused by error during session initialization (#41887)

* Add a /hyperv to triage hyper-v issues (#41885)

* Localization change from build: 160297307 (#41890)

Co-authored-by: WSL localization <noreply@microsoft.com>

* Increase the default commited stack size to 64KB (#41888)

* Increase the default commited stack size to 64KB

* Fix formatting of stack size comment in CMakeLists

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* suppress systemctl is-system-running pulling error messages (#41881)

The systemctl is-system-running polling can produce error messages like Failed to connect to bus: No such file or directory before d-bus is ready. And those error messages are duplicated into /dev/kmsg by wsl.

This PR suppresses the error messages as those are not useful for the polling result.

* Disable unsafe move constructors in ScopedRelay (#41897)

* Wait for the drvfs initialization thread to exit before destroying WslCoreVm (#41895)

* Fix potential crash by use-after-free by in the stdin relay thread (#41894)

* Release resources that could call callbacks before returning from HcsVirtualMachine's constructor on failure (#41908)

* Narrow volume event publish ordering comments (#41889)

* Apply clang-format to merged files

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: f2cf5bc5-64ce-4bfc-a921-ae7ca379ad64

* Add wslc cp alias for wslc container cp (#41902)

* Add wslc cp alias for wslc container cp

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Move wslc cp usage examples under generated usage line with color

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Use cp short description key and add cp help example tests

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Remove cp help examples

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix potential starvation in COMImplClass::Disconnect (#41912)

* Use repository NuGet configuration for out-of-tree builds (#41916)

* Fix a potential use-after-free between plugin calls and WSLCSessionManagerImpl's destruction (#41911)

* Save state

* Simplify reset logic

* Prepare for PR

* Add missing synchronization around load WinHttp proxy methods (#41909)

* Add missing synchronization around load WinHttp proxy methods

* Fix loading logic

* Fix missing synchronization on m_httpProxyStateTracker access (#41907)

* Fix missing synchronization on m_httpProxyStateTracker access

* Update header

* Use the instance lock instead

* Format

* Fix potential deadlock in between VM exit callback and session shutdown (#41910)

* Fix potential deadlock in between VM exit callback and ~LxssUserSessionImpl

* Cleanup diff

* Fix potential use-after-free in EpollWatcher (#41896)

* Match docker -v parsing: LTR spec parser, shared validation, config-v… (#41905)

* Match docker -v parsing: LTR spec parser, shared validation, config-volume anonymous volumes

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Reject extra colons in -v mode section

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Mount bind volumes during cp on non-running containers (#41906)

* Mount bind volumes during cp on non-running containers

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Mirror issue repro in bind mount cp test

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Throw on deleted container in archive mounts, generate test tar in container

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* reap sub processes during shutdown to unblock systemd (#41899)

After the cgroup isolation change. The process tree looks like this:
```
init (systemd)                 in the distro cgroup namespace
    init (wsl)                 in the root cgroup namespace
        login                  in the distro cgroup namespace
```
And the poweroff sequence is:

WSL init resets the signal handlers, which sets SIGCHLD to default.
WSL init calls systemctl poweroff
systemd kills processes in it's cgroup namespace like the login process. And skips processes like the wsl init in the root namespace.
The WSL init does not reap the killed sub process. Making it a zombie in the distro namespace.
Systemd waits for the zombie processes and blocks.
The timeout in init finally shutsdown with RB_POWER_OFF.
This could cause the terminate to wait for the timeout and slow down the termination.

This PR adds a waitpid loop that reaps any subprocesses of the WSL init during systemd poweroff. So systemd is no longer stuck by the zombie processes. And it calls BR_POWER_OFF itself to kill the WSL processes in the same PID namespace but in the root cgroup namespace.

* Localization change from build: 160603855 (#41933)

Co-authored-by: WSL localization <noreply@microsoft.com>

* Fix incorrect srwlock usage in when initializing drvfs (#41925)

* Fix potential deadlock in WSL1 instance termination (#41922)

* Fix potential deadlock in WSL1 instance termination

* Differenciate using instance ids

* Prepare for PR

* Fix potential use-after-free if the WSLC VM is killed while the last session COM reference is being released (#41946)

---------

Co-authored-by: Ben Hillis <benhillis@gmail.com>
Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
Co-authored-by: Blue <OneBlue@users.noreply.github.com>
Co-authored-by: WSL localization <noreply@microsoft.com>
Co-authored-by: David Bennett <dbennett-msft@outlook.com>
Co-authored-by: Feng Wang <wang6922@outlook.com>
Co-authored-by: ggarzia-MSFT <gavingarzia@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: FetoiuCatalin <fetoiucatalin@gmail.com>
Co-authored-by: Catalin-Emil Fetoiu <cfetoiu@microsoft.com>
Co-authored-by: beena352 <beenachauhan@microsoft.com>
Co-authored-by: Flor Chacón <14323496+florelis@users.noreply.github.com>
Co-authored-by: JohnMcPMS <johnmcp@microsoft.com>
Co-authored-by: Keith Horton <khorton@microsoft.com>
Co-authored-by: Craig Loewen <crloewen@microsoft.com>
Co-authored-by: Patrick Swartz <patrick@swartzclan.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Arch Linux Technical User <65091038+archlinux-github@users.noreply.github.com>
Co-authored-by: Mitchell Levy <46305051+chessturo@users.noreply.github.com>
Co-authored-by: Franco Ceballos Rastello <f.ceballos.rastello@gmail.com>
Co-authored-by: Oleg Tsvetkov <oleg-tsv@yandex.ru>
Co-authored-by: Tuna Birgün <tunabirgun@gmail.com>
Copilot-Session: ce78a21f-e946-4e9c-b2ea-934a5b0935f3
Copilot-Session: cdebc331-ad3e-492e-9591-c25587c859c5
Copilot-Session: 88d3d4b4-5a0e-4d97-9ed4-0fcd856e61de
Copilot-Session: ea0c67c5-0211-479b-a7b5-59aebb19b71c
Copilot-Session: aa251cac-d075-47a8-8757-92e013a714d8
Copilot-Session: 25aa9436-0656-41c8-a222-d81d6414a9e6
Copilot-Session: f2cf5bc5-64ce-4bfc-a921-ae7ca379ad64
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants