← All Advisories

Linux Kernel fscrypt Direct Key Cache Omits Super_Block Comparison, Allowing a Key's Lifetime to Outlast Its Filesystem and Causing Use-After-Free

Last refreshed2026-09-29

Status: NEW  |  Advisory ID: CVE-2026-68148

Key Details

CVECVE-2026-68148
CVSS Score / Version7.8 (High) / CVSS v3.1
Updated2026-08-19
CVSS VectorCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS Proseattack vector is local; attack complexity is low; privileges required is low; user interaction is none; scope is unchanged; confidentiality impact is high; integrity impact is high; availability impact is high.

What to Know

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

fscrypt: Add missing superblock check in find_or_insert_direct_key()

The legacy 'fscrypt_direct_keys' table caches master keys that are used

by v1 encryption policies that have FSCRYPT_POLICY_FLAG_DIRECT_KEY.

It's just a global table for all filesystems (since the keys can be

provided by the legacy process-subscribed keyrings mechanism, which

makes it difficult to reuse super_block::s_master_keys).

The entries in it ('struct fscrypt_direct_key') do contain a super_block

pointer, though, for passing to fscrypt_destroy_inline_crypt_key() when

the last inode that references the key is evicted.

However, when finding the fscrypt_direct_key for an inode, we weren't

actually comparing the super_block pointer. As a result, inodes with

different super_blocks could point to the same fscrypt_direct_key. That

could extend the lifetime of a fscrypt_direct_key beyond the

super_block it points to, causing a use-after-free later.

Fix this by creating distinct fscrypt_direct_key structs for distinct

super_block structs.

Note that this problem doesn't exist in the v2 policy equivalent

("per-mode keys"), since the data structures there are per super_block. (NVD)

References

SourceReference
NVDhttps://nvd.nist.gov/vuln/detail/CVE-2026-68148
CVEhttps://www.cve.org/CVERecord?id=CVE-2026-68148