CVE-2026-80806
NoneCVSS
—
EPSS
0.2%
Published
Sep 4, 2026
CISA due date
—
Cloudanix analysis
A Linux file-system bug can let some encrypted files be stored without protection when a performance feature is turned on, risking exposure of sensitive data.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Moderate
- Impact
- Data Exposure
- Component
- OS kernel
- Class
- Other
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The ext4 inode initialization sequence sets S_DAX on new encrypted regular files before EXT4_INODE_ENCRYPT is applied, allowing direct-access writes to bypass the encryption layer when the filesystem is mounted with dax=always.
Why it matters to the business
Encrypted data on ext4 volumes can be written in plaintext on disk, exposing sensitive information and potentially violating compliance or data-protection requirements in environments that rely on DAX for performance.
How an attack unfolds
An attacker with the ability to create files on a DAX-enabled ext4 filesystem mounts the volume with dax=always, creates a new encrypted regular file, and writes data to it; because S_DAX is set before encryption flags, the data is stored unencrypted.
How to fix it
Upgrade to a kernel containing the fix that moves EXT4_INODE_ENCRYPT initialization before the initial ext4_set_inode_flags call and prevents MAY_INLINE_DATA on encrypted inodes; rebuild and reboot affected systems.
How to confirm the fix worked
Confirm the running kernel contains the commit that sets EXT4_INODE_ENCRYPT earlier in __ext4_new_inode; reproduce by creating an encrypted file on a dax=always mount and verifying S_DAX is never set via statx or inode flags inspection.
Typical attack path
- Mount ext4 filesystem with the dax=always option
- Create a new encrypted regular file via standard userspace APIs
- Write data through the file descriptor
- Observe that the on-disk blocks contain plaintext rather than ciphertext
How to detect it
Search system logs and audit trails for ext4 mounts using dax=always combined with fscrypt-enabled directories; examine inode flags on newly created encrypted files for unexpected S_DAX presence.
What your security team should do
- Apply the corrected kernel immediately on any system using ext4 with dax=always and encryption
- Audit ext4 mount options and disable dax=always on encrypted volumes until patched
- Monitor kernel changelogs for backported fixes in distribution kernels
The record
In the Linux kernel, the following vulnerability has been resolved: ext4: don't enable DAX on new encrypted files Currently, when a new encrypted regular file is created, the call to ext4_set_inode_flags(inode, init=true) in __ext4_new_inode() is made before EXT4_INODE_ENCRYPT is set. As a result, it can set S_DAX if the filesystem is mounted with "-o dax=always". EXT4_INODE_ENCRYPT then actually gets set a bit later in __ext4_new_inode(), when it calls fscrypt_set_context() which calls ext4_set_context(). ext4_set_context() sets EXT4_INODE_ENCRYPT and calls ext4_set_inode_flags(inode, init=false) to set S_ENCRYPTED too. This was intended to clear S_DAX as well. However, this was broken by commit 043546e46dc7 ("fs/ext4: Only change S_DAX on inode load"). This causes data written to the file to bypass encryption, also causing xfstests failures such as generic/548 (when "-o dax=always" is used). Fix this by simplifying the flow by making __ext4_new_inode() set EXT4_INODE_ENCRYPT earlier. This makes it take effect in ext4_set_inode_flags(inode, init=true), making S_DAX never be set. Similarly, make EXT4_STATE_MAY_INLINE_DATA never be set in the first place on new encrypted inodes. Then it doesn't need to be cleared. As a result of these simplifications, ext4_set_context() no longer needs to change inode flags or state when 'handle != NULL'. Remove that too.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|