Skip to content
OpenAdvisories
High · 7.8 CVE-2025-40214 EUVD-2025-201158GHSA-g3xr-84mj-fvx6

af_unix: Initialise scc_index in unix_add_edge().

Published Dec 4, 2025 · Updated Aug 5, 2026 · Assigned by Linux

Vendor: Linux Product: Linux Package: linux Package: linux Package: linux-allwinner-5.19 Package: linux-aws Package: linux-aws-5.0 Package: linux-aws-5.11 Package: linux-aws-5.13 Package: linux-aws-5.19 Package: linux-aws-5.3 Package: linux-aws-5.8 Package: linux-aws-6.14 Package: linux-aws-6.17 Package: linux-aws-6.2 Package: linux-aws-6.5 Package: linux-azure Package: linux-azure-5.11 Package: linux-azure-5.13 Package: linux-azure-5.19 Package: linux-azure-5.3 Package: linux-azure-5.8 Package: linux-azure-6.11 Package: linux-azure-6.14 Package: linux-azure-6.2 Package: linux-azure-6.5 Package: linux-azure-edge Package: linux-azure-fde Package: linux-azure-fde-5.19 Package: linux-azure-fde-6.14 Package: linux-azure-fde-6.2 Package: linux-azure-nvidia-6.14 Package: linux-gcp Package: linux-gcp-5.11 Package: linux-gcp-5.13 Package: linux-gcp-5.19 Package: linux-gcp-5.3 Package: linux-gcp-5.8 Package: linux-gcp-6.11 Package: linux-gcp-6.14 Package: linux-gcp-6.17 Package: linux-gcp-6.2 Package: linux-gcp-6.5 Package: linux-gke Package: linux-gke-4.15 Package: linux-gke-5.15 Package: linux-gke-5.4 Package: linux-gkeop Package: linux-gkeop-5.15 Package: linux-gkeop-5.4 Package: linux-hwe Package: linux-hwe-5.11 Package: linux-hwe-5.13 Package: linux-hwe-5.19 Package: linux-hwe-5.8 Package: linux-hwe-6.11 Package: linux-hwe-6.14 Package: linux-hwe-6.2 Package: linux-hwe-6.5 Package: linux-hwe-edge Package: linux-intel-5.13 Package: linux-intel-iot-realtime Package: linux-lowlatency-hwe-5.19 Package: linux-lowlatency-hwe-6.11 Package: linux-lowlatency-hwe-6.2 Package: linux-lowlatency-hwe-6.5 Package: linux-nvidia-6.11 Package: linux-nvidia-6.17 Package: linux-nvidia-6.2 Package: linux-nvidia-6.5 Package: linux-oem Package: linux-oem-5.10 Package: linux-oem-5.13 Package: linux-oem-5.14 Package: linux-oem-5.17 Package: linux-oem-5.6 Package: linux-oem-6.0 Package: linux-oem-6.1 Package: linux-oem-6.11 Package: linux-oem-6.14 Package: linux-oem-6.17 Package: linux-oem-6.5 Package: linux-oem-6.8 Package: linux-oracle Package: linux-oracle-5.0 Package: linux-oracle-5.11 Package: linux-oracle-5.13 Package: linux-oracle-5.3 Package: linux-oracle-5.8 Package: linux-oracle-6.14 Package: linux-oracle-6.17 Package: linux-oracle-6.5 Package: linux-raspi Package: linux-raspi-realtime Package: linux-raspi2 Package: linux-realtime Package: linux-realtime-6.14 Package: linux-realtime-6.17 Package: linux-riscv Package: linux-riscv-5.11 Package: linux-riscv-5.19 Package: linux-riscv-5.8 Package: linux-riscv-6.14 Package: linux-riscv-6.5 Package: linux-starfive-5.19 Package: linux-starfive-6.2 Package: linux-starfive-6.5 Platform: Linux Ecosystem: Debian Ecosystem: Ubuntu

Description

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

af_unix: Initialise scc_index in unix_add_edge().

Quang Le reported that the AF_UNIX GC could garbage-collect a
receive queue of an alive in-flight socket, with a nice repro.

The repro consists of three stages.

1)
1-a. Create a single cyclic reference with many sockets
1-b. close() all sockets
1-c. Trigger GC

