Repository navigation
[Nexthop][bugfix] Capture SwSwitch by value in neighbor-cache state-update lambdas - #1903
Open
deepakgudiseva-nexthop wants to merge 1 commit into
Open
deepakgudiseva-nexthop wants to merge 1 commit into
deepakgudiseva-nexthop wants to merge 1 commit into
Conversation
Signed-off-by: deepakgudiseva-nexthop <deepakgudiseva@nexthop.ai>
meta-codesync Bot
pushed a commit
that referenced
this pull request
Nov 4, 2026
Summary: `NeighborCacheImpl::getUpdateFnToProgramEntryForVlan()` and `getUpdateFnToProgramPendingEntryForVlan()` have had no callers since 8b49d2f ("Remove FLAGS_intf_nbr_tables from NeighborCacheImpl-defs.h"), which removed the VLAN-table branch of `programEntry()` / `programPendingEntry()`. Every neighbor update now goes through `getUpdateFnToProgramEntry()` / `getUpdateFnToProgramPendingEntry()`. This removes both dead functions. It also removes the includes that clang-tidy's `misc-include-cleaner` reports as unused in `NeighborCacheImpl.h`, `NeighborCacheImpl-defs.h` and `SwSwitchTest.cpp`. `NeighborCacheImpl-defs.h` throws `FbossError` itself, so it now includes `FbossError.h` directly instead of getting it through `NeighborCacheImpl.h`. We checked with Meta that neither function has callers in the internal code base either. This touches the same function as #1903, which changes its lambda captures. Whichever of the two lands second needs a trivial rebase (keep the deletion). Pull Request resolved: #1905 Test Plan: The equivalent change in our internal tree passed our CI's Bazel build and its cmake build + unit test run (clang). No reference to either removed function remains in the tree. ## Review Findings No issues found above confidence threshold (fboss-review, 7 applicable reviewers). Reviewed By: AarjunC Differential Revision: D129483370 Pulled By: KevinYakar fbshipit-source-id: 70f2113080dafca3497fda25f23cd9322a9cad57
Author
|
/autorebase |
This branch has not been deployed
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.
Pre-submission checklist
pip install -r requirements-dev.txt && pre-commit installpre-commit runSummary
Use-after-free in
SwSwitch::stop(): the neighbor-cache state-update lambdas capturethis(NeighborCacheImpl), butstop()destroys the caches (nUpdater_.reset()) beforestopThreads()drainspendingUpdates_. A queued neighbor update then readssw_through freed memory and faults inSwitchIdScopeResolver::scope(), so the agent dies during a graceful exit and loses its warm-boot state. Reorderingstop()is not an option:~NeighborUpdaterwaits on the neighbor-cache evb thatstopThreads()has already joined.Fix: the lambdas capture
sw,intfIDandneedL2EntryForNeighborby value, asgetUpdateFnToProgramPendingEntryForVlanalready does.flushEntryFromSwitchStateandRemoteNeighborUpdater::processChangedInterface, which had the samethiscapture, becomestatic.Test Plan
New
SwSwitchTestNbrs.neighborUpdatesOutliveTheirCachequeues updates from a standaloneArpCache, destroys the cache, then lets them run and checks they landed. The UAF itself is only reported under ASAN.Hardware, OSS build, warm restarts of
fboss_sw_agentwith many resolved neighbors andMALLOC_CONF=junk:freeso the dangling read always faults:NeighborCacheImpl<T>::getUpdateFnToProgramEntrylambda <-SwSwitch::handlePendingUpdates<-stopThreadson 7/7 stops