@samitouri / QOSAMI-WSL / commits / 51cfa906

Change crash dump PIDs to 32-bit (#40862)

JohnMcPMS committed Jun 22, 2026 at 11:34 UTC 51cfa90678c97c5f9e3a857b29656c88c8df3cf7
13 files changed +16 -17
src/linux/init/init.cpp
+1 -1
@@ -410,7 +410,7 @@ try
410 message.WriteString(Argv[2]);
411 message->Timestamp = std::strtoull(Argv[1], nullptr, 10);
412 message->Signal = std::strtoul(Argv[4], nullptr, 10);
413 - message->Pid = std::strtoull(Argv[3], nullptr, 10);
413 + message->Pid = std::strtoul(Argv[3], nullptr, 10);
414
415 auto result = channel.Transaction<LX_PROCESS_CRASH>(message.Span()).Result;
416 if (result != 0)
src/shared/inc/lxinitshared.h
+1 -1
@@ -649,7 +649,7 @@ typedef struct _LX_PROCESS_CRASH
649 MESSAGE_HEADER Header;
650 std::uint64_t Timestamp;
651 std::uint32_t Signal;
652 - std::uint64_t Pid;
652 + std::uint32_t Pid;
653
654 char Buffer[];
655
src/windows/WslcSDK/CrashDumpCallback.cpp
+1 -2
@@ -19,8 +19,7 @@ CrashDumpCallback::CrashDumpCallback(WslcSessionCrashDumpCallback callback, PVOI
19 {
20 }
21
22 -HRESULT STDMETHODCALLTYPE CrashDumpCallback::OnCrashDump(
23 - _In_ LPCWSTR DumpPath, _In_opt_ LPCSTR ProcessName, _In_ ULONGLONG Pid, _In_ ULONG Signal, _In_ ULONGLONG Timestamp)
22 +HRESULT STDMETHODCALLTYPE CrashDumpCallback::OnCrashDump(_In_ LPCWSTR DumpPath, _In_opt_ LPCSTR ProcessName, _In_ ULONG Pid, _In_ ULONG Signal, _In_ ULONGLONG Timestamp)
23 try
24 {
25 if (m_callback)
src/windows/WslcSDK/CrashDumpCallback.h
+1 -1
@@ -23,7 +23,7 @@ struct CrashDumpCallback : public winrt::implements<CrashDumpCallback, IWSLCComp
23 CrashDumpCallback(WslcSessionCrashDumpCallback callback, PVOID context);
24
25 // IWSLCCompatCrashDumpCallback
26 - HRESULT STDMETHODCALLTYPE OnCrashDump(_In_ LPCWSTR DumpPath, _In_opt_ LPCSTR ProcessName, _In_ ULONGLONG Pid, _In_ ULONG Signal, _In_ ULONGLONG Timestamp) override;
26 + HRESULT STDMETHODCALLTYPE OnCrashDump(_In_ LPCWSTR DumpPath, _In_opt_ LPCSTR ProcessName, _In_ ULONG Pid, _In_ ULONG Signal, _In_ ULONGLONG Timestamp) override;
27
28 private:
29 WslcSessionCrashDumpCallback m_callback = nullptr;
src/windows/WslcSDK/wslcsdk.h
+1 -1
@@ -129,7 +129,7 @@ typedef struct WslcSessionCrashDumpInfo
129 {
130 _Field_z_ PCWSTR dumpPath;
131 _Field_z_ PCSTR processName;
132 - uint64_t pid;
132 + uint32_t pid;
133 uint32_t signal;
134 uint64_t timestamp;
135 } WslcSessionCrashDumpInfo;
src/windows/common/APICompat.cpp
+1 -1
@@ -40,7 +40,7 @@ namespace {
40 {
41 }
42
43 - IFACEMETHOD(OnCrashDump)(LPCWSTR DumpPath, LPCSTR ProcessName, ULONGLONG Pid, ULONG Signal, ULONGLONG Timestamp) override
43 + IFACEMETHOD(OnCrashDump)(LPCWSTR DumpPath, LPCSTR ProcessName, ULONG Pid, ULONG Signal, ULONGLONG Timestamp) override
44 {
45 return m_inner->OnCrashDump(DumpPath, ProcessName, Pid, Signal, Timestamp);
46 }
src/windows/service/inc/WSLCCompat.idl
+1 -1
@@ -47,7 +47,7 @@ interface IWSLCCompatCrashDumpCallback : IUnknown
47 HRESULT OnCrashDump(
48 [in, string] LPCWSTR DumpPath,
49 [in, unique, string] LPCSTR ProcessName,
50 - [in] ULONGLONG Pid,
50 + [in] ULONG Pid,
51 [in] ULONG Signal,
52 [in] ULONGLONG Timestamp);
53 };
src/windows/service/inc/wslc.idl
+1 -1
@@ -61,7 +61,7 @@ interface ICrashDumpCallback : IUnknown
61 HRESULT OnCrashDump(
62 [in, string] LPCWSTR DumpPath,
63 [in, unique, string] LPCSTR ProcessName,
64 - [in] ULONGLONG Pid,
64 + [in] ULONG Pid,
65 [in] ULONG Signal,
66 [in] ULONGLONG Timestamp);
67 };
src/windows/wslcsession/WSLCSession.cpp
+1 -1
@@ -2871,7 +2871,7 @@ void WSLCSession::RemoveCrashDumpCallback(CrashDumpCallbackList::iterator It) no
2871 m_crashDumpCallbacks.erase(It);
2872 }
2873
2874 -void WSLCSession::OnCrashDumpWritten(const std::wstring& DumpPath, const std::string& ProcessName, ULONGLONG Pid, ULONG Signal, ULONGLONG Timestamp)
2874 +void WSLCSession::OnCrashDumpWritten(const std::wstring& DumpPath, const std::string& ProcessName, ULONG Pid, ULONG Signal, ULONGLONG Timestamp)
2875 try
2876 {
2877 // Snapshot the callback list under the lock so that cross-process callback invocations don't
src/windows/wslcsession/WSLCSession.h
+1 -1
@@ -269,7 +269,7 @@ private:
269 std::string InspectImageLockHeld(const std::string& Id);
270 void OnContainerDeleted(const WSLCContainerImpl* Container);
271
272 - void OnCrashDumpWritten(const std::wstring& DumpPath, const std::string& ProcessName, ULONGLONG Pid, ULONG Signal, ULONGLONG Timestamp);
272 + void OnCrashDumpWritten(const std::wstring& DumpPath, const std::string& ProcessName, ULONG Pid, ULONG Signal, ULONGLONG Timestamp);
273
274 _Requires_shared_lock_held_(m_lock)
275 void OnImageCreated(const std::string& ImageNameOrId) noexcept;
src/windows/wslcsession/WSLCVirtualMachine.h
+1 -1
@@ -125,7 +125,7 @@ public:
125 // ICrashDumpCallback::OnCrashDump. The VM owns producing crash events; the session owns
126 // fanning them out to any registered COM callbacks.
127 using TOnCrashDump =
128 - std::function<void(const std::wstring& DumpPath, const std::string& ProcessName, ULONGLONG Pid, ULONG Signal, ULONGLONG Timestamp)>;
128 + std::function<void(const std::wstring& DumpPath, const std::string& ProcessName, ULONG Pid, ULONG Signal, ULONGLONG Timestamp)>;
129
130 WSLCVirtualMachine(_In_ IWSLCVirtualMachine* Vm, _In_ const WSLCSessionInitSettings* Settings, _In_ HANDLE SessionTerminatingEvent, _In_ TOnCrashDump&& OnCrashDump);
131 ~WSLCVirtualMachine();
test/windows/WSLCTests.cpp
+3 -3
@@ -2914,7 +2914,7 @@ class WSLCTests
2914 {
2915 std::wstring DumpPath;
2916 std::string ProcessName;
2917 - ULONGLONG Pid;
2917 + ULONG Pid;
2918 ULONG Signal;
2919 ULONGLONG Timestamp;
2920 };
@@ -2928,7 +2928,7 @@ class WSLCTests
2928 {
2929 }
2930
2931 - HRESULT OnCrashDump(LPCWSTR DumpPath, LPCSTR ProcessName, ULONGLONG Pid, ULONG Signal, ULONGLONG Timestamp) override
2931 + HRESULT OnCrashDump(LPCWSTR DumpPath, LPCSTR ProcessName, ULONG Pid, ULONG Signal, ULONGLONG Timestamp) override
2932 {
2933 m_promise.set_value(Invocation{
2934 DumpPath ? std::wstring{DumpPath} : std::wstring{}, ProcessName ? std::string{ProcessName} : std::string{}, Pid, Signal, Timestamp});
@@ -2966,7 +2966,7 @@ class WSLCTests
2966 VERIFY_IS_FALSE(invocation.DumpPath.empty());
2967 VERIFY_IS_TRUE(invocation.ProcessName.find("sh") != std::string::npos);
2968 VERIFY_ARE_EQUAL(invocation.Signal, static_cast<ULONG>(WSLCSignalSIGSEGV));
2969 - VERIFY_IS_GREATER_THAN(invocation.Pid, 0ull);
2969 + VERIFY_IS_GREATER_THAN(invocation.Pid, 0u);
2970 VERIFY_IS_GREATER_THAN(invocation.Timestamp, 0ull);
2971
2972 // The dump file should be readable and non-empty.
test/windows/WslcSdkTests.cpp
+2 -2
@@ -323,7 +323,7 @@ class WslcSdkTests
323 {
324 std::wstring DumpPath;
325 std::string ProcessName;
326 - uint64_t Pid;
326 + uint32_t Pid;
327 uint32_t Signal;
328 uint64_t Timestamp;
329 };
@@ -372,7 +372,7 @@ class WslcSdkTests
372 VERIFY_IS_GREATER_THAN(std::filesystem::file_size(invocation.DumpPath), 0ull);
373 VERIFY_IS_TRUE(invocation.ProcessName.find("sh") != std::string::npos);
374 VERIFY_ARE_EQUAL(invocation.Signal, static_cast<uint32_t>(WSLCSignalSIGSEGV));
375 - VERIFY_IS_GREATER_THAN(invocation.Pid, 0ull);
375 + VERIFY_IS_GREATER_THAN(invocation.Pid, 0u);
376 VERIFY_IS_GREATER_THAN(invocation.Timestamp, 0ull);
377 }
378