Repository navigation
Description
Found this while testing Windows package from
The daemon starts normally, gets to "Daemon is ready", WebUI at https://127.0.0.1:5001/webui works for a short while, then daemon crashes, RPC stops responding.
- Tested .exe: dist-windows-latest
- Full daemon output (stdout+stderr): ipfs-daemon-0.40.0-windows-panic.log
Some notes below, but need to look at this more closely + reproduce on a different machine.
Crash signature
Exception 0xc0000005 0x8 0x1ce5935180 0x1ce5935180
PC=0x1ce5935180
runtime: g 23791 gp=0x56c75f563c0: unknown pc 0x1ce5935180
0xc0000005=STATUS_ACCESS_VIOLATION0x8=EXCEPTION_EXECUTE_FAULT(DEP violation: CPU attempted to execute non-executable memory)- The faulting PC (
0x1ce5935180) is outside the binary's code range (legitimate addresses are in0x7ff6e58xxxxx-0x7ff6e71xxxxx), indicating a corrupted return address on the stack
The crashing goroutine was created by go-yamux/v5.newSession and was doing normal TCP socket I/O through the Windows overlapped I/O path:
internal/poll.(*FD).execIO
-> internal/syscall/windows.WSAGetOverlappedResult
-> syscall.SyscallN
Suspecting Go regression on Windows
Go 1.25 introduced a major rework of Windows I/O completion port (IOCP) handling (go#19098). This rework has caused several regressions on Windows that are still being worked through in Go 1.25.x/1.26.x:
- go#76391 -
NewFilehangs on blocked handles (critical release-blocker, multiple CLs fixingexecIOinternals) - go#77142 - overlapped I/O interop issues
The crash happens in internal/poll.(*FD).execIO, which is the code path affected by these regressions. However, the specific bug causing this crash may not be one of the already-reported issues. It could be an unreported runtime bug, or potentially antivirus interference (go#40878 documented identical "unknown pc" crashes caused by AV software on Windows).
Suggested action
- Ask someone to try to reproduce on Windows 10 or 11
- If reproducible, file an upstream Go issue with the full crash log so the runtime team can assess whether this is a known or new bug in the IOCP rework
- Consider building Windows release binaries with Go 1.24.x (last version before the IOCP rework) until the Go 1.25/1.26 Windows I/O issues are resolved
Environment
- Kubo 0.40.0 (
882b7d2a9) - Go 1.26.0
- Windows 10, amd64
Activity
lidel commentedon Feb 27, 2026
@aschmahmann are you able to reproduce by any chance?
(run
ipfs daemonon Windows, open http://127.0.0.1:5001/webui, wait a few minutes)aschmahmann commentedon Feb 27, 2026
Was able to reproduce a crash fairly quickly when I initially tried.
This is my error message from the first time I ran it, it's a little different from yours though:
Details
Regarding Go versions:
It seems like reverting 9ca1dbb shouldn't interfere with much, so I've locally reverted that commit on top of the 0.40.0 commit and build with Go 1.26.0 and I'm seeing the error. I'm now building and running with Go 1.25.7, so far it looks good. I'll keep it running overnight and push a PR with the reversion to master which can get cherry-picked into the patch release.
[-]0.40.0 panic on Windows 10[/-][+]go 1.26 build panics on Windows 10[/+]lidel commentedon Feb 27, 2026
Triage note:
Brent-Sanchez commentedon Feb 27, 2026
lidel commentedon Mar 15, 2026
Triage note: Go 1.26.1 does not fix this, Go 1.26.2 should
Go 1.26.1 shipped no Windows runtime fixes.
The actual fix is tracked upstream as go#77975 / go#78041 ("runtime: Windows crash with Go 1.26.0, 1.26.1"), labeled
Criticalandrelease-blocker. It is cherry-pick approved for Go 1.26.2 (not yet released, milestone).The crash signature matches ours exactly:
Exception 0xc0000005 0x8, faulting PC outside the binary's code range, corrupted return address on a goroutine stack. Same bug was independently hit by Tailscale, erigon, and easyss.Root cause: async preemption on Windows corrupts the high 32 bits of return addresses on goroutine stacks (
GODEBUG=asyncpreemptoff=1prevents the crash). This is not directly related to the IOCP rework -- the crash happens to surface in I/O goroutines but the bug is in the runtime's async preemption path.Fix: CL 753480 (
internal/poll: move rsan to heap on windows), already merged torelease-branch.go1.26.The two Go issues originally suspected here are unrelated to the actual crash:
os.NewFilehangs) -- still open, milestoned for Go 1.27Plan: wait for Go 1.26.2, then switch back from Go 1.25.7 and verify the crash is gone on Windows.
lidel commentedon Mar 19, 2026
lidel commentedon Mar 21, 2026
feat: go 1.26.2, once more with feeling
feat: go 1.26.2 (#11275)