CVE-2025-37999: fs/erofs/fileio: call erofs_onlinefolio_split() after bio_add_folio()

Published May 29, 2025
·
Updated

In the Linux kernel, the following vulnerability has been resolved:

fs/erofs/fileio: call erofsonlinefoliosplit() after bioaddfolio()

If bioaddfolio() fails (because it is full), erofsfileioscanfolio() needs to submit the I/O request via erofsfileiorqsubmit() and allocate a new I/O request with an empty struct bio. Then it retries the bioaddfolio() call.

However, at this point, erofsonlinefoliosplit() has already been called which increments folio->private; the retry will call erofsonlinefoliosplit() again, but there will never be a matching erofsonlinefolioend() call. This leaves the folio locked forever and all waiters will be stuck in foliowaitbitcommon().

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.:

posixfadvise(fd, 0, st.stsize, POSIXFADVWILLNEED);

This should be fixed by invoking erofsonlinefoliosplit() only after bioaddfolio() has succeeded. This is safe: asynchronous completions invoking erofsonlinefolioend() will not unlock the folio because erofsfileioscanfolio() is still holding a reference to be released by erofsonlinefolioend() at the end.

Affected Software

8 affected components
Linux Kernel>=unknown
Linux Linux kernel>=6.12<6.12.29
Linux Linux kernel>=6.13<6.14.7
Linux Linux kernel=6.15-rc1
Linux Linux kernel=6.15-rc2
Linux Linux kernel=6.15-rc3
Linux Linux kernel=6.15-rc4
Linux Linux kernel=6.15-rc5

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade to a fixed release to a version that resolves this vulnerability.

    Patch fs/erofs/fileio: call erofs_onlinefolio_split() after bio_add_folio()

Event History

May 29, 2025
CVE Published
via MITRE·01:15 PM
Data Sourced
via MITRE·01:15 PM
Description
Data Sourced
via NVD·02:15 PM
RemedyDescriptionSeverityAffected Software

Frequently Asked Questions

1

What is the severity of CVE-2025-37999?

CVE-2025-37999 has a medium severity level due to its potential impact on file I/O operations.

2

How do I fix CVE-2025-37999?

To fix CVE-2025-37999, update your Linux kernel to version 5.10 or later.

3

What does CVE-2025-37999 affect?

CVE-2025-37999 affects the file I/O functionality in the Linux kernel up to version 5.10.

4

Can CVE-2025-37999 lead to data loss?

Yes, if exploited, CVE-2025-37999 may lead to data loss during file I/O operations.

5

Is CVE-2025-37999 applicable to all Linux distributions?

CVE-2025-37999 is applicable to any Linux distribution that uses the affected kernel versions up to 5.10.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203