Linux Kernel bis 6.15.4/6.16-rc3 mm move_pages_pte Denial of Service

| CVSS Meta Temp Score | Aktueller Exploitpreis (≈) | CTI Interest Score |
|---|---|---|
| 4.6 | $0-$5k | 0.00 |
Zusammenfassung
Eine problematische Schwachstelle wurde in Linux Kernel bis 6.15.4/6.16-rc3 gefunden. Betroffen ist die Funktion move_pages_pte der Komponente mm. Dank Manipulation mit unbekannten Daten kann eine Denial of Service-Schwachstelle ausgenutzt werden.
Die Verwundbarkeit wird als CVE-2025-38242 geführt. Es ist kein Exploit verfügbar.
Es wird empfohlen, die betroffene Komponente zu aktualisieren.
Details
Eine Schwachstelle wurde in Linux Kernel bis 6.15.4/6.16-rc3 gefunden. Sie wurde als problematisch eingestuft. Davon betroffen ist die Funktion move_pages_pte der Komponente mm. Durch Manipulation mit einer unbekannten Eingabe kann eine Denial of Service-Schwachstelle ausgenutzt werden. Klassifiziert wurde die Schwachstelle durch CWE als CWE-770. Dies wirkt sich aus auf die Verfügbarkeit. CVE fasst zusammen:
In the Linux kernel, the following vulnerability has been resolved:
mm: userfaultfd: fix race of userfaultfd_move and swap cache
This commit fixes two kinds of races, they may have different results:
Barry reported a BUG_ON in commit c50f8e6053b0, we may see the same
BUG_ON if the filemap lookup returned NULL and folio is added to swap
cache after that.
If another kind of race is triggered (folio changed after lookup) we
may see RSS counter is corrupted:
[ 406.893936] BUG: Bad rss-counter state mm:ffff0000c5a9ddc0
type:MM_ANONPAGES val:-1
[ 406.894071] BUG: Bad rss-counter state mm:ffff0000c5a9ddc0
type:MM_SHMEMPAGES val:1
Because the folio is being accounted to the wrong VMA.
I'm not sure if there will be any data corruption though, seems no.
The issues above are critical already.
On seeing a swap entry PTE, userfaultfd_move does a lockless swap cache
lookup, and tries to move the found folio to the faulting vma. Currently,
it relies on checking the PTE value to ensure that the moved folio still
belongs to the src swap entry and that no new folio has been added to the
swap cache, which turns out to be unreliable.
While working and reviewing the swap table series with Barry, following
existing races are observed and reproduced [1]:
In the example below, move_pages_pte is moving src_pte to dst_pte, where
src_pte is a swap entry PTE holding swap entry S1, and S1 is not in the
swap cache:
CPU1 CPU2
userfaultfd_move
move_pages_pte()
entry = pte_to_swp_entry(orig_src_pte);
// Here it got entry = S1
... < interrupted> ...
<swapin src_pte, alloc and use folio A>
// folio A is a new allocated folio
// and get installed into src_pte
<frees swap entry S1>
// src_pte now points to folio A, S1
// has swap count == 0, it can be freed
// by folio_swap_swap or swap
// allocator's reclaim.
<try to swap out another folio B>
// folio B is a folio in another VMA.
<put folio B to swap cache using S1 >
// S1 is freed, folio B can use it
// for swap out with no problem.
...
folio = filemap_get_folio(S1)
// Got folio B here !!!
... < interrupted again> ...
<swapin folio B and free S1>
// Now S1 is free to be used again.
<swapout src_pte & folio A using S1>
// Now src_pte is a swap entry PTE
// holding S1 again.
folio_trylock(folio)
move_swap_pte
double_pt_lock
is_pte_pages_stable
// Check passed because src_pte == S1
folio_move_anon_rmap(...)
// Moved invalid folio B here !!!
The race window is very short and requires multiple collisions of multiple
rare events, so it's very unlikely to happen, but with a deliberately
constructed reproducer and increased time window, it can be reproduced
easily.
This can be fixed by checking if the folio returned by filemap is the
valid swap cache folio after acquiring the folio lock.
Another similar race is possible: filemap_get_folio may return NULL, but
folio (A) could be swapped in and then swapped out again using the same
swap entry after the lookup. In such a case, folio (A) may remain in the
swap cache, so it must be moved too:
CPU1 CPU2
userfaultfd_move
move_pages_pte()
entry = pte_to_swp_entry(orig_src_pte);
// Here it got entry = S1, and S1 is not in swap cache
folio = filemap_get
---truncated---Auf git.kernel.org kann das Advisory eingesehen werden. Die Identifikation der Schwachstelle findet seit dem 16.04.2025 als CVE-2025-38242 statt. Sie ist schwierig ausnutzbar. Zur Schwachstelle sind technische Details bekannt, ein verfügbarer Exploit jedoch nicht.
Für den Vulnerability Scanner Nessus wurde ein Plugin mit der ID 271193 (Ubuntu 24.04 LTS / 25.04 : Linux kernel (Azure) vulnerabilities (USN-7834-1)) herausgegeben, womit die Existenz der Schwachstelle geprüft werden kann.
Ein Upgrade auf die Version 6.15.5 oder 6.16-rc4 vermag dieses Problem zu beheben. Die Schwachstelle lässt sich auch durch das Einspielen des Patches db2ca8074955ca64187a4fb596dd290b9c446cd3/0ea148a799198518d8ebab63ddd0bb6114a103bc beheben. Dieser kann von git.kernel.org bezogen werden. Als bestmögliche Massnahme wird das Aktualisieren auf eine neue Version empfohlen.
Unter anderem wird der Fehler auch in den Datenbanken von Tenable (271193), EUVD (EUVD-2025-20819) und CERT Bund (WID-SEC-2025-1517) dokumentiert. If you want to get best quality of vulnerability data, you may have to visit VulDB.
Betroffen
- Debian Linux
- Google Cloud Platform
- Red Hat Enterprise Linux
- Ubuntu Linux
- SUSE Linux
- Oracle Linux
- IBM QRadar SIEM
- SUSE openSUSE
- NetApp ActiveIQ Unified Manager
- Dell Avamar
- Open Source Linux Kernel
- Dell NetWorker
- Dell Secure Connect Gateway
Produkt
Typ
Hersteller
Name
Version
Lizenz
Webseite
- Hersteller: https://www.kernel.org/
CPE 2.3
CPE 2.2
CVSSv4
VulDB Vector: 🔒VulDB Zuverlässigkeit: 🔍
CVSSv3
VulDB Meta Base Score: 4.6VulDB Meta Temp Score: 4.6
VulDB Base Score: 4.6
VulDB Temp Score: 4.4
VulDB Vector: 🔒
VulDB Zuverlässigkeit: 🔍
NVD Base Score: 4.7
NVD Vector: 🔒
CVSSv2
| AV | AC | Au | C | I | A |
|---|---|---|---|---|---|
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| Vektor | Komplexität | Authentisierung | Vertraulichkeit | Integrität | Verfügbarkeit |
|---|---|---|---|---|---|
| freischalten | freischalten | freischalten | freischalten | freischalten | freischalten |
| freischalten | freischalten | freischalten | freischalten | freischalten | freischalten |
| freischalten | freischalten | freischalten | freischalten | freischalten | freischalten |
VulDB Base Score: 🔒
VulDB Temp Score: 🔒
VulDB Zuverlässigkeit: 🔍
Exploiting
Klasse: Denial of ServiceCWE: CWE-770 / CWE-400 / CWE-404
CAPEC: 🔒
ATT&CK: 🔒
Physisch: Teilweise
Lokal: Ja
Remote: Teilweise
Verfügbarkeit: 🔒
Status: Nicht definiert
EPSS Score: 🔒
EPSS Percentile: 🔒
Preisentwicklung: 🔍
Aktuelle Preisschätzung: 🔒
| 0-Day | freischalten | freischalten | freischalten | freischalten |
|---|---|---|---|---|
| Heute | freischalten | freischalten | freischalten | freischalten |
Nessus ID: 271193
Nessus Name: Ubuntu 24.04 LTS / 25.04 : Linux kernel (Azure) vulnerabilities (USN-7834-1)
Threat Intelligence
Interesse: 🔍Aktive Akteure: 🔍
Aktive APT Gruppen: 🔍
Gegenmassnahmen
Empfehlung: UpgradeStatus: 🔍
0-Day Time: 🔒
Upgrade: Kernel 6.15.5/6.16-rc4
Patch: db2ca8074955ca64187a4fb596dd290b9c446cd3/0ea148a799198518d8ebab63ddd0bb6114a103bc
Timeline
16.04.2025 CVE zugewiesen09.07.2025 Advisory veröffentlicht
09.07.2025 VulDB Eintrag erstellt
02.05.2026 VulDB Eintrag letzte Aktualisierung
Quellen
Hersteller: kernel.orgAdvisory: git.kernel.org
Status: Bestätigt
CVE: CVE-2025-38242 (🔒)
GCVE (CVE): GCVE-0-2025-38242
GCVE (VulDB): GCVE-100-315770
EUVD: 🔒
CERT Bund: WID-SEC-2025-1517 - Linux Kernel: Mehrere Schwachstellen ermöglichen Denial of Service
Eintrag
Erstellt: 09.07.2025 13:38Aktualisierung: 02.05.2026 11:20
Anpassungen: 09.07.2025 13:38 (58), 09.07.2025 15:55 (1), 23.08.2025 00:38 (7), 25.09.2025 13:00 (1), 26.10.2025 12:20 (2), 02.11.2025 21:43 (1), 19.11.2025 20:49 (12), 30.01.2026 21:00 (1), 02.05.2026 11:20 (2)
Komplett: 🔍
Cache ID: 216::103
If you want to get best quality of vulnerability data, you may have to visit VulDB.
Bisher keine Kommentare. Sprachen: de + en.
Bitte loggen Sie sich ein, um kommentieren zu können.