Skip to content

Reject stale CQ callbacks after socket revival#3412

Open
legionxiong wants to merge 1 commit into
apache:masterfrom
legionxiong:fix-rdma-stale-cq-callback
Open

Reject stale CQ callbacks after socket revival#3412
legionxiong wants to merge 1 commit into
apache:masterfrom
legionxiong:fix-rdma-stale-cq-callback

Conversation

@legionxiong

@legionxiong legionxiong commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

What problem does this PR solve?

Issue Number: resolves #3410

Problem Summary:

An RDMA completion-queue callback may remain queued after its endpoint is
reset. If the main socket is later revived with a new CQ, the stale callback
can successfully acquire the revived socket and continue operating on the
endpoint's new generation.

This may cause the stale callback to access invalid or mismatched RDMA
resources in RdmaEndpoint::PollCq, potentially resulting in a crash.

What is changed and the side effects?

Changed:

  • Verify that the CQ socket passed to RdmaEndpoint::PollCq still matches the
    endpoint's current _cq_sid.
  • Return immediately when the callback belongs to an older CQ generation.
  • Add a regression test covering a stale callback running after the endpoint
    has switched to a new CQ.

Side effects:

  • Performance effects: One SocketId comparison is added to each PollCq
    invocation. The overhead is negligible.

  • Breaking backward compatibility: No.

A CQ callback can remain queued across Reset() and run after the main
socket has been revived with a different CQ. Verify that the callback's
CQ SocketId still matches the endpoint before accessing RDMA resources.
Add a regression test covering a stale callback from an older
generation.

Signed-off-by: Lijin Xiong <legion.xiong@gmail.com>
@legionxiong
legionxiong force-pushed the fix-rdma-stale-cq-callback branch from 831b4fc to 010a3e1 Compare July 27, 2026 05:29
@legionxiong legionxiong changed the title fix(rdma): reject stale CQ callbacks after socket revival Reject stale CQ callbacks after socket revival Jul 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[RDMA] stale PollCq callback can survive Reset/Revive and poll a new-generation CQ

1 participant