CVE-2025-37905 json
firmware: arm_scmi: Balance device refcount when destroying devices
published 2025-05-20 17 mo ago modified 2026-06-17 4 mo ago also EUVD-2025-15940
- cvss
- 5.5
- version 3.1, NVD
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.2%
- EPSS 0.2% chance of exploitation in 30 days, percentile 11%
- public exploits
- 0
- none known
Summary
In the Linux kernel, the following vulnerability has been resolved:
firmware: arm_scmi: Balance device refcount when destroying devices
Using device_find_child() to lookup the proper SCMI device to destroy causes an unbalance in device refcount, since device_find_child() calls an implicit get_device(): this, in turns, inhibits the call of the provided release methods upon devices destruction.
As a consequence, one of the structures that is not freed properly upon destruction is the internal struct device_private dev->p populated by the drivers subsystem core.
KMemleak detects this situation since loading/unloding some SCMI driver causes related devices to be created/destroyed without calling any device_release method.
unreferenced object 0xffff00000f583800 (size 512): comm "insmod", pid 227, jiffies 4294912190 hex dump (first 32 bytes): 00 00 00 00 ad 4e ad de ff ff ff ff 00 00 00 00 .....N.......... ff ff ff ff ff ff ff ff 60 36 1d 8a 00 80 ff ff ........`6...... backtrace (crc 114e2eed): kmemleak_alloc+0xbc/0xd8 __kmalloc_cache_noprof+0x2dc/0x398 device_add+0x954/0x12d0 device_register+0x28/0x40 __scmi_device_create.part.0+0x1bc/0x380 scmi_device_create+0x2d0/0x390 scmi_create_protocol_devices+0x74/0xf8 scmi_device_request_notifier+0x1f8/0x2a8 notifier_call_chain+0x110/0x3b0 blocking_notifier_call_chain+0x70/0xb0 scmi_driver_register+0x350/0x7f0 0xffff80000a3b3038 do_one_initcall+0x12c/0x730 do_init_module+0x1dc/0x640 load_module+0x4b20/0x5b70 init_module_from_file+0xec/0x158
$ ./scripts/faddr2line ./vmlinux device_add+0x954/0x12d0 device_add+0x954/0x12d0: kmalloc_noprof at include/linux/slab.h:901 (inlined by) kzalloc_noprof at include/linux/slab.h:1037 (inlined by) device_private_init at drivers/base/core.c:3510 (inlined by) device_add at drivers/base/core.c:3561
Balance device refcount by issuing a put_device() on devices found via device_find_child().
Patch / fix
- Linux Linux 5.15.182, 6.1.138, 6.6.90, 6.12.28, 6.14.6, 6.15
- linux Debian 12 6.1.140-1
- linux Debian 14, Debian 13 6.12.29-1
debian advisories DEBIAN-CVE-2025-37905
- linux Ubuntu 22.04 LTS 5.15.0-144.157
- linux Ubuntu 24.04 LTS 6.8.0-100.100
- linux-aws Ubuntu 22.04 LTS 5.15.0-1088.95
- linux-aws Ubuntu 24.04 LTS 6.8.0-1046.49
- linux-gcp Ubuntu 22.04 LTS 5.15.0-1087.96
- linux-gcp Ubuntu 24.04 LTS 6.8.0-1047.50
- linux-gke Ubuntu 22.04 LTS 5.15.0-1085.91
- linux-gke Ubuntu 24.04 LTS 6.8.0-1043.48
ubuntu advisories UBUNTU-CVE-2025-37905
Ubuntu security data © Canonical Ltd., from https://github.com/canonical/ubuntu-security-notices via OSV; changed: normalised to fixed package versions per release. CC BY-SA 4.0
- kernel-coco SLE Module for Confidential Computing Technical Preview 15 SP6 6.4.0-15061.28.coco15sp6.1
- kernel-syms-coco SLE Module for Confidential Computing Technical Preview 15 SP6 6.4.0-15061.28.coco15sp6.1
- kernel-coco_debug SLE Module for Confidential Computing Technical Preview 15 SP6 6.4.0-15061.28.coco15sp6.1
- kernel-source-coco SLE Module for Confidential Computing Technical Preview 15 SP6 6.4.0-15061.28.coco15sp6.1
- kernel-rt Real Time Module 15 SP7 6.4.0-150700.7.8.1
- kernel-syms-rt Real Time Module 15 SP7 6.4.0-150700.7.8.1
- kernel-source-rt Real Time Module 15 SP7 6.4.0-150700.7.8.1
- kernel-64kb SLE Module for Basesystem 15 SP7 6.4.0-150700.53.6.1
suse advisories SUSE-SU-2025:02923-1SUSE-SU-2025:02333-1SUSE-SU-2025:02307-1SUSE-SU-2025:02254-1SUSE-SU-2025:02000-1SUSE-SU-2025:20413-1
- git.kernel.org/stable/c/91ff1e9652fb9beb0174267d6bb38243dff211bb commit
- git.kernel.org/stable/c/ff4273d47da81b95ed9396110bcbd1b7b7470fe8 commit
- git.kernel.org/stable/c/2fbf6c9695ad9f05e7e5c166bf43fac7cb3276b3 commit
- git.kernel.org/stable/c/969d8beaa2e374387bf9aa5602ef84fc50bb48d8 commit
- git.kernel.org/stable/c/8a8a3547d5c4960da053df49c75bf623827a25da commit
- git.kernel.org/stable/c/9ca67840c0ddf3f39407339624cef824a4f27599 commit
Vendor advisories
What the vendors themselves say about their products: affected, fixed or not affected, and what to do.
red hat product security vex CVE-2025-37905 updated
kernel: firmware: arm_scmi: Balance device refcount when destroying devices
-
Red Hat Enterprise Linux 6 perf, kernel, python-perf, kernel-kdump, kernel-firmware, kernel-bootwrapper, +1 more Red Hat Enterprise Linux 7 perf, kernel, bpftool, kernel-rt, python-perf, kernel-kdump, +8 more Red Hat Enterprise Linux 8 perf, kernel, bpftool, kernel-rt, kernel-core, kernel-tools, +29 more Red Hat Enterprise Linux 9 rv, perf, rtla, kernel, bpftool, libperf, +83 more Red Hat Enterprise Linux 10 kernelnot affected: vulnerable code not present
Red Hat CSAF VEX © Red Hat, Inc., from https://security.access.redhat.com/data/csaf/v2/vex/; changed: reduced to product statuses and remediations. CC BY 4.0 · csaf
Exploit prediction
0.21% chance of exploitation in the next 30 days, higher than 11% of all scored CVEs (FIRST EPSS, 2026-11-08).
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| NVD | 3.1 | 5.5 | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H |
Affected products
- Linux Linux
Classification
- Weakness
-
- CWE-401 Missing Release of Memory after Effective Lifetime
- Technology feeds
References
-
git.kernel.org
/stable/c/91ff1e9652fb9beb0174267d6bb38243dff211bb
patch
-
git.kernel.org
/stable/c/ff4273d47da81b95ed9396110bcbd1b7b7470fe8
patch
-
git.kernel.org
/stable/c/2fbf6c9695ad9f05e7e5c166bf43fac7cb3276b3
patch
-
git.kernel.org
/stable/c/969d8beaa2e374387bf9aa5602ef84fc50bb48d8
patch
-
git.kernel.org
/stable/c/8a8a3547d5c4960da053df49c75bf623827a25da
patch
-
git.kernel.org
/stable/c/9ca67840c0ddf3f39407339624cef824a4f27599
patch
-
lists.debian.org
/debian-lts-announce/2025/08/msg00010.html
mailing-list
Sources
- CVE List CVE-2025-37905
- NVD CVE-2025-37905
Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.