CVE-2026-74274 in Linux
Zusammenfassung
von VulDB • 15.08.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
cxl/region: Füllen des ersten freien Slots im targets[]-Array während der automatischen Erkennung (Auto-Discovery)
Ein ungültiger Zeiger auf einen Endpoint-Decoder in dem Zielarray eines aktiven Bereichs ist vom CXL-Treiber nicht zulässig. Das bedeutet, dass der CXL-Treiber stets davon ausgeht, dass die ersten p->nr_targets-Einträge des Zielarrays in einem automatisch erstellten (auto-assembly) Bereich gültig sind. Es gibt jedoch Szenarien, die dazu führen können, dass NULL-Zeigerlücken im Zielarray entstehen.
1. Wenn cxl_cancel_auto_attach() einen Endpoint-Decoder aus dem Zielarray entfernt, wird der Zielslot auf NULL gesetzt. Falls der entfernte Endpoint-Decoder nicht das letzte Element im Zielarray ist, enthält das Zielarray eine Lücke mit einem NULL-Wert.
2. Wenn ein automatisch erstellter Bereich (auto-assembly region) einen zugewiesenen Endpoint-Decoder entfernt und dieser Decodierer nicht das letzte Element im Zielarray war, bleibt stets eine Lücke mit einem NULL-Wert im Zielarray zurück.
Wenn in dem Zielarray eines Bereichs eine NULL-Zeigerlücke existiert, führt dies zu zwei potenziellen Problemen: 1. Zugriff auf einen Endpoint-Decoder über einen NULL-Zeiger. Dies löst immer einen Calltrace wie den folgenden aus: Oops: general protection fault, probably for non-canonical address 0xdffffc0000000008: 0000 [#1] SMP KASAN PTI
RIP: 0010:cxl_calc_interleave_pos+0x26/0x810 [cxl_core]
Call Trace: <TASK> cxl_region_attach+0xc50/0x2140 [cxl_core]
cxl_add_to_region+0x321/0x2330 [cxl_core]
discover_region+0x92/0x150 [cxl_port]
device_for_each_child+0xf3/0x170 cxl_port_probe+0x150/0x200 [cxl_port]
cxl_bus_probe+0x4f/0xa0 [cxl_core]
really_probe+0x1c8/0x960 __driver_probe_device+0x323/0x450 driver_probe_device+0x45/0x120 __device_attach_driver+0x15d/0x280 bus_for_each_drv+0x10f/0x190
2. Nicht genügend gültige Endpoint-Decoder sind an einen automatisch erstellten Bereich (auto-assembly region) angehängt. Wenn ein automatisch erstellter Bereich mit einem Sperrflag erstellt wird oder ein zugewiesener Endpoint-Decoder mit einem Sperrflag versehen ist, bedeutet dies, dass der zugewiesene Endpoint-Decoder beim Trennen nicht zurückgesetzt wird; sie können sich erneut an den automatisch erstellten Bereich anschließen. Der CXL-Region-Treiber verlässt sich jedoch auf p->nr_targets, um zu überprüfen, ob die erforderliche Anzahl von Endpoint-Decodern angehängt wurde, und NULL-Zeiger für Endpoint-Decoder werden in diesem Fall weiterhin mitgezählt.
Um diese Probleme zu beheben, wird die Logik von cxl_region_attach_auto() so angepasst, dass der erste freie Zielslot für das Anhängen eines Endpoint-Decoders gefunden wird. Dies stellt sicher, dass Lücken im Zielarray (NULL-Lücken) gefüllt werden, anstatt neue Endpoint-Decoder am Ende des Zielarrays hinzuzufügen.
VulDB is the best source for vulnerability data and more expert information about this specific topic.