Skip to content

Fix wsl stuck when misconfigured cifs mount presents#14466

Merged
benhillis merged 13 commits intomicrosoft:masterfrom
chemwolf6922:detach-terminal-when-running-mount--a
Mar 20, 2026
Merged

Fix wsl stuck when misconfigured cifs mount presents#14466
benhillis merged 13 commits intomicrosoft:masterfrom
chemwolf6922:detach-terminal-when-running-mount--a

Conversation

@chemwolf6922
Copy link
Copy Markdown
Contributor

Summary of the Pull Request

When the fstab contains misconfigured cifs mounts that require interactive password input. And the distro to be started is the first one. The wsl command will get stuck.
fstab example:

//172.31.128.1/smbtest /home/feng/mnt cifs user,username=smbtestuser,port=445,vers=3.0,sec=ntlmssp 0 0

The output:

> wsl -d Debian
(stuck forever)

This fstab configuration won't work in any configuration. But is should not block wsl from "booting".

This PR adds a setsid call before execv mount so there is no tty for mount.cifs to use. Letting it fail fast when there is interaction required:

> wsl -d Debian
wsl: Processing /etc/fstab with mount -a failed.
$

PR Checklist

  • Closes: WSL Failed to Start #14166 (Partially, there are multiple users reporting different problems in this issue)
  • 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

Unit test results

Same as this PR: #14455
Some tests are failing because of GPO settings. Other failed ones do not seem related. And was not introduced in this change.

Repro

The issue is deterministic on the master branch. And is validated to be fixed with this PR.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR addresses WSL instance startup hangs caused by misconfigured cifs entries in /etc/fstab that attempt interactive password prompting, by ensuring mount -a has no controlling TTY and therefore fails fast instead of blocking boot.

Changes:

  • Extended UtilCreateProcessAndWait with an optional DetachTerminal flag.
  • When DetachTerminal is enabled, the child process calls setsid() prior to execv().
  • Updated /etc/fstab processing (mount -a) to launch with terminal detachment enabled.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
src/linux/init/util.h Adds a DetachTerminal parameter to the UtilCreateProcessAndWait declaration.
src/linux/init/util.cpp Implements optional terminal detachment via setsid() in the forked child.
src/linux/init/config.cpp Uses the new flag for mount -a when processing /etc/fstab to prevent interactive hangs.

You can also share your feedback on Copilot code review. Take the survey.

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings March 18, 2026 09:08
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR addresses WSL getting stuck during boot when /etc/fstab contains a misconfigured cifs entry that triggers interactive credential prompting. The fix makes the mount -a helper run without a controlling terminal so mount.cifs can’t prompt and instead fails fast, allowing the distro startup to continue with a warning.

Changes:

  • Added an optional DetachTerminal parameter to UtilCreateProcessAndWait() to detach child processes from the controlling terminal via setsid().
  • Updated the /etc/fstab processing path (mount -a) to run with terminal detachment enabled.
  • Extended function documentation to describe the new behavior.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

File Description
src/linux/init/util.h Extends UtilCreateProcessAndWait signature with a DetachTerminal option.
src/linux/init/util.cpp Implements terminal detachment (setsid()) in the forked child when requested.
src/linux/init/config.cpp Runs mount -a for fstab processing using the new detach-terminal behavior.

You can also share your feedback on Copilot code review. Take the survey.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR addresses a WSL startup hang caused by misconfigured /etc/fstab CIFS entries that try to prompt for credentials via a controlling TTY during early boot. It ensures mount -a fails fast (and emits the existing user warning) rather than blocking distro startup.

Changes:

  • Extend UtilCreateProcessAndWait with an optional DetachTerminal flag that calls setsid() in the child process before execv.
  • Switch child-side failure paths in UtilCreateProcessAndWait from exit(-1) to _exit(-1).
  • Use the new DetachTerminal mode when processing /etc/fstab (mount -a) during init.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.

File Description
src/linux/init/util.h Adds DetachTerminal optional parameter to UtilCreateProcessAndWait declaration.
src/linux/init/util.cpp Implements terminal detachment via setsid() and uses _exit() in the forked child.
src/linux/init/config.cpp Runs mount -a with DetachTerminal=true to prevent interactive hangs from CIFS mounts.

