# CVE-2026-31452: ext4: convert inline data to extents when truncate exceeds inline size

Status: published. Published: 2026-04-22. Updated: 2026-11-05.

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

ext4: convert inline data to extents when truncate exceeds inline size

Add a check in ext4_setattr() to convert files from inline data storage
to extent-based storage when truncate() grows the file size beyond the
inline capacity. This prevents the filesystem from entering an
inconsistent state where the inline data flag is set but the file size
exceeds what can be stored inline.

Without this fix, the following sequence causes a kernel BUG_ON():

1. Mount filesystem with inode that has inline flag set and small size
2. truncate(file, 50MB) - grows size but inline flag remains set
3. sendfile() attempts to write data
4. ext4_write_inline_data() hits BUG_ON(write_size > inline_capacity)

The crash occurs because ext4_write_inline_data() expects inline storage
to accommodate the write, but the actual inline capacity (~60 bytes for
i_block + ~96 bytes for xattrs) is far smaller than the file size and
write request.

The fix checks if the new size from setattr exceeds the inode's actual
inline capacity (EXT4_I(inode)->i_inline_size) and converts the file to
extent-based storage before proceeding with the size change.

This addresses the root cause by ensuring the inline data flag and file
size remain consistent during truncate operations.

## Remediation

No remediation reported in collected sources

## Affected products and versions

- Linux / Linux: ≥ 67cf5b09a46f72e048501b84996f2f77bc42e947; < 110d7ef602659ce4d7947c5480f7ca2779696aaf (affected, git); ≥ 67cf5b09a46f72e048501b84996f2f77bc42e947; < f53a5d9f32924bc2a810d2df243b7714da58b636 (affected, git); ≥ 67cf5b09a46f72e048501b84996f2f77bc42e947; < c047332be7195833a5c5126816c2502df8269fe4 (affected, git); ≥ 67cf5b09a46f72e048501b84996f2f77bc42e947; < 699bac4d4c951974d55b045c983d1de777215949 (affected, git); ≥ 67cf5b09a46f72e048501b84996f2f77bc42e947; < 7920dcc571cef3d8aa9ee109c136125d61d41669 (affected, git); ≥ 67cf5b09a46f72e048501b84996f2f77bc42e947; < 93cb2d103e5c707de0f7ad58a39b7f0fddc27aa6 (affected, git); ≥ 67cf5b09a46f72e048501b84996f2f77bc42e947; < 07c1a31af18290054da3d18221b8bf58983c5d3a (affected, git); ≥ 67cf5b09a46f72e048501b84996f2f77bc42e947; < ed9356a30e59c7cc3198e7fc46cfedf3767b9b17 (affected, git). Source: CNA: Linux
- Linux / Linux: 3.8 (affected); ≥ 0; < 3.8 (unaffected, semver); ≥ 5.10.253; ≤ 5.10.* (unaffected, semver); ≥ 5.15.203; ≤ 5.15.* (unaffected, semver); ≥ 6.1.168; ≤ 6.1.* (unaffected, semver); ≥ 6.6.131; ≤ 6.6.* (unaffected, semver); ≥ 6.12.80; ≤ 6.12.* (unaffected, semver); ≥ 6.18.21; ≤ 6.18.* (unaffected, semver); ≥ 6.19.11; ≤ 6.19.* (unaffected, semver); ≥ 7.0; ≤ * (unaffected, original_commit_for_fix). Source: CNA: Linux
- Siemens / SIMATIC S7-1500 CPU 1518-4 PN/DP MFP: ≥ V3.1.6; < * (affected, custom). Source: ADP: siemens-SADP
- Siemens / SIMATIC S7-1500 CPU 1518-4 PN/DP MFP: ≥ V3.1.5; < * (affected, custom). Source: ADP: siemens-SADP
- Siemens / SIMATIC S7-1500 CPU 1518-4 PN/DP MFP: ≥ V3.1.7; < * (affected, custom). Source: ADP: siemens-SADP
- Siemens / SIMATIC S7-1500 CPU 1518F-4 PN/DP MFP: ≥ V3.1.6; < * (affected, custom). Source: ADP: siemens-SADP
- Siemens / SIMATIC S7-1500 CPU 1518F-4 PN/DP MFP: ≥ V3.1.5; < * (affected, custom). Source: ADP: siemens-SADP
- Siemens / SIMATIC S7-1500 CPU 1518F-4 PN/DP MFP: ≥ V3.1.7; < * (affected, custom). Source: ADP: siemens-SADP
- Siemens / SIPLUS S7-1500 CPU 1518-4 PN/DP MFP: ≥ V3.1.6; < * (affected, custom). Source: ADP: siemens-SADP
- Siemens / SIPLUS S7-1500 CPU 1518-4 PN/DP MFP: ≥ V3.1.5; < * (affected, custom). Source: ADP: siemens-SADP
- Siemens / SIPLUS S7-1500 CPU 1518-4 PN/DP MFP: ≥ V3.1.7; < * (affected, custom). Source: ADP: siemens-SADP

