Skip to main content

Linux Kernel CVE-2026-64127

| EUVDEUVD-2026-45812 MEDIUM
2026-07-19 Linux GHSA-w532-m3j8-f99h
5.5
CVSS 3.1 · NVD
Share

Severity by source

NVD PRIMARY
5.5 MEDIUM
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
vuln.today AI
6.1 MEDIUM

Local trigger via setsockopt (AV:L, PR:L); leaks kernel VA defeating KASLR (C:H); ECRED feature broken but no crash or availability denial beyond that feature (A:L).

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

Primary rating from NVD.

CVSS VectorNVD

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

Lifecycle Timeline

5
Analysis Generated
Aug 13, 2026 - 15:28 vuln.today
CVSS changed
Aug 13, 2026 - 15:22 NVD
5.5 (MEDIUM)
Patch available
Jul 19, 2026 - 17:03 EUVD
CVE Published
Jul 19, 2026 - 15:40 nvd
MEDIUM 5.5
CVE Published
Jul 19, 2026 - 15:40 cve.org
UNKNOWN (no severity yet)

DescriptionNVD

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

Bluetooth: L2CAP: ecred_reconfigure: send packed pdu, not stack pointer

Commit 1c08108f3014 ("Bluetooth: L2CAP: Avoid -Wflex-array-member-not-at-end warnings") converted the on-stack request PDU in l2cap_ecred_reconfigure() from an explicit packed struct to DEFINE_RAW_FLEX(), but did not adjust the size and source-pointer arguments to l2cap_send_cmd():

  • struct {
  • struct l2cap_ecred_reconf_req req;
  • __le16 scid;
  • } pdu;

+ DEFINE_RAW_FLEX(struct l2cap_ecred_reconf_req, pdu, scid, 1); ... l2cap_send_cmd(conn, chan->ident, L2CAP_ECRED_RECONF_REQ, sizeof(pdu), &pdu);

After the conversion, DEFINE_RAW_FLEX() expands to declare an anonymous union pdu_u plus a local pointer "pdu" pointing at it. Therefore:

  • sizeof(pdu) is now sizeof(struct l2cap_ecred_reconf_req *) = 8 on

64-bit (4 on 32-bit), not the 6 bytes of (mtu, mps, scid[1]).

  • &pdu is the address of the local pointer's stack storage, not the

address of the request payload.

l2cap_send_cmd() forwards (data, count) to l2cap_build_cmd(), which calls skb_put_data(skb, data, count). The L2CAP_ECRED_RECONFIGURE_REQ packet body therefore contains 8 bytes copied from the kernel stack starting at &pdu -- the 8 bytes overlap the pdu pointer's value, leaking a kernel stack address to the paired Bluetooth peer. The intended (mtu, mps, scid) fields are not transmitted at all, so the peer rejects the request as malformed and the L2CAP_ECRED_RECONFIGURE feature itself has been broken for the local-side initiator since the introducing commit landed.

The sibling site l2cap_ecred_conn_req() in the same commit was converted correctly (sizeof(*pdu) + len, pdu); only this site was missed.

Restore the original semantics: pass the full flex-struct size via struct_size(pdu, scid, 1) and the pdu pointer (the struct address) as the source.

Validated on a stock 7.0-based host kernel via the real call path: setsockopt(SOL_BLUETOOTH, BT_RCVMTU, ...) on a BT_CONNECTED L2CAP_MODE_EXT_FLOWCTL socket emits an L2CAP_ECRED_RECONFIGURE_REQ whose body is 8 bytes (the on-stack pdu local's value) rather than the expected 6. Three captures from fresh socket / fresh hciemu peer on the same host -- low bytes vary per call, high 0xffff confirms a kernel virtual address (KASLR-randomised stack slot, not a fixed string):

RECONF_REQ body (ident=0x02 len=8): 42 fb 54 af 0e ca ff ff RECONF_REQ body (ident=0x02 len=8): 52 3d 2e af 0e ca ff ff RECONF_REQ body (ident=0x02 len=8): b2 fc 5b af 0e ca ff ff

After this patch the body is 6 bytes carrying the expected little-endian (mtu, mps, scid).

AnalysisAI

Kernel stack address disclosure in the Linux kernel's Bluetooth L2CAP subsystem leaks 8 bytes of kernel virtual address space to a paired Bluetooth peer whenever a local user triggers an L2CAP Enhanced Credit-Based Reconfigure (ECRED) request. The flaw was introduced by commit 1c08108f3014 when DEFINE_RAW_FLEX() converted the on-stack PDU struct but left l2cap_send_cmd() receiving the local pointer's stack storage address and sizeof(pointer) instead of the struct address and struct size. As a result, the ECRED reconfigure feature has been functionally broken for local initiators since that commit, and every reconfigure attempt passively leaks a KASLR-randomized kernel stack address to the Bluetooth peer, potentially aiding ASLR/KASLR bypass. No public exploit is identified at time of analysis, and the EPSS score of 0.18% (7th percentile) reflects low automated exploitation probability.

Technical ContextAI

The vulnerability resides in the Bluetooth L2CAP subsystem of the Linux kernel, specifically in l2cap_ecred_reconfigure() (net/bluetooth/l2cap_core.c). The DEFINE_RAW_FLEX() macro, introduced to suppress -Wflex-array-member-not-at-end compiler warnings (commit 1c08108f3014), expands to an anonymous union plus a typed local pointer named 'pdu'. The sibling function l2cap_ecred_conn_req() was converted correctly using sizeof(*pdu) and the dereferenced pointer, but l2cap_ecred_reconfigure() retained sizeof(pdu) - which evaluates to sizeof(pointer), 8 bytes on 64-bit and 4 on 32-bit - and &pdu, which is the address of the local pointer variable on the kernel stack rather than the address of the PDU payload. l2cap_send_cmd() forwards these directly to l2cap_build_cmd() and skb_put_data(), so the on-wire L2CAP_ECRED_RECONF_REQ body carries those raw stack bytes (containing the pointer's own value, a KASLR-randomized kernel virtual address) rather than the intended (mtu, mps, scid) fields. CWE classification is not assigned, but the root cause is a classic C pointer/size confusion bug - analogous to CWE-466 (Return of Pointer Value Address of Local Variable) combined with an out-of-bounds read relative to the intended PDU boundary. CPE: cpe:2.3:a:linux:linux.

RemediationAI

Upgrade to a patched kernel release: Linux 6.12.92, 6.18.34, 7.0.11, or 7.1 (mainline). Upstream fix commits are available at the kernel stable tree (links above). Ubuntu users should apply the update referenced in USN-8593-1 (https://ubuntu.com/security/notices/USN-8593-1). For systems where immediate kernel upgrade is not feasible, the primary compensating control is to disable Bluetooth entirely (rfkill block bluetooth or blacklist btusb/bluetooth kernel modules), which prevents any L2CAP connection from being established and eliminates the attack surface entirely - trade-off is loss of all Bluetooth functionality. A narrower control is restricting access to Bluetooth socket creation by removing non-privileged users from the 'bluetooth' group and ensuring CAP_NET_RAW is not granted to untrusted processes; this does not eliminate the vulnerability but reduces the population of local users who can trigger the leak. Restricting Bluetooth to known-paired, trusted peers via the system's Bluetooth controller policy (e.g., bluetoothctl trust) limits the population of peers that can receive the leaked address, but does not prevent the leak itself.

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

CVE-2026-64127 vulnerability details – vuln.today

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