CVE-2026-90096: fuse: invalidate the correct range after O_APPEND direct write

Published Sep 17, 2026
·
Updated

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

fuse: invalidate the correct range after OAPPEND direct write

fusedirectwriteiter() captures pos before genericwritechecks(), which moves kipos to EOF for OAPPEND writes:

fusedirectwriteiter() { pos = iocb->kipos; / 0 (user-supplied) / genericwritechecks(); / kipos -> EOF / fusedirectio(); / writes at EOF, correct / invalidate(pos, pos + res); / [0, res) -- wrong / }

The post-write invalidation targets a stale range instead of the actual written range at EOF.

This can cause data inconsistency when the file size is not page-aligned. The tail page straddling EOF has a valid portion before EOF that concurrent readers can fault back in during the DIO write window:

Tail page (file size X not page-aligned):

pagestart X (EOF) pageend |--- valid data ----|-- stale --|

CPU0 (OAPPEND DIO writer) CPU1 (buffered reader) -------------------------- ---------------------- invalidate [X, X+len) tail page evicted FUSEWRITE in flight ... read [pagestart, X) tail page re-faulted [X, pageend) = stale FUSEWRITE completes isize = X + len invalidate [0, len) <- WRONG tail page still cached read [X, X+len) hits stale tail page returns old data

Fix by reading pos back from iocb->kipos after genericwritechecks(), as genericfiledirectwrite() does.

Also fix a typo in the comment ("may have" -> "may have competed").

Event History

Sep 17, 2026
CVE Published
via MITRE·04:06 PM
Data Sourced
via MITRE·04:06 PM
Description

Frequently Asked Questions

1

Under what conditions can this cause inconsistent reads?

The issue requires a FUSE direct-I/O append write and a file whose current size is not page-aligned. A concurrent buffered reader must fault the tail page back into cache while the FUSE write is in flight, allowing stale data in the newly appended range to remain cached.

2

What is the practical impact of a successful race?

Readers can observe stale cached contents rather than the data written by the append operation. The problem is a data-consistency issue caused by invalidating the user-supplied pre-append offset instead of the actual EOF write range.

3

Are ordinary non-append writes affected?

The described condition is specific to O_APPEND direct writes, where generic write checks move the write position to EOF. The provided information does not indicate that non-append writes are affected.

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