Skip to content
OpenAdvisories
Unscored CVE-2025-40209 EUVD-2025-198438GHSA-2833-8jvf-3588

btrfs: fix memory leak of qgroup_list in btrfs_add_qgroup_relation

Published Nov 21, 2025 · Updated May 11, 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:

btrfs: fix memory leak of qgroup_list in btrfs_add_qgroup_relation

When btrfs_add_qgroup_relation() is called with invalid qgroup levels
(src >= dst), the function returns -EINVAL directly without freeing the
preallocated qgroup_list structure passed by the caller. This causes a
memory leak because the caller unconditionally sets the pointer to NULL
after the call, preventing any cleanup.

The issue occurs because the level validation check happens before the
mutex is acquired and before any error handling path that would free
the prealloc pointer. On this early return, the cleanup code at the
'out' label (which includes kfree(prealloc)) is never reached.

In btrfs_ioctl_qgroup_assign(), the code pattern is:

prealloc = kzalloc(sizeof(*prealloc), GFP_KERNEL);
ret = btrfs_add_qgroup_relation(trans, sa->src, sa->dst, prealloc);
prealloc = NULL; // Always set to NULL regardless of return value
...
kfree(prealloc); // This becomes kfree(NULL), does nothing

When the level check fails, 'prealloc' is never freed by either the
callee or the caller, resulting in a 64-byte memory leak per failed
operation. This can be triggered repeatedly by an unprivileged user
with access to a writable btrfs mount, potentially exhausting kernel
memory.

Fix this by freeing prealloc before the early return, ensuring prealloc
is always freed on all error paths.

Affected products

VendorProductAffectedFixed
Linux Linux 6.11 6.12.58

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.8-1 —
Debian 13 linux 6.12.63-1 —
ReleasePackageFixed inAdvisory
Ubuntu 25.10 linux 6.17.0-14.14 USN-8029-1
Ubuntu 25.10 linux-aws +2 6.17.0-1007.7 USN-8030-1, USN-8029-2
Ubuntu 25.10 linux-azure +1 6.17.0-1008.8 USN-8029-3, USN-8029-1
Ubuntu 25.10 linux-azure-fde No fix yet —
Ubuntu 25.10 linux-realtime 6.17.0-1006.7 USN-8029-1
Ubuntu 25.10 linux-riscv 6.17.0-14.14.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-1011.11 USN-8048-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 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
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-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.58-82.121 1:1.0-0.amzn2023 ALAS2023-2026-1495
Amazon Linux 2023 perf6.12 +14 1:6.12.58-82.121.amzn2023 ALAS2023-2026-1495

Oracle Linux

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

Advisories 13

References