Skip to content

Advance next_qdisc in homa_qdisc_destroy - #140

Open
randomizedcoder wants to merge 1 commit into
PlatformLab:mainfrom
randomizedcoder:fix/qdisc-destroy-next-qdisc
Open

randomizedcoder wants to merge 1 commit into
PlatformLab:mainfrom
randomizedcoder:fix/qdisc-destroy-next-qdisc

Conversation

@randomizedcoder

Copy link
Copy Markdown
Contributor

homa_qdisc_xmit_deferred_tcp keeps a round-robin cursor, qdev->next_qdisc, that can point at a qdisc's defer_links. homa_qdisc_destroy unlinked the qdisc without moving the cursor, so if other qdiscs on the device still had deferred TCP packets, the pacer would next use the destroyed (and then freed) qdisc: a use-after-free, or a NULL skb from its now-empty queue. Reached by replacing or deleting one queue's qdisc while TCP packets are deferred on others.

  • Fix: under the qdev lock already held, move the cursor past the qdisc before unlinking it.
  • Test: homa_qdisc_destroy__advance_next_qdisc.
  • Found by reading the code.

Verified: the new test fails before the fix and passes after; full unit suite 885/885 in both IPv6 and --ipv4 modes; homa.ko compiles warning-free on 7.3, normal and __STRIP__=1; checkpatch clean.

🤖 Generated with Claude Code

* homa_qdisc_xmit_deferred_tcp keeps a round-robin cursor,
  qdev->next_qdisc, that can point at a qdisc's defer_links.
  homa_qdisc_destroy unlinked the qdisc without moving the cursor, so
  if other qdiscs still had deferred packets the pacer would next use
  the destroyed (and soon freed) qdisc.
* Move the cursor past the qdisc before unlinking it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
randomizedcoder added a commit to randomizedcoder/HomaModule that referenced this pull request Oct 29, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

1 participant