## Severity and prioritization

- CISA KEV: No listing in collected sources

- EPSS: 0.14% as of 2026-11-05; percentile 3.00%

- SSVC: exploitation none; automatable no; technical impact partial; source ADP: CISA-ADP

- Weaknesses: Not reported

## Exploit evidence

No exploit evidence in collected sources. This is not proof of no exploitation.

## References

- https://git.kernel.org/stable/c/110d7ef602659ce4d7947c5480f7ca2779696aaf (CNA: Linux)

- https://git.kernel.org/stable/c/f53a5d9f32924bc2a810d2df243b7714da58b636 (CNA: Linux)

- https://git.kernel.org/stable/c/c047332be7195833a5c5126816c2502df8269fe4 (CNA: Linux)

- https://git.kernel.org/stable/c/699bac4d4c951974d55b045c983d1de777215949 (CNA: Linux)

- https://git.kernel.org/stable/c/7920dcc571cef3d8aa9ee109c136125d61d41669 (CNA: Linux)

- https://git.kernel.org/stable/c/93cb2d103e5c707de0f7ad58a39b7f0fddc27aa6 (CNA: Linux)

- https://git.kernel.org/stable/c/07c1a31af18290054da3d18221b8bf58983c5d3a (CNA: Linux)

- https://git.kernel.org/stable/c/ed9356a30e59c7cc3198e7fc46cfedf3767b9b17 (CNA: Linux)

- https://cert-portal.siemens.com/productcert/html/ssa-082556.html (ADP: siemens-SADP)

- https://cert-portal.siemens.com/productcert/html/ssa-019113.html (ADP: siemens-SADP)

- https://cert-portal.siemens.com/productcert/html/ssa-457936.html (ADP: siemens-SADP)

## Provenance

- CNA: Linux: https://www.cve.org/CVERecord?id=CVE-2026-31452; retrieved 2026-11-05; source updated 2026-11-05

- FIRST EPSS: https://api.first.org/data/v1/epss?cve=CVE-2026-31452; retrieved 2026-11-05; source updated Not reported

Revision: 5a95cb588263cc959621c1c0aa4dd622870bf43c13d43c38f1217adf6bce6c93

Canonical: https://y2.dev/cve/CVE-2026-31452

## Agent and API access

Public CVE pages, Markdown, and JSON are free to read without an account or API key.

- Public catalog: https://y2.dev/cve/index.json. Follow nextCursor with the same search, filters, sort, and limit (1–100). A null cursor marks the end.

- WebMCP: search_cve_disclosures, get_cve_disclosure, get_cve_page_markdown, get_y2_cve_access. Available in compatible browsers.

- Cyber API: https://api.y2.dev/api/v2/cyber/cves and https://api.y2.dev/api/v2/cyber/cves/{cveId}.

- Y2 Pro or Elite: create a workspace API key with the intel:cyber scope and send Authorization: Bearer <Y2_API_KEY>. Setup: https://y2.dev/docs/api/create-key.

- x402: Pay per request without an account or API key. Omit Authorization, read the HTTP 402 PAYMENT-REQUIRED challenge, validate its current requirements, and retry with PAYMENT-SIGNATURE through an authorized payment client. These browser tools never make payments. Guide: https://y2.dev/docs/api/x402.

- OpenAPI: https://y2.dev/api/openapi.yaml. Agent access metadata: https://y2.dev/cve/agent.json.

Collected public records only. Check source status for coverage and freshness.