Skip to content

Conversation

@ProjectsByJackHe
Copy link
Contributor

@ProjectsByJackHe ProjectsByJackHe commented Feb 9, 2026

Description

We hit a spinxsk crash, and found that was due to frame extensions not being enabled whilst attempting to enable RX checksum offload.

The problem arises when we have 2 XSK sockets bound to the same RX queue.

XSK_A enables checksum offload, the flag IsChecksumOffloadEnabled is set for that RX queue.

The RX queue attaches (frame extensions enabled) then detaches (frame extensions cleared).

XSK_B tries to enable checksum offload again, we see IsChecksumOffloadEnabled is already enabled, and we hit the assert failure for the non-initialized frame extensions.

Note that this transient state is actually valid for RX, and TX never hits this path because we never clear the frame extensions for it unless we delete the entire TX queue.

Also note, XSK_A is barred from ever enabling checksum offloads again due to the check if (Xsk->Rx.ExtensionFlags.Checksum) { return invalid_device_state } So the underlying RX queue attaching then detaching never was a problem there.

Testing

CI

Documentation

NO

Installation

NO

@ProjectsByJackHe ProjectsByJackHe marked this pull request as ready for review February 9, 2026 23:19
@ProjectsByJackHe ProjectsByJackHe requested a review from a team as a code owner February 9, 2026 23:19
@mtfriesen mtfriesen merged commit d8938df into main Feb 10, 2026
61 checks passed
@mtfriesen mtfriesen deleted the jackhe/fix-transient-state-error branch February 10, 2026 12:49
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.

2 participants