CVE-2026-74588

sctp: keep chunk->transport in step with the list it is queued on

State
Published
Severity
9.8 Critical
Published
Aug 22, 2026
Updated
Oct 16, 2026
Reserved
Aug 15, 2026

Read the record on cve.org

Description

In the Linux kernel, the following vulnerability has been resolved:

sctp: keep chunk->transport in step with the list it is queued on

__sctp_outq_flush_rtx() moves a gap-acked chunk onto another transport's transmitted list without updating chunk->transport:

if (chunk->tsn_gap_acked) { list_move_tail(&chunk->transmitted_list, &transport->transmitted); continue; }

The chunk then sits on a live transport's list while chunk->transport still names a different one. If that transport is removed - sctp_assoc_rm_peer() from an ASCONF Delete-IP - sctp_transport_free() RCU-frees it and the chunk is left with a dangling pointer. sctp_assoc_rm_peer() scrubs peer->transmitted and asoc->outqueue.out_chunk_list, but the chunk is on neither.

The pointer is not followed while tsn_gap_acked is set. A SACK that reneges on the TSN clears the flag, and the next SACK reaches

tchunk->transport->flight_size -= sctp_data_size(tchunk);

inside the freed transport. KASAN reports a slab-use-after-free read in sctp_check_transmitted(), freed from sctp_assoc_rm_peer(). Both the removal and the SACKs come from the association peer.

Set chunk->transport at the move. The ordinary resend path needs nothing: it reaches its list_move_tail() only after sctp_packet_append_chunk() returned SCTP_XMIT_OK, and __sctp_packet_append_chunk() has rebound the chunk by then.

Discovered by XBOW, triaged by Baul Lee <baul.lee@xbow.com>

Scores

CVSSScoreVectorSource
3.19.8 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HLinux

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to before 6575fb17230814b48b471727c8410c0aadff9274Affected
  • 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to before 6b9e2ea2057113f3393990ba646d2d97c719a80dAffected
  • 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to before 874a7c2b5e184f06134fdfde27e9ce9271bafe58Affected
  • 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to before 1adf929121e13e0b19200bb9fef715b918d483feAffected
  • 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to before e2e7c1de0e226ca1b7fea2de57a6c9bca408709bAffected
  • 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to before 2b3b5eec8b2c30ee237e3c31a6a38de9c39d804dAffected
  • 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to before 5ccf35ef0ed6059cdf8b1f4606a6584d5b67166bAffected
  • 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to before 9f2cf069a9a72a2d6b97ca8b4c70e714aac99749Affected
LinuxLinux
  • 2.6.12Affected
  • before 2.6.12Not affected
  • 5.10.265 through 5.10.*Not affected
  • 5.15.216 through 5.15.*Not affected
  • 6.1.183 through 6.1.*Not affected
  • 6.6.152 through 6.6.*Not affected
  • 6.12.104 through 6.12.*Not affected
  • 6.18.45 through 6.18.*Not affected
  • 7.1.9 through 7.1.*Not affected
  • 7.2 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.