[SRU][J/N/Q][PATCH 0/1] CVE-2026-31504
Tim Whisonant
tim.whisonant at canonical.com
Tue Apr 28 23:04:56 UTC 2026
SRU Justification:
[Impact]
net: fix fanout UAF in packet_release() via NETDEV_UP race
`packet_release()` has a race window where `NETDEV_UP` can re-register a
socket into a fanout group's `arr[]` array. The re-registration is not
cleaned up by `fanout_release()`, leaving a dangling pointer in the fanout
array.
`packet_release()` does NOT zero `po->num` in its `bind_lock` section.
After releasing `bind_lock`, `po->num` is still non-zero and `po->ifindex`
still matches the bound device. A concurrent `packet_notifier(NETDEV_UP)`
that already found the socket in `sklist` can re-register the hook.
For fanout sockets, this re-registration calls `__fanout_link(sk, po)`
which adds the socket back into `f->arr[]` and increments `f->num_members`,
but does NOT increment `f->sk_ref`.
The fix sets `po->num` to zero in `packet_release` while `bind_lock` is
held to prevent NETDEV_UP from linking, preventing the race window.
This bug was found following an additional audit with Claude Code based
on CVE-2025-38617.
[Fix]
Resolute: not affected
Questing: applied Jammy patch
Noble: applied Jammy patch
Jammy: cherry picked from upstream
Focal: sent to forgejo
Bionic: sent to forgejo
Xenial: sent to forgejo
Trusty: won't fix
[Test Plan]
Compile and boot tested.
[Where problems could occur]
The change affects the AF_PACKET socket cleanup routine in order
to prevent a race condition between cleanup and NETDEV_UP. Issues
would affect only these AF_PACKET socket types.
Yochai Eisenrich (1):
net: fix fanout UAF in packet_release() via NETDEV_UP race
net/packet/af_packet.c | 1 +
1 file changed, 1 insertion(+)
--
2.43.0
More information about the kernel-team
mailing list