2)
2-a. Pass sk-A to an embryo sk-B
2-b. Pass sk-X to sk-X
2-c. Trigger GC

3)
3-a. accept() the embryo sk-B
3-b. Pass sk-B to sk-C
3-c. close() the in-flight sk-A
3-d. Trigger GC

As of 2-c, sk-A and sk-X are linked to unix_unvisited_vertices,
and unix_walk_scc() groups them into two different SCCs:

unix_sk(sk-A)->vertex->scc_index = 2 (UNIX_VERTEX_INDEX_START)
unix_sk(sk-X)->vertex->scc_index = 3

Once GC completes, unix_graph_grouped is set to true.
Also, unix_graph_maybe_cyclic is set to true due to sk-X's
cyclic self-reference, which makes close() trigger GC.

At 3-b, unix_add_edge() allocates unix_sk(sk-B)->vertex and
links it to unix_unvisited_vertices.

unix_update_graph() is called at 3-a. and 3-b., but neither
unix_graph_grouped nor unix_graph_maybe_cyclic is changed
because both sk-B's listener and sk-C are not in-flight.

3-c decrements sk-A's file refcnt to 1.

Since unix_graph_grouped is true at 3-d, unix_walk_scc_fast()
is finally called and iterates 3 sockets sk-A, sk-B, and sk-X:

sk-A -> sk-B (-> sk-C)
sk-X -> sk-X

This is totally fine. All of them are not yet close()d and
should be grouped into different SCCs.

However, unix_vertex_dead() misjudges that sk-A and sk-B are
in the same SCC and sk-A is dead.

unix_sk(sk-A)->scc_index == unix_sk(sk-B)->scc_index <-- Wrong!
&&
sk-A's file refcnt == unix_sk(sk-A)->vertex->out_degree
^-- 1 in-flight count for sk-B
-> sk-A is dead !?

The problem is that unix_add_edge() does not initialise scc_index.

Stage 1) is used for heap spraying, making a newly allocated
vertex have vertex->scc_index == 2 (UNIX_VERTEX_INDEX_START)
set by unix_walk_scc() at 1-c.

Let's track the max SCC index from the previous unix_walk_scc()
call and assign the max + 1 to a new vertex's scc_index.

This way, we can continue to avoid Tarjan's algorithm while
preventing misjudgments.

Affected products

VendorProductAffectedFixed
Linux Linux 6.1.141 – < 6.1.159, 6.6.93 – < 6.6.117, 6.10 6.1.159

Fixed in Linux distributions

Distributions backport fixes, so the version that fixes this vulnerability differs per release — upgrade to at least the version shown. From the distributions' security trackers and advisories.

