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