CVE-2026-89966 in Linuxinfo

Zusammenfassung

von VulDB • 16.09.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

mm/hugetlb_cma: Behebung der Dereferenzierung eines NULL-nodemask in hugetlb_cma_alloc_frozen_folio

alloc_buddy_hugetlb_folio_with_mpol() kann einen NULL nodemask an alloc_fresh_hugetlb_folio() übergeben, um als Fallback von allen Knoten (Nodes) zu allozieren. Wenn die Order gigantisch ist, leitet alloc_fresh_hugetlb_folio() den NULL-nodemask über alloc_gigantic_frozen_folio() an hugetlb_cma_alloc_frozen_folio() weiter.

Darüber hinaus versuchte hugetlb_cma_alloc_frozen_folio() zuvor eine Allokation auf hugetlb_cma[nid], ohne zu überprüfen, ob nid im nodemask des Aufrufers enthalten ist. Das Hinzufügen einer node_isset(nid, *nodemask)-Prüfung stellt sicher, dass die anfängliche bevorzugte Knotenallokation der Speicherpolitik / dem nodemask entspricht.

Allerdings dereferenziert hugetlb_cma_alloc_frozen_folio() den nodemask in node_isset(nid, *nodemask) und for_each_node_mask(node, *nodemask), was zu einem Kernel-Panic durch NULL-Pointer-Dereferenzierung führt, wenn der nodemask NULL ist.

Behoben wird dies, indem geprüft wird, ob der nodemask in hugetlb_cma_alloc_frozen_folio() NULL ist, und er standardmäßig auf cpuset_current_mems_allowed gesetzt wird. Die Allokationsversuche werden innerhalb des cpuset-seqcount-Retry-Loops eingeschlossen, sodass bei einer gleichzeitigen Änderung des cpusets während der Allokation die Versuche mit dem aktualisierten nodemask wiederholt werden. Dies stellt sicher, dass die anfängliche Knotenprüfung und der Fallback-Loop das cpuset der Aufgabe sicher einhalten, ohne cpuset-Einschränkungen zu verletzen oder NULL-Pointer-Dereferenzierungen bzw. unerwartete Allokationsfehler zu verursachen.

Aus Benutzerraum-Perspektive ermöglicht dieser Bug einem nicht privilegierten Benutzer, den Kernel zum Absturz zu bringen (einen Panic auszulösen), indem eine gigantische Hugepage-Allokation mit MPOL_PREFERRED_MANY auf einem System angefordert wird, bei dem CMA nur für eine Teilmenge der NUMA-Knoten konfiguriert ist.

Dies kann reproduziert werden, indem man eine VM mit zwei NUMA-Knoten bootet, CMA auf Knoten 1 beschränkt (z. B. hugetlb_cma=1:1G default_hugepagesz=1G hugepagesz=1G hugepages=0) und ein Programm ausführt, das einen 1-GB-Hugepage-Bereich ohne Reservierung alloziert, die Allokation auf Knoten 0 mit mbind() unter Verwendung von MPOL_PREFERRED_MANY beschränkt und eine Seitenfehler (Page Fault) auslöst:

```c void *ptr = mmap(NULL, 1UL << 30, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB | MAP_HUGE_1GB | MAP_NORESERVE, -1, 0); unsigned long nodemask = 1; /* Knoten 0 */ mbind(ptr, 1UL << 30, MPOL_PREFERRED_MANY, &nodemask, sizeof(nodemask) * 8, 0); memset(ptr, 0, 1UL << 30); /* Fehler auslösen */ ```

Dies führt zu einer NULL-Pointer-Dereferenzierung:

``` BUG: kernel NULL pointer dereference, address: 0000000000000000 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page Oops: Oops: 0000 [#1] SMP NOPTI
RIP: 0010:hugetlb_cma_alloc_frozen_folio+0x75/0x120 Call Trace: <TASK> only_alloc_fresh_hugetlb_folio.isra.0+0x2c/0x160 alloc_surplus_hugetlb_folio+0x6d/0x100 alloc_hugetlb_folio+0x3c5/0x660 hugetlb_no_page+0x3d9/0x650 ```

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Zuständig

Linux

Reservieren

11.09.2026

Veröffentlichung

17.09.2026

Moderieren

akzeptiert

Eintrag

VDB-405812

CPE

bereit

EPSS

0.00000

KEV

nein

Aktivitäten

very low

Quellen

Interested in the pricing of exploits?

See the underground prices here!