You can also share your feedback on Copilot code review. Take the survey.

Copy link
Copy Markdown
Collaborator

@OneBlue OneBlue left a comment

Choose a reason for hiding this comment

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

LGTM ! Could we add test coverage to validate that this doesn't regress in the future ?

@chemwolf6922
Copy link
Copy Markdown
Contributor Author

Hi @OneBlue , The test is added. It's using a fake mount script instead of cifs to avoid other troubles with smb. I have tested both with and without the fix. All works as intended.

Copilot AI review requested due to automatic review settings March 19, 2026 09:30
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR addresses WSL startup hangs caused by misconfigured /etc/fstab CIFS mounts that prompt for interactive password input. It updates Linux init’s mount -a invocation to detach from the controlling terminal so interactive helpers fail fast instead of blocking boot.

Changes:

  • Extend UtilCreateProcessAndWait with an optional DetachTerminal flag that calls setsid() in the child process.
  • Run /etc/fstab processing (mount -a) with DetachTerminal=true to prevent interactive mount helpers from blocking startup.
  • Add a Windows integration test intended to verify interactive mount helpers don’t block WSL boot.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 5 comments.

File Description
test/windows/MountTests.cpp Adds a test to ensure interactive fstab mounts don’t hang WSL startup.
src/linux/init/util.h Adds a DetachTerminal parameter to UtilCreateProcessAndWait declaration.
src/linux/init/util.cpp Implements terminal detachment via setsid() and uses _exit() in the forked child error paths.
src/linux/init/config.cpp Calls UtilCreateProcessAndWait(..., DetachTerminal=true) for mount -a processing of /etc/fstab.

You can also share your feedback on Copilot code review. Take the survey.

Feng Wang and others added 2 commits March 19, 2026 17:36
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings March 19, 2026 09:38
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR prevents WSL startup from hanging when /etc/fstab contains mounts (e.g., cifs) that attempt to prompt for interactive input by detaching mount -a from any controlling TTY during init, causing such mounts to fail fast instead of blocking boot.

Changes:

  • Add a DetachTerminal option to UtilCreateProcessAndWait that calls setsid() in the forked child before execv.
  • Run /bin/mount -a (fstab processing) using UtilCreateProcessAndWait(..., DetachTerminal=true) during init.
  • Add a Windows test intended to validate that an interactive mount helper does not block distro startup.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

File Description
src/linux/init/util.h Extends UtilCreateProcessAndWait API with a DetachTerminal flag (default false).
src/linux/init/util.cpp Implements DetachTerminal via setsid() in the child; switches child error paths to _exit.
src/linux/init/config.cpp Uses DetachTerminal=true when processing /etc/fstab with mount -a.
test/windows/MountTests.cpp Adds a regression test for interactive mount helpers not blocking startup.

You can also share your feedback on Copilot code review. Take the survey.

Feng Wang added 2 commits March 19, 2026 17:48
…emwolf6922/WSL into detach-terminal-when-running-mount--a
Copilot AI review requested due to automatic review settings March 20, 2026 03:04
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR prevents WSL2 instance startup from hanging when /etc/fstab contains an entry whose mount helper attempts interactive /dev/tty input (e.g., misconfigured cifs), by detaching the mount -a helper from the controlling terminal so it fails fast instead of blocking boot.

Changes:

  • Add an optional DetachTerminal parameter to UtilCreateProcessAndWait() and call setsid() in the child when enabled.
  • Run mount -a for /etc/fstab via UtilCreateProcessAndWait(..., DetachTerminal=true) during init startup.
  • Add a Windows unit test that simulates an interactive mount helper and verifies WSL startup completes.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

File Description
test/windows/UnitTests.cpp Adds an InteractiveMount test that installs a fake mount helper which reads from /dev/tty and verifies startup completes.
src/linux/init/util.h Extends UtilCreateProcessAndWait API with a DetachTerminal parameter.
src/linux/init/util.cpp Implements terminal detachment via setsid() (and switches child failure paths to _exit).
src/linux/init/config.cpp Uses DetachTerminal=true when running mount -a for /etc/fstab processing.

