CVE-2021-47546: ipv6: fix memory leak in fib6_rule_suppress
In the Linux kernel, the following vulnerability has been resolved:
ipv6: fix memory leak in fib6_rule_suppress
The kernel leaks memory when a `fib` rule is present in IPv6 nftables
firewall rules and a suppress_prefix rule is present in the IPv6 routing
rules (used by certain tools such as wg-quick). In such scenarios, every
incoming packet will leak an allocation in `ip6_dst_cache` slab cache.
After some hours of `bpftrace`-ing and source code reading, I tracked
down the issue to ca7a03c41753 ("ipv6: do not free rt if
FIB_LOOKUP_NOREF is set on suppress rule").
The problem with that change is that the generic `args->flags` always have
`FIB_LOOKUP_NOREF` set[1][2] but the IPv6-specific flag
`RT6_LOOKUP_F_DST_NOREF` might not be, leading to `fib6_rule_suppress` not
decreasing the refcount when needed.
How to reproduce:
- Add the following nftables rule to a prerouting chain:
meta nfproto ipv6 fib saddr . mark . iif oif missing drop
This can be done with:
sudo nft create table inet test
sudo nft create chain inet test test_chain '{ type filter hook prerouting priority filter + 10; policy accept; }'
sudo nft add rule inet test test_chain meta nfproto ipv6 fib saddr . mark . iif oif missing drop
- Run:
sudo ip -6 rule add table main suppress_prefixlength 0
- Watch `sudo slabtop -o | grep ip6_dst_cache` to see memory usage increase
with every incoming ipv6 packet.
This patch exposes the protocol-specific flags to the protocol
specific `suppress` function, and check the protocol-specific `flags`
argument for RT6_LOOKUP_F_DST_NOREF instead of the generic
FIB_LOOKUP_NOREF when decreasing the refcount, like this.
[1]: https://github.com/torvalds/linux/blob/ca7a03c4175366a92cee0ccc4fec0038c3266e26/net/ipv6/fib6_rules.c#L71
[2]: https://github.com/torvalds/linux/blob/ca7a03c4175366a92cee0ccc4fec0038c3266e26/net/ipv6/fib6_rules.c#L99
Security readout for executives and security teams
Plain-English summary
This Linux kernel issue can leak memory during IPv6 packet handling when specific nftables and IPv6 routing-rule features are used together. On exposed systems, repeated IPv6 traffic could steadily consume kernel memory and threaten availability. The source bundle does not show active exploitation or a CVSS score.
Executive priority
Patch during the next regular Linux maintenance cycle, sooner for IPv6-enabled gateways, VPN hosts, or high-traffic systems using advanced routing and nftables policy. Business urgency is availability-focused, not data theft based on current evidence.
Technical view
The bug is in fib6_rule_suppress. Generic lookup flags could indicate no reference handling while the IPv6-specific RT6_LOOKUP_F_DST_NOREF flag did not, causing ip6_dst_cache references not to be released. Stable kernel fixes adjust suppress handling to use protocol-specific flags.
Likely exposure
Exposure is most likely on Linux systems using IPv6 nftables fib matching together with IPv6 suppress_prefix routing rules, including configurations associated with tools such as wg-quick. Systems without that combined configuration are less likely to be affected based on the provided description.
Exploitation context
The bundle includes a reproducible local configuration condition but no KEV listing, exploit report, or public abuse evidence. Treat this primarily as an availability risk where network traffic can amplify a kernel memory leak after the vulnerable configuration exists.
Researcher notes
The source identifies ca7a03c41753 as the regressing change and names fixed stable commits. The affected-version metadata is sparse and should be mapped through each Linux distribution’s kernel packages before making fleet-wide conclusions.
Mitigation direction
Update affected Linux kernels to vendor builds containing the stable fixes.
Prioritize internet-facing or high-traffic IPv6 systems using nftables fib rules.
Review distribution advisories for exact fixed package versions.
Temporarily reduce use of the triggering rule combination where operationally safe.
Monitor kernel memory and slab cache growth until patched.
Validation and detection
Inventory Linux kernel versions against vendor advisories and the listed stable fixes.
Check whether IPv6 nftables fib matching is configured.
Check whether IPv6 suppress_prefix routing rules are present.
Correlate unexplained memory growth with IPv6 traffic on matching systems.
Confirm patched kernels no longer show ip6_dst_cache growth under authorized testing.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cve · low confidence lookup
CVE-2021-47546 mapping review
Open the CVE-to-ATT&CK bridge for reviewed, inferred, or future official mappings tied to this CVE.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.