ReleasePackageFixed inAdvisory
Debian 14 linux 6.17.9-1 —
Debian 13 linux 6.12.63-1 —
Debian 12 linux 6.1.159-1 —
Debian 11 linux-6.1 6.1.159-1~deb11u1 DLA-4436-1
ReleasePackageFixed inAdvisory
Ubuntu 25.10 linux 6.17.0-12.12 USN-8014-1
Ubuntu 25.10 linux-aws +2 6.17.0-1006.6 USN-8014-1
Ubuntu 25.10 linux-azure +1 6.17.0-1007.7 USN-8014-1
Ubuntu 25.10 linux-azure-fde No fix yet —
Ubuntu 25.10 linux-realtime 6.17.0-1005.6 USN-8014-1
Ubuntu 25.10 linux-riscv 6.17.0-12.12.1 —
Ubuntu 24.04 LTS linux-aws-6.17 +1 6.17.0-1007.7~24.04.1 —
Ubuntu 24.04 LTS linux-gcp-6.17 6.17.0-1008.8~24.04.1 —
Ubuntu 24.04 LTS linux-nvidia-6.17 6.17.0-1008.8 —
Ubuntu 24.04 LTS linux-oem-6.17 6.17.0-1010.10 USN-8014-1
Ubuntu 24.04 LTS linux-riscv +18 No fix yet —
Ubuntu 22.04 LTS linux-riscv +32 No fix yet —
Ubuntu 20.04 LTS linux-gke +28 No fix yet —
Ubuntu 18.04 LTS linux-gcp +14 No fix yet —
Show 2 more (older releases, extended support, other products)
ReleasePackageFixed inAdvisory
Ubuntu 16.04 LTS linux-hwe-edge No fix yet —
Ubuntu Pro Realtime 24.04 LTS linux-realtime-6.14 No fix yet —
Ubuntu Pro Realtime 24.04 LTS linux-realtime-6.17 6.17.0-1006.7~24.04.1 —
ReleasePackageFixed inAdvisory
SLES for SAP 16.0 kernel-64kb +8 6.12.0-160000.9.1 SUSE-SU-2026:20220-1
SLES for SAP 16.0 kernel-default-base 6.12.0-160000.9.1.160000.2.6 SUSE-SU-2026:20220-1
SLES for SAP 16.0 kernel-livepatch-SLE16_Update_0 8-160000.4.3 SUSE-SU-2026:20946-1
SLES for SAP 16.0 kernel-livepatch-SLE16_Update_1 6-160000.1.1 SUSE-SU-2026:20945-1
SLES for SAP 16.0 kernel-livepatch-SLE16_Update_2 4-160000.1.1 SUSE-SU-2026:20947-1
SLES for SAP 16.0 kernel-livepatch-SLE16_Update_3 3-160000.1.1 SUSE-SU-2026:20944-1
SLES 16.0 kernel-64kb +8 6.12.0-160000.9.1 SUSE-SU-2026:20228-1, SUSE-SU-2026:20220-1
SLES 16.0 kernel-default-base 6.12.0-160000.9.1.160000.2.6 SUSE-SU-2026:20220-1
SLES 16.0 kernel-livepatch-SLE16_Update_0 8-160000.4.3 SUSE-SU-2026:20946-1
SLES 16.0 kernel-livepatch-SLE16_Update_1 6-160000.1.1 SUSE-SU-2026:20945-1
SLES 16.0 kernel-livepatch-SLE16_Update_2 4-160000.1.1 SUSE-SU-2026:20947-1
SLES 16.0 kernel-livepatch-SLE16_Update_3 3-160000.1.1 SUSE-SU-2026:20944-1
SLE Micro 6.2 kernel-default-base 6.12.0-160000.9.1.160000.2.6 SUSE-SU-2026:20207-1
SLE Micro 6.2 kernel-livepatch-SLE16-RT_Update_0 6-160000.3.4 SUSE-SU-2026:20831-1
SLE Micro 6.2 kernel-livepatch-SLE16-RT_Update_1 5-160000.1.1 SUSE-SU-2026:20832-1
SLE Micro 6.2 kernel-livepatch-SLE16-RT_Update_3 2-160000.1.1 SUSE-SU-2026:20828-1
SLE Micro 6.2 kernel-livepatch-SLE16_Update_0 8-160000.4.3 SUSE-SU-2026:20841-1
SLE Micro 6.2 kernel-livepatch-SLE16_Update_1 6-160000.1.1 SUSE-SU-2026:20840-1
SLE Micro 6.2 kernel-livepatch-SLE16_Update_2 4-160000.1.1 SUSE-SU-2026:20842-1
SLE Micro 6.2 kernel-livepatch-SLE16_Update_3 +1 3-160000.1.1 SUSE-SU-2026:20837-1, SUSE-SU-2026:20829-1
SLE Micro 6.2 kernel-rt +5 6.12.0-160000.9.1 SUSE-SU-2026:20564-1, SUSE-SU-2026:20207-1
ReleasePackageFixed inAdvisory
openSUSE Leap 16.0 kernel-default-base 6.12.0-160000.9.1.160000.2.6 openSUSE-SU-2026:20145-1
openSUSE Leap 16.0 kernel-rt +11 6.12.0-160000.9.1 openSUSE-SU-2026:20145-1

Amazon Linux

ReleasePackageFixed inAdvisory
Amazon Linux 2023 kernel-livepatch-6.12.63-84.121 +1 1:1.0-0.amzn2023 ALAS2023-2026-1430, ALAS2023-2025-1350
Amazon Linux 2023 perf +14 1:6.1.159-181.297.amzn2023 ALAS2023-2025-1350
Amazon Linux 2023 perf6.12 +14 1:6.12.63-84.121.amzn2023 ALAS2023-2026-1430

Oracle Linux

ReleasePackageFixed inAdvisory
Oracle Linux 9 kernel-uek +34 6.12.0-107.59.3.2.el10uek ELSA-2026-50006

Advisories 26

References