Skip to main content

Linux Kernel EUVDEUVD-2026-48811

| CVE-2026-64467 HIGH
2026-07-25 Linux GHSA-jcch-xvf6-72qc
8.8
CVSS 3.1 · Vendor: Linux
Share

Severity by source

Vendor (Linux) PRIMARY
8.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
vuln.today AI
7.8 HIGH

AC:H reflects dual requirement of 32-bit kernel AND rust_binder module; PR:L as any local binder user; S:C for user-to-kernel scope change.

3.1 AV:L/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H
4.0 AV:L/AC:H/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
SUSE
5.5 MEDIUM
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

Primary rating from Vendor (Linux).

CVSS VectorVendor: Linux

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

6
Metadata Corrected
Sep 16, 2026 - 09:40 vuln.today
tag: Information Disclosure removed
Analysis Generated
Jul 27, 2026 - 05:59 vuln.today
CVSS changed
Jul 27, 2026 - 05:22 NVD
8.8 (HIGH)
Patch available
Jul 25, 2026 - 11:18 EUVD
CVE Published
Jul 25, 2026 - 08:51 cve.org
HIGH 8.8
CVE Published
Jul 25, 2026 - 08:51 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

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

rust_binder: use a u64 stride when cleaning up the offsets array

Allocation's Drop walks the offsets array (binder_size_t = u64 entries), cleaning up the objects, but it used usize instead of u64 for both the stride and the per-entry read.

On 64-bit kernels (usize == u64) this is harmless, but on 32-bit kernels it walks the 8-byte entries in 4-byte steps, iterating an N-entry array 2N times, and reads the always-zero high word as offset 0, cleaning up the object at offset 0 N extra times. As a result the referenced node or handle ends up with a lower reference count than it actually has (a refcount over-decrement), and binder's reference accounting is corrupted; for example, the owner can be notified of a strong reference release (BR_RELEASE) even though references still remain.

Change the stride to u64, and read each entry as a u64, narrowing it to usize with try_into().

On 32-bit ARM, when this over-decrement would drive a count below zero, the driver's existing refcount guard refuses it and fires:

rust_binder: Failure: refcount underflow!

AnalysisAI

Reference-count corruption in the Linux kernel's rust_binder IPC driver on 32-bit kernels allows a local, low-privileged user to over-decrement binder object reference counts by submitting transactions with a crafted offsets array. The allocation cleanup path uses usize (32-bit on 32-bit kernels) as the stride and read width for 8-byte binder_size_t entries, causing an N-entry array to be walked 2N times and the object at offset 0 to receive N spurious release operations. This corrupts binder reference accounting, can produce premature BR_RELEASE notifications to object owners, and may lead to use-after-free conditions enabling privilege escalation or kernel instability. No public exploit and no CISA KEV listing identified at time of analysis; EPSS is 0.21%.

Technical ContextAI

The rust_binder module is the Rust-language reimplementation of Android's Binder IPC driver in the Linux kernel. When a binder Allocation is dropped, its cleanup routine walks an offsets array whose elements are binder_size_t (a u64 alias) pointing to embedded object positions within a transaction buffer. The bug is a type-width mismatch: the original code used Rust's usize (which is 32-bit wide on 32-bit architectures like ARM32) both as the iteration stride and the integer type used to read each 8-byte array entry. On 32-bit kernels this causes the iterator to step through the 8-byte entries in 4-byte increments (twice as many iterations), and each read returns only the low 32 bits of the u64 on the first pass and the high 32 bits (always zero) on the second pass, making every second read resolve to offset 0. The object at offset 0 is therefore decremented N extra times, corrupting the binder refcount state. CWE-N/A is listed, but the root cause is closest to CWE-681 (incorrect conversion between numeric types) combined with CWE-911 (improper update of reference count). Affected CPE: cpe:2.3:a:linux:linux.

RemediationAI

Apply the vendor-released kernel patches for Linux 6.18.39, 7.1.4, or 7.2-rc3, which correct the stride and read type from usize to u64 in the offsets array cleanup path. Ubuntu users should apply the updates referenced in USN-8726-1 (https://ubuntu.com/security/notices/USN-8726-1) and USN-8727-1 (https://ubuntu.com/security/notices/USN-8727-1). The upstream fix commits are available at git.kernel.org/stable/c/89b8cc948dce661af87527623b3a41cdd115e2f9, /803c8a9502e9b97cd6ae937618ef4a8fd6274343, and /74920b1b4e474ba7a4de4323c0458deec49d210b. As a compensating control on unpatched 32-bit systems, disabling or not loading the rust_binder module (if the experimental Rust binder is optional in the build configuration) eliminates the attack surface entirely; the standard C binder driver remains unaffected. Systems that are already running 64-bit kernels require no action.

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 16.0 Not-Affected

Share

EUVD-2026-48811 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy