CVE-2026-64127 in Linuxinfo

Zusammenfassung

von VulDB • 19.07.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

Bluetooth: L2CAP: ecred_reconfigure: PDU mit fester Größe senden, keinen Stackzeiger verwenden

Der Commit 1c08108f3014 („Bluetooth: L2CAP: Vermeiden von -Wflex-array-member-not-at-end-Warnungen") hat die on-stack-Anforderungs-PDU in l2cap_ecred_reconfigure() von einer expliziten gepackten Struktur (packed struct) zu DEFINE_RAW_FLEX() konvertiert, jedoch die Größen- und Quellzeigerargumente für l2cap_send_cmd() nicht angepasst:

- 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);

Nach der Konvertierung expandiert DEFINE_RAW_FLEX() zu einer Deklaration eines anonymen Unions pdu_u sowie eines lokalen Zeigers „pdu", der darauf zeigt. Daher gilt:

- sizeof(pdu) ist nun sizeof(struct l2cap_ecred_reconf_req *) = 8 auf 64-Bit-Systemen (4 auf 32-Bit), nicht die 6 Bytes von (mtu, mps, scid[1]).
- &pdu ist die Adresse des Stack-Speichers des lokalen Zeigers und nicht die Adresse der Anforderungsnutzlast.

l2cap_send_cmd() leitet (data, count) an l2cap_build_cmd() weiter, das skb_put_data(skb, data, count) aufruft. Der Körper des L2CAP_ECRED_RECONFIGURE_REQ-Pakets enthält daher 8 Bytes, die ab &pdu vom Kernel-Stack kopiert wurden – diese 8 Bytes überschneiden sich mit dem Wert des pdu-Zeigers und leaken eine Kernel-Stack-Adresse an den verbundenen Bluetooth-Gegenstellen. Die vorgesehenen Felder (mtu, mps, scid) werden überhaupt nicht übertragen, sodass der Gegenstelle die Anforderung als fehlerhaft zurückweist und das L2CAP_ECRED_RECONFIGURE-Feature selbst für den lokalen Initiator seit dem Einbringen des einführenden Commits defekt ist.

Die Schwesterstelle l2cap_ecred_conn_req() im selben Commit wurde korrekt konvertiert (sizeof(*pdu) + len, pdu); nur diese Stelle wurde übersehen.

Wiederherstellung der ursprünglichen Semantik: Übergeben Sie die volle Flex-Strukturgröße via struct_size(pdu, scid, 1) und den pdu-Zeiger (die Strukturadresse) als Quelle.

Validiert auf einem stock-basierten Host-Kernel mit Version 7.0 über den echten Auferpfad: setsockopt(SOL_BLUETOOTH, BT_RCVMTU, ...) auf einem L2CAP_MODE_EXT_FLOWCTL-Socket im Zustand BT_CONNECTED sendet eine L2CAP_ECRED_RECONFIGURE_REQ, deren Körper aus 8 Bytes (dem Wert der lokalen on-stack pdu-Variablen) besteht und nicht den erwarteten 6 Byte. Drei Capture-Aufzeichnungen von frischem Socket / neuem hciemu-Gegenstelle auf demselben Host – die niedrigen Bytes variieren pro Aufruf, hohe 0xffff bestätigen eine Kernel-Adresse (KASLR-randomisierter Stack-Slot, keine feste Zeichenkette):

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

Nach diesem Patch besteht der Körper aus 6 Bytes, die das erwartete little-endian Format von (mtu, mps, scid) tragen.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Zuständig

Linux

Reservieren

19.07.2026

Veröffentlichung

19.07.2026

Moderieren

akzeptiert

Eintrag

VDB-380283

CPE

bereit

EPSS

0.00000

KEV

nein

Aktivitäten

very low

Quellen

Do you want to use VulDB in your project?

Use the official API to access entries easily!