Skip to content

Use rcu_assign_pointer to install TCP hijack offloads - #122

Open
randomizedcoder wants to merge 1 commit into
PlatformLab:mainfrom
randomizedcoder:fix/hijack-rcu-publish
Open

randomizedcoder wants to merge 1 commit into
PlatformLab:mainfrom
randomizedcoder:fix/hijack-rcu-publish

Conversation

@randomizedcoder

Copy link
Copy Markdown
Contributor

homa_hijack_init publishes the patched copy of TCP's net_offload into inet_offloads/inet6_offloads with a plain store, so on weakly ordered CPUs (arm64) a concurrent GRO path could observe the pointer before the struct copy. rcu_assign_pointer supplies 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

* 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>
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