CVE-2026-97597: ipv6: flowlabel: cap duplicate leases per socket
In the Linux kernel, the following vulnerability has been resolved:
ipv6: flowlabel: cap duplicate leases per socket
ipv6flowlabelget() allocates an ipv6flsocklist entry for every successful GET. The recheck path for a compatible existing flowlabel links another lease without applying any lease admission check. Repeated GET requests for one shareable label can therefore grow a socket's lease list without bound.
Reject a new unprivileged lease once the socket already holds FLMAXPERSOCK leases. Check this on the shared recheck path so reuse of a globally interned label, including the flintern() collision path, is covered as well. New-label admission remains under the existing memcheck() policy.
Use capable(CAPNETADMIN) rather than nscapable(), matching memcheck(). An unprivileged user must not bypass the cap by creating a user namespace and a netns where they have CAPNETADMIN, which would still consume host memory.
Check the capability only when the socket reaches the limit, so successful unprivileged GET requests below the cap do not generate a capability audit. Do the admission check before updating linger and expires so a rejected GET does not refresh the shared label, matching the existing socket-list allocation failure path.
Affected Software
Event History
Frequently Asked Questions
Who can trigger the unbounded growth?
An unprivileged user that can repeatedly issue successful IPv6 flow-label GET requests on a socket can grow that socket's lease list without bound when reusing a compatible shareable label. The growth consumes host memory.
What request pattern is required to exploit the issue?
The attacker must repeatedly obtain leases for one shareable flow label through the compatible-existing-label recheck path. This includes reuse of a globally interned label and the fl_intern() collision path.
Can an attacker bypass the intended restriction by creating a user and network namespace?
No. The resolved behavior uses capable(CAP_NET_ADMIN), rather than ns_capable(), so CAP_NET_ADMIN obtained in a user namespace and network namespace does not permit an unprivileged user to bypass the per-socket lease cap while consuming host memory.
Are privileged users subject to the new lease limit?
The new admission check rejects a lease at the per-socket limit only for unprivileged users. A caller with CAP_NET_ADMIN is not rejected by this specific limit check.