CVE-2026-31503

CVE-2026-31503

Medium · published April 22, 2026

CVSS v3.1
5.5
EPSS
0%
Percentile
2.0
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

udp: Fix wildcard bind conflict check when using hash2

When binding a udp_sock to a local address and port, UDP uses

two hashes (udptable->hash and udptable->hash2) for collision

detection. The current code switches to "hash2" when

hslot->count > 10.

"hash2" is keyed by local address and local port.

"hash" is keyed by local port only.

The issue can be shown in the following bind sequence (pseudo code):

bind(fd1, "[fd00::1]:8888")

bind(fd2, "[fd00::2]:8888")

bind(fd3, "[fd00::3]:8888")

bind(fd4, "[fd00::4]:8888")

bind(fd5, "[fd00::5]:8888")

bind(fd6, "[fd00::6]:8888")

bind(fd7, "[fd00::7]:8888")

bind(fd8, "[fd00::8]:8888")

bind(fd9, "[fd00::9]:8888")

bind(fd10, "[fd00::10]:8888")

/* Correctly return -EADDRINUSE because "hash" is used

* instead of "hash2". udp_lib_lport_inuse() detects the

* conflict.

*/

bind(fail_fd, "[::]:8888")

/* After one more socket is bound to "[fd00::11]:8888",

* hslot->count exceeds 10 and "hash2" is used instead.

*/

bind(fd11, "[fd00::11]:8888")

bind(fail_fd, "[::]:8888") /* succeeds unexpectedly */

The same issue applies to the IPv4 wildcard address "0.0.0.0"

and the IPv4-mapped wildcard address "::ffff:0.0.0.0". For

example, if there are existing sockets bound to

"192.168.1.[1-11]:8888", then binding "0.0.0.0:8888" or

"[::ffff:0.0.0.0]:8888" can also miss the conflict when

hslot->count > 10.

TCP inet_csk_get_port() already has the correct check in

inet_use_bhash2_on_bind(). Rename it to

inet_use_hash2_on_bind() and move it to inet_hashtables.h

so udp.c can reuse it in this fix.

The record
Technical detail
CVSS v3.1
5.5 · MEDIUM
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
CVSS v4.0
Not supplied
EPSS
0.00125 · 2.0th percentile
Published
2026-04-22T18:16Z
Affected products (13)
ProductVersionsFixed in
linux/linux_kernel≥ 2.6.33.1, < 6.1.1686.1.168
linux/linux_kernel≥ 6.2, < 6.6.1316.6.131
linux/linux_kernel≥ 6.7, < 6.12.806.12.80
linux/linux_kernel≥ 6.13, < 6.18.216.18.21
linux/linux_kernel≥ 6.19, < 6.19.116.19.11
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (9)
EPSS history
Timeline
  • 22 APR 13:54Z
    udp: Fix wildcard bind conflict check when using hash2
    cvelistv5