CVE-2025-37999: Linux kernel · fs/erofs/fileio: call erofs_onlinefolio_split() after bio_add_folio()
Affects Linux kernelSource CVE Database V5
Not known to be exploited.
Data as of 26 Oct 2026, 17:16 UTC
Rated High by the CNA (Linux) · No CVSS score from NVD or the CNA
- EPSS
- 0.1% chance of exploitation in 30 days – higher than 8% of CVEsExploit Prediction Scoring System: the likelihood attackers will use this flaw soon.
Exploitation evidence
Disclosed: evidence found.
CVE published 29 May 2025
Detectable: no evidence on record.
No public nuclei template indexed
Weaponised: no evidence on record.
No public exploit code indexed in Metasploit or Exploit-DB
Exploited in the wildExploited: no evidence on record.
Not in CISA KEV and no source reports exploitation
Observed by OffSeq MirageSeen by Mirage: no evidence on record.
No attack traffic recorded by OffSeq Mirage sensors
A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), the Metasploit, Exploit-DB and nuclei-templates index as of 26 Oct 2026.
What to do
AI-suggested
European organizations should prioritize updating Linux kernels to versions that include the fix for CVE-2025-37999. Kernel maintainers have corrected the code to call erofs_onlinefolio_split() only after bio_add_folio() succeeds, preventing folio lockups. Until patches are applied, administrators should monitor systems using EROFS mounts for symptoms such as hung processes or I/O stalls, especially following readahead operations. Limiting or disabling aggressive readahead on EROFS filesystems can reduce exposure. Additionally, auditing and restricting user-space applications that perform manual readahead (e.g., via posix_fadvise()) on EROFS volumes can mitigate risk. For environments using containerization or virtualization, ensure host kernels are patched since guest kernels may rely on host I/O. Implementing robust monitoring and alerting for I/O hangs and process stalls will aid in early detection. Finally, organizations should maintain an inventory of systems using EROFS to prioritize patching and risk assessment.
Description
In the Linux kernel, the following vulnerability has been resolved: fs/erofs/fileio: call erofs_onlinefolio_split() after bio_add_folio() If bio_add_folio() fails (because it is full), erofs_fileio_scan_folio() needs to submit the I/O request via erofs_fileio_rq_submit() and allocate a new I/O request with an empty `struct bio`. Then it retries the bio_add_folio() call. However, at this point, erofs_onlinefolio_split() has already been called which increments `folio->private`; the retry will call erofs_onlinefolio_split() again, but there will never be a matching erofs_onlinefolio_end() call. This leaves the folio locked forever and all waiters will be stuck in folio_wait_bit_common(). This bug has been added by commit ce63cb62d794 ("erofs: support unencoded inodes for fileio"), but was practically unreachable because there was room for 256 folios in the `struct bio` - until commit 9f74ae8c9ac9 ("erofs: shorten bvecs[] for file-backed mounts") which reduced the array capacity to 16 folios. It was now trivial to trigger the bug by manually invoking readahead from userspace, e.g.: posix_fadvise(fd, 0, st.st_size, POSIX_FADV_WILLNEED); This should be fixed by invoking erofs_onlinefolio_split() only after bio_add_folio() has succeeded. This is safe: asynchronous completions invoking erofs_onlinefolio_end() will not unlock the folio because erofs_fileio_scan_folio() is still holding a reference to be released by erofs_onlinefolio_end() at the end.