Copilot AI review requested due to automatic review settings March 20, 2026 10:10
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Copy link
Copy Markdown
Member

@benhillis benhillis left a comment

Choose a reason for hiding this comment

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

LGTM, thanks for doing this!

@benhillis benhillis merged commit 61e6b9a into microsoft:master Mar 20, 2026
10 checks passed
benhillis added a commit that referenced this pull request Mar 27, 2026
* test: enable virtiofs tests and enable WSLG during testing (#14387)

* test: enable virtiofs tests and enable WSLG during testing

* test fix

---------

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

* chore(distributions): Almalinux auto-update - 20260311 14:52:02 (#14404)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Fix CVE-2026-26127: bump .NET runtime from 10.0.0 to 10.0.4 (#14421)

Addresses Dependabot alerts #10 and #11. The Microsoft.NETCore.App.Runtime
packages (win-x64 and win-arm64) at version 10.0.0 are vulnerable to a
denial of service via out-of-bounds read when decoding malformed Base64Url
input (CVSS 7.5 High). Bumped to 10.0.4 which includes the fix.

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

* Notice change from build: 141806547 (#14423)

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

* Ship initrd.img in MSI using build-time generation via powershell script (#14424)

* Ship initrd.img in MSI using build-time generation via tar.exe

Replace the install-time CreateInitrd/RemoveInitrd custom actions with a
build-time step that generates initrd.img using the Windows built-in
tar.exe (libarchive/bsdtar) and ships it directly in the MSI.

The install-time approach had a race condition: wsl.exe could launch
before the CreateInitrd custom action completed, causing
ERROR_FILE_NOT_FOUND for initrd.img.

Changes:
- Add CMake custom command to generate initrd.img via tar.exe --format=newc
- Add initrd.img as a regular file in the MSI tools component
- Remove CreateInitrd/RemoveInitrd custom actions from WiX, DllMain,
  and wslinstall.def
- Remove CreateCpioInitrd helper and its tests (no longer needed)
- Update pipeline build targets to build initramfs instead of init

* pr feedback

* more pr feedback

* switch to using a powershell script instead of tar.exe

* powershell script feedback

* hopefully final pr feedback

---------

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

* virtiofs: update logic so querying virtiofs mount source does not require a call to the service (#14380)

* virtiofs: update logic so querying virtiofs mount source does not require a call to the service

* more pr feedback

* use std::filesystem::read_symlink

* pr feedback and use canonical path in virtiofs symlink

* make sure canonical path is always used

---------

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

* virtio networking: add support for ipv6 (#14350)

* VirtioProxy: Add IPv6 address, gateway, and route support

- Add PreferredIpv6Address field and GetBestGatewayV6* methods to NetworkSettings
- Extend GetHostEndpointSettings() to discover IPv6 unicast address and gateway
- Add UpdateIpv6Address() using ModifyGuestEndpointSettingRequest<IPAddress>
- Push IPv6 default route to guest via UpdateDefaultRoute(AF_INET6)
- Remove AF_INET6 early return in ModifyOpenPorts, use INETADDR_PORT()
- Add EndpointRoute::DefaultRoute() static factory
- Pass client_ip_ipv6 in devicehost options (not yet parsed by devicehost)
- Remove gateway_ip from devicehost options (only needed for DHCP)
- Include IPv6 DNS servers in non-tunneling DNS settings
- Add ConfigurationV6 and DnsResolutionAAAA tests

* cleanup and add more ipv6 tests

* added test coverage and minor updates

* clang format

* pr feedback

* format source

* pr feedback

* test fixes

---------

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

* Track `bind` syscall when port is 0 (#14333)

* Initial work

* .

* pr feedback and add unit test

* minor tweaks an fix use after free in logging statement

* implement PR feedback

* hopefully final pr feedback

* pr feedback in test function

* Address PR feedback: add try/catch to TrackPort and PortZeroBind queue push

---------

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

* Add iptables to list of apps to install in WSL (#14459)

There were instructions already on how to install tcpdump in WSL, but
iptables are also needed for the log collection to be complete, so this
PR adds instructions on how to also install iptables.

Co-authored-by: Andre Muezerie <andremue@linux.microsoft.com>

* Update Microsoft.WSL.DeviceHost to version 1.1.39-0 (#14460)

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

* Moves all Ubuntu distros to the tar-based format (#14463)

* Move all supported Ubuntu images to the new format

We backported the build pipeline so all current LTSes come out in the new tar-based format

* Remove the appx based distros

All WSL users can run tar-based distros by now, right?
There is no benefit in maintaining both formats.

* Enable DNS tunneling for VirtioProxy networking mode (#14461)

- Allow VirtioProxy to keep EnableDnsTunneling=true in config, but clear
  socket-specific options (BestEffortDnsParsing, DnsTunnelingIpAddress)
- Suppress dedicated DNS tunneling hvsocket for VirtioProxy; tunneling
  is handled through the VirtioNetworking device host instead
- Set DnsTunneling flag on VirtioNetworkingFlags so the device host
  knows to tunnel DNS
- Expand SWIOTLB kernel cmdline to cover VirtioFs and VirtioProxy
- Bump DeviceHost package to 1.1.39-0
- Add VirtioProxy DNS test coverage for tunneling on/off
- Skip GuestPortIsReleasedV6 on Windows 10

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

* test: disable LoopbackExplicit due to OS build 29555 regression (#14477)

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

* Refactor: trim unnecessary DLL deps from COMMON_LINK_LIBRARIES (#14426)

* Refactor: trim unnecessary DLL deps from COMMON_LINK_LIBRARIES

- Split MSI/Wintrust install functions from wslutil.cpp into install.cpp
- Remove MI.lib, wsldeps.lib, msi.lib, Wintrust.lib, computecore.lib,
  computenetwork.lib, Iphlpapi.lib from COMMON_LINK_LIBRARIES
- Add per-target MSI_LINK_LIBRARIES, HCS_LINK_LIBRARIES, SERVICE_LINK_LIBRARIES
- Delay-load msi.dll and WINTRUST.dll for wsl.exe and wslg.exe
- Result: wslhost, wslrelay, wslcsdk, testplugin lose msi/wintrust startup imports;
  wsl.exe and wslg.exe defer msi/wintrust loading until actually needed;
  wslservice is the only target that imports computecore/computenetwork/Iphlpapi

* minor fixes to install.cpp that were caught during PR

* move to wsl::windows::common::install namespace

---------

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

* Fix wsl stuck when misconfigured cifs mount presents (#14466)

* detach terminal before running mount -a

* Potential fix for pull request finding

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

* use _exit on error before execv in child process to avoid unintentional resource release

* Add regression test

* Fix clang format issue

* fix all clang format issue

* Potential fix for pull request finding

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

* resolve ai comments

* move test to unit test

* Fix string literal

* Overwrite fstab to resolve pipeline missing file issue

---------

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

* Update localization and notice scripts to target the branch that the pipeline is running on (#14492)

* test: Add arm64 test distro support (#14500)

* test: Add arm64 test distro support

* update unit test baseline

* more test baseline updates

---------

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

* test: remove duplicated DNS test coverage (#14522)

* test: remove duplicated DNS test coverage

* format source

---------

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

* Fix: Fail and warn the user when --uninstall is given parameters (#14524)

Fail and warn the user when --uninstall is given parameters.

* Localization change from build: 142847827 (#14525)

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

* virito net: revert to previous DNS behavior while we debug an issue with DNS over TCP (#14532)

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

* devicehost: update to latest devicehost nuget with tracing improvements (#14531)

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

* fix merge issues

---------

Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>
Co-authored-by: AlmaLinux Autobot <107999298+almalinuxautobot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Blue <OneBlue@users.noreply.github.com>
Co-authored-by: WSL notice <noreply@microsoft.com>
Co-authored-by: Daman Mulye <daman_mulye@hotmail.com>
Co-authored-by: Andre Muezerie <108841174+andremueiot@users.noreply.github.com>
Co-authored-by: Andre Muezerie <andremue@linux.microsoft.com>
Co-authored-by: Carlos Nihelton <carlos.santanadeoliveira@canonical.com>
Co-authored-by: Feng Wang <wang6922@outlook.com>
Co-authored-by: Feng Wang <wangfen@microsoft.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
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.

4 participants