Skip to content

msquic crashing on ARM32 machines #3958

@wfurt

Description

@wfurt

Describe the bug

It seems like regression from #3826 @nibanks.
I did binary search on changes and previous commit (cd49fbb) works fine.
This is likely root cause for dotnet/runtime#91757 causing .NET CI failures.
While reported on Alpine, I can reproduce on my Raspberry PI with Debian 10.

Affected OS

  • Windows
  • Linux
  • macOS
  • Other (specify below)

Additional OS information

I tried main and commit 972e677
Comment cd49fbb seems ok.

MsQuic version

main

Steps taken to reproduce bug

I can reproduce it running .NET Quic test suite.

Expected behavior

no crash and everything runs as before

Actual outcome

Thread 14 ".NET Long Runni" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x678da440 (LWP 10187)]
0x683dc210 in InterlockedDecrement (Addend=0x60) at /home/furt/github/msquic/src/inc/quic_platform_posix.h:115
115	    return __sync_sub_and_fetch(Addend, (long)1);
(gdb) bt
#0  0x683dc210 in InterlockedDecrement (Addend=0x60) at /home/furt/github/msquic/src/inc/quic_platform_posix.h:115
#1  RecvDataReturn (RecvDataChain=0x0) at /home/furt/github/msquic/src/platform/datapath_epoll.c:2067
#2  0x683ce240 in CxPlatRecvDataReturn (RecvDataChain=<optimized out>) at /home/furt/github/msquic/src/platform/datapath_linux.c:338
#3  0x68381814 in QuicConnRecvDatagrams (Connection=Connection@entry=0x73398d58, Packets=0x0, Packets@entry=0x6ef34450, PacketChainCount=PacketChainCount@entry=2, PacketChainByteCount=PacketChainByteCount@entry=2324, IsDeferred=<optimized out>,
    IsDeferred@entry=0 '\000') at /home/furt/github/msquic/src/core/connection.c:5848
#4  0x68381d0c in QuicConnFlushRecv (Connection=Connection@entry=0x73398d58) at /home/furt/github/msquic/src/core/connection.c:5929
#5  0x68385844 in QuicConnDrainOperations (Connection=Connection@entry=0x73398d58) at /home/furt/github/msquic/src/core/connection.c:7676
#6  0x68359900 in QuicWorkerProcessConnection (Worker=Worker@entry=0x72921c10, Connection=0x73398d58, ThreadID=<optimized out>, TimeNow=TimeNow@entry=0x678d9e10) at /home/furt/github/msquic/src/core/worker.c:510
#7  0x6835a668 in QuicWorkerLoop (Context=0x72921c10, State=0x678d9e10) at /home/furt/github/msquic/src/core/worker.c:668
#8  0x683c8654 in CxPlatRunExecutionContexts (Worker=Worker@entry=0x7290aad0, State=State@entry=0x678d9e10) at /home/furt/github/msquic/src/platform/platform_worker.c:395
#9  0x683c8a74 in CxPlatWorkerThread (Context=0x7290aad0) at /home/furt/github/msquic/src/platform/platform_worker.c:492
#10 0x76f7c310 in start_thread (arg=0x678da440) at pthread_create.c:477
#11 0x76cc6598 in ?? () at ../sysdeps/unix/sysv/linux/arm/clone.S:73 from /lib/arm-linux-gnueabihf/libc.so.6
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Additional details

I don't tank if this is because of speed tf the machine or if this is because ARM has weak memory model. (or something completely else)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions