From e6962576122cef334c3fcf68bd44976678d21398 Mon Sep 17 00:00:00 2001 From: Feng Wang Date: Tue, 18 Aug 2026 18:57:39 +0800 Subject: [PATCH 1/9] propagate launch init error --- src/linux/init/main.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/linux/init/main.cpp b/src/linux/init/main.cpp index a07cc25850..7abc2f09e9 100644 --- a/src/linux/init/main.cpp +++ b/src/linux/init/main.cpp @@ -1474,7 +1474,6 @@ Return Value: --*/ -try { std::vector Variables; auto AddEnvironmentVariable = [&Variables](const char* Name, const char* Value) { @@ -1500,7 +1499,7 @@ try { THROW_LAST_ERROR_IF(TEMP_FAILURE_RETRY(dup2(SocketFd, LX_INIT_UTILITY_VM_INIT_SOCKET_FD)) < 0); - close(SocketFd); + THROW_LAST_ERROR_IF(SetCloseOnExec(SocketFd, true)); SocketFd = LX_INIT_UTILITY_VM_INIT_SOCKET_FD; } else @@ -1661,11 +1660,6 @@ try LOG_ERROR("execle({}) failed {}", LX_INIT_PATH, errno); _exit(1); } -catch (...) -{ - LOG_CAUGHT_EXCEPTION(); - _exit(1); -} void LaunchSystemDistro( int SocketFd, From ac9dcb5ff310af2278491b34679cf8af3f9cc74e Mon Sep 17 00:00:00 2001 From: Feng Wang Date: Wed, 19 Aug 2026 11:20:43 +0800 Subject: [PATCH 2/9] Add back removed log --- src/linux/init/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/linux/init/main.cpp b/src/linux/init/main.cpp index 7abc2f09e9..827830916a 100644 --- a/src/linux/init/main.cpp +++ b/src/linux/init/main.cpp @@ -2375,6 +2375,7 @@ void ProcessLaunchInitMessage( } catch (...) { + LOG_CAUGHT_EXCEPTION(); ReportStatus(wil::ResultFromCaughtException()); _exit(1); } From a7635fbb23e586424ed00e03f88456d1828b5225 Mon Sep 17 00:00:00 2001 From: Feng Wang Date: Wed, 19 Aug 2026 12:41:43 +0800 Subject: [PATCH 3/9] trigger pipeline --- src/linux/init/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/linux/init/main.cpp b/src/linux/init/main.cpp index 827830916a..5ca62e5036 100644 --- a/src/linux/init/main.cpp +++ b/src/linux/init/main.cpp @@ -1501,6 +1501,7 @@ Return Value: THROW_LAST_ERROR_IF(SetCloseOnExec(SocketFd, true)); SocketFd = LX_INIT_UTILITY_VM_INIT_SOCKET_FD; + } else { From 8211a2a80947fc89870ea593eae84b2c190aafa2 Mon Sep 17 00:00:00 2001 From: Feng Wang Date: Wed, 19 Aug 2026 12:41:49 +0800 Subject: [PATCH 4/9] trigger pipeline --- src/linux/init/main.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/linux/init/main.cpp b/src/linux/init/main.cpp index 5ca62e5036..827830916a 100644 --- a/src/linux/init/main.cpp +++ b/src/linux/init/main.cpp @@ -1501,7 +1501,6 @@ Return Value: THROW_LAST_ERROR_IF(SetCloseOnExec(SocketFd, true)); SocketFd = LX_INIT_UTILITY_VM_INIT_SOCKET_FD; - } else { From f49355a8a560fdf1f420a7240e87a0a513a1b57d Mon Sep 17 00:00:00 2001 From: Feng Wang Date: Thu, 20 Aug 2026 11:14:03 +0800 Subject: [PATCH 5/9] treat EIO at step 3 as disk corruption --- src/windows/service/exe/WslCoreInstance.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/windows/service/exe/WslCoreInstance.cpp b/src/windows/service/exe/WslCoreInstance.cpp index 844f536cc9..ecfb345fa6 100644 --- a/src/windows/service/exe/WslCoreInstance.cpp +++ b/src/windows/service/exe/WslCoreInstance.cpp @@ -66,7 +66,9 @@ WslCoreInstance::WslCoreInstance( if (result.Result != 0) { // N.B. EFSBADCRC (74) or EFSCORRUPTED (117) can be returned if the disk's journal is corrupted. - if ((result.Result == EINVAL || result.Result == 74 || result.Result == 117) && result.FailureStep == LxInitCreateInstanceStepMountDisk) + // EIO (5) can be returned during LaunchInit if corruption is detected after the initial mount succeeds. + if (((result.Result == EINVAL || result.Result == 74 || result.Result == 117) && result.FailureStep == LxInitCreateInstanceStepMountDisk) || + (result.Result == 5 && result.FailureStep == LxInitCreateInstanceStepLaunchInit)) { THROW_HR(WSL_E_DISK_CORRUPTED); } From eedc4e04beff231a7d68aa2a14e7d13da8056907 Mon Sep 17 00:00:00 2001 From: Feng Wang Date: Thu, 20 Aug 2026 13:26:43 +0800 Subject: [PATCH 6/9] trigger pipeline --- src/linux/init/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/linux/init/main.cpp b/src/linux/init/main.cpp index 827830916a..b2ab3330ee 100644 --- a/src/linux/init/main.cpp +++ b/src/linux/init/main.cpp @@ -1512,6 +1512,7 @@ Return Value: THROW_LAST_ERROR_IF(SetCloseOnExec(SocketFd, false)); } + // // Move the cross-distro shared mount to a temporary location. This mount // will be moved by the distro init. From aa75ff025cbb70f996ded46895bd247eb6fe1f4b Mon Sep 17 00:00:00 2001 From: Feng Wang Date: Thu, 20 Aug 2026 13:26:52 +0800 Subject: [PATCH 7/9] trigger pipeline --- src/linux/init/main.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/linux/init/main.cpp b/src/linux/init/main.cpp index b2ab3330ee..827830916a 100644 --- a/src/linux/init/main.cpp +++ b/src/linux/init/main.cpp @@ -1512,7 +1512,6 @@ Return Value: THROW_LAST_ERROR_IF(SetCloseOnExec(SocketFd, false)); } - // // Move the cross-distro shared mount to a temporary location. This mount // will be moved by the distro init. From 5129d9367c37a46842c0a78fb75cdb355a0a6092 Mon Sep 17 00:00:00 2001 From: Feng Wang Date: Thu, 20 Aug 2026 14:28:49 +0800 Subject: [PATCH 8/9] trigger pipeline --- src/linux/init/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/linux/init/main.cpp b/src/linux/init/main.cpp index 827830916a..7b9f32a161 100644 --- a/src/linux/init/main.cpp +++ b/src/linux/init/main.cpp @@ -1518,6 +1518,7 @@ Return Value: // bool readOnly = false; + try { AddTemporaryMount(LX_WSL2_CROSS_DISTRO_ENV, CROSS_DISTRO_SHARE_PATH, (MS_MOVE | MS_REC)); From ec3bcdd6a95e4cc62d6488126320b96ff4818da8 Mon Sep 17 00:00:00 2001 From: Feng Wang Date: Thu, 20 Aug 2026 14:28:58 +0800 Subject: [PATCH 9/9] trigger pipeline --- src/linux/init/main.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/linux/init/main.cpp b/src/linux/init/main.cpp index 7b9f32a161..827830916a 100644 --- a/src/linux/init/main.cpp +++ b/src/linux/init/main.cpp @@ -1518,7 +1518,6 @@ Return Value: // bool readOnly = false; - try { AddTemporaryMount(LX_WSL2_CROSS_DISTRO_ENV, CROSS_DISTRO_SHARE_PATH, (MS_MOVE | MS_REC));