CVE-2026-93203
High · 7.1CVSS
7.1
EPSS
0.3%
Published
Sep 17, 2026
CISA due date
—
Cloudanix analysis
A Linux kernel networking component could end up with mismatched internal tracking numbers when multiple network events happen at exactly the same time, which might affect how mesh networks keep their records straight.
- Exploitation
- Adjacent Network
- Attacker needs
- None
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Race Condition
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Race condition in batadv_bla_add_claim allows parallel claim creation and backbone change paths to corrupt backbone CRC values by double-switching the backbone_gw pointer without proper CRC compensation on both gateways.
Why it matters to the business
Systems using batman-adv mesh networking may experience inconsistent claim state that cannot be recovered via syncs, potentially affecting routing reliability in affected Linux deployments.
How an attack unfolds
An attacker on an adjacent network triggers concurrent claim additions and ownership changes for the same client across multiple CPUs, causing the CRC to be removed from one backbone without ever having been added and added to another without proper removal, leaving both backbones with invalid CRCs.
How to fix it
Update the Linux kernel to a version containing the split claim creation and update paths that ensure CRC operations only occur on actual backbone changes.
How to confirm the fix worked
Confirm the kernel source contains separate new-claim and update-claim logic with explicit checks that remove_crc is only performed on actual backbone_gw changes; test under concurrent claim load to verify CRC consistency.
Typical attack path
- Position on adjacent network segment reachable to batman-adv nodes
- Induce parallel claim frame processing and local claim creation for the same client address
- Trigger ownership change that switches backbone_gw while creation path is still executing
- Observe resulting CRC mismatch that persists across both gateways
How to detect it
Examine kernel logs for batman-adv claim hash and CRC mismatch warnings; look for repeated backbone_gw pointer changes on the same claim without corresponding CRC adjustments in debug or trace output.
What your security team should do
- Prioritize kernel updates on any systems running batman-adv in production mesh environments
- Review network configurations to limit adjacent-network exposure where batman-adv is active
- Monitor upstream Linux kernel changelogs for batman-adv BLA fixes
The record
In the Linux kernel, the following vulnerability has been resolved: batman-adv: bla: avoid CRC corruption due to parallel claim add batadv_bla_add_claim() is used to add claims and modify the backbone of claims for CLAIM frames from remote backbones and local packets. When it handles a claim, it needs to either * add the new claim's CRC to the backbone CRC * remove the already existing claim's CRC from the old backbone and add it to the new backbone But when the "new" claim code was running in parallel to the "change backbone" code, it can happen that the CRC was invalid because the backbone_gw of the claim was changed twice in the "new" claim code path: * CPU0 creates the claim for gateway A and publishes it in the claim hash. The crc16 of the address has not yet been added to A's crc at this point. * CPU1 processes a claim frame of gateway B for the same client, finds the just published claim, and performs the ownership change: it switches the pointer to B, removes the crc16 from A's crc - which never contained it - and adds it to B's crc. * CPU0 continues behind the creation branch, unconditionally switches the pointer back to A without compensating B's crc (its remove_crc is false for the creation path), and finally adds the crc16 to A's crc The CRC is then wrong for both: * claim belongs to A: but CRC is not part of backbone A's CRC * claim doesn't belong to B: CRC is still part of backbone B's CRC This wrong CRC is never recomputated from the stored claims. For local backbone claims, this can also not recovered using syncs. To avoid this, split the functionality in clear separate parts: * new claim which always adds claim CRC to the backbone CRC (but never changes the already set backbone_gw of the claim back) * update of existing claim which automatically changes the backbone_gw entry and only updates both backbone CRCs when there was an actual change
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|