Repository navigation
Use rcu_assign_pointer to install TCP hijack offloads - #122
Open
randomizedcoder wants to merge 1 commit into
Open
randomizedcoder wants to merge 1 commit into
randomizedcoder wants to merge 1 commit into
Conversation
* homa_hijack_init copies TCP's net_offload into hook_tcp_net_offload, patches gro_receive, then publishes it in inet_offloads with a plain store. Nothing orders the copy before the publish, so on a weakly ordered CPU (e.g. arm64) another CPU's GRO path could see the new pointer before the struct contents. rcu_assign_pointer adds the release barrier; same for inet6_offloads and for the restore in homa_hijack_end. * Also removes the four "cast adds address space '__rcu'" warnings from sparse (-Wsparse-all). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
homa_hijack_init publishes the patched copy of TCP's net_offload into
inet_offloads/inet6_offloadswith a plain store, so on weakly ordered CPUs (arm64) a concurrent GRO path could observe the pointer before the struct copy.rcu_assign_pointersupplies the release ordering; the restore in homa_hijack_end uses it too. Unload is already safe (homa_offload_end → inet_del_offload → synchronize_net).Found with sparse
-Wsparse-all(4× "cast adds address space '__rcu'"); all four are gone.No test: memory-ordering change, not observable in the unit harness. Unit tests: 862/862 pass.
🤖 Generated with Claude Code