CVE-2026-53341 (GCVE-0-2026-53341)
Vulnerability from cvelistv5
Published
2026-07-01 13:32
Modified
2026-08-05 12:35
Severity ?
VLAI Severity ?
EPSS score ?
Summary
In the Linux kernel, the following vulnerability has been resolved:
fhandle: fix UAF due to unlocked ->mnt_ns read in may_decode_fh()
may_decode_fh() accesses mount::mnt_ns without holding any locks; that
means the mount can concurrently be unmounted, and the mnt_namespace can
concurrently be freed after an RCU grace period.
This race can happens as follows, assuming that the mount point was
created by open_tree(..., OPEN_TREE_CLONE):
thread 1 thread 2 RCU
__do_sys_open_by_handle_at
do_handle_open
handle_to_path
may_decode_fh
is_mounted
[mount::mnt_ns access]
[mount::mnt_ns access]
__do_sys_close
fput_close_sync
__fput
dissolve_on_fput
umount_tree
class_namespace_excl_destructor
namespace_unlock
free_mnt_ns
mnt_ns_tree_remove
call_rcu(mnt_ns_release_rcu)
mnt_ns_release_rcu
mnt_ns_release
kfree
[mnt_namespace::user_ns access] **UAF**
Fix it by taking rcu_read_lock() around the mount::mnt_ns access, like
in __prepend_path().
Additionally, document the semantics of mount::mnt_ns, and use WRITE_ONCE()
for writers that can race with lockless readers.
This bug is unreachable unless one of the following is set:
- CONFIG_PREEMPTION
- CONFIG_RCU_STRICT_GRACE_PERIOD
because it requires an RCU grace period to happen during a syscall without
an explicit preemption.
This doesn't seem to have interesting security impact; worst-case, it could
leak the result of an integer comparison to userspace (from the level
check in cap_capable()), cause an endless loop, or crash the kernel by
dereferencing an invalid address.
References
| URL | Tags | |
|---|---|---|
Impacted products
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"fs/fhandle.c",
"fs/mount.h",
"fs/namespace.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "15ea8dc42a02259d49dee38a658d40f60fcd75ed",
"status": "affected",
"version": "620c266f394932e5decc4b34683a75dfc59dc2f4",
"versionType": "git"
},
{
"lessThan": "32138633e51e6db59e474765cf93268c92b42888",
"status": "affected",
"version": "620c266f394932e5decc4b34683a75dfc59dc2f4",
"versionType": "git"
},
{
"lessThan": "a8ed2c29fcfdac78db96c9da4e659c8a513f2a94",
"status": "affected",
"version": "620c266f394932e5decc4b34683a75dfc59dc2f4",
"versionType": "git"
},
{
"lessThan": "40ab6644b99685755f740b872c00ef40d9aa870e",
"status": "affected",
"version": "620c266f394932e5decc4b34683a75dfc59dc2f4",
"versionType": "git"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"fs/fhandle.c",
"fs/mount.h",
"fs/namespace.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "6.11"
},
{
"lessThan": "6.11",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"version": "6.12.95",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.36",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.0.*",
"status": "unaffected",
"version": "7.0.13",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "7.1",
"versionType": "original_commit_for_fix"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.12.95",
"versionStartIncluding": "6.11",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.18.36",
"versionStartIncluding": "6.11",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.0.13",
"versionStartIncluding": "6.11",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.1",
"versionStartIncluding": "6.11",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nfhandle: fix UAF due to unlocked -\u003emnt_ns read in may_decode_fh()\n\nmay_decode_fh() accesses mount::mnt_ns without holding any locks; that\nmeans the mount can concurrently be unmounted, and the mnt_namespace can\nconcurrently be freed after an RCU grace period.\n\nThis race can happens as follows, assuming that the mount point was\ncreated by open_tree(..., OPEN_TREE_CLONE):\n\nthread 1 thread 2 RCU\n __do_sys_open_by_handle_at\n do_handle_open\n handle_to_path\n may_decode_fh\n is_mounted\n [mount::mnt_ns access]\n [mount::mnt_ns access]\n__do_sys_close\n fput_close_sync\n __fput\n dissolve_on_fput\n umount_tree\n class_namespace_excl_destructor\n namespace_unlock\n free_mnt_ns\n mnt_ns_tree_remove\n call_rcu(mnt_ns_release_rcu)\n mnt_ns_release_rcu\n mnt_ns_release\n kfree\n [mnt_namespace::user_ns access] **UAF**\n\nFix it by taking rcu_read_lock() around the mount::mnt_ns access, like\nin __prepend_path().\nAdditionally, document the semantics of mount::mnt_ns, and use WRITE_ONCE()\nfor writers that can race with lockless readers.\n\nThis bug is unreachable unless one of the following is set:\n\n - CONFIG_PREEMPTION\n - CONFIG_RCU_STRICT_GRACE_PERIOD\n\nbecause it requires an RCU grace period to happen during a syscall without\nan explicit preemption.\n\nThis doesn\u0027t seem to have interesting security impact; worst-case, it could\nleak the result of an integer comparison to userspace (from the level\ncheck in cap_capable()), cause an endless loop, or crash the kernel by\ndereferencing an invalid address."
}
],
"metrics": [
{
"cvssV3_1": {
"baseScore": 7.8,
"baseSeverity": "HIGH",
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"scenarios": [
{
"lang": "en",
"value": "AV:L - The vulnerable code is reached through local syscalls, primarily `open_by_handle_at()` racing with close/fput of a mount file created by `open_tree(..., OPEN_TREE_CLONE)`. There is no network or adjacent attack path.\nAC:L - The attacker can control both sides of the race by running concurrent local threads that call `open_by_handle_at()` and close the cloned mount file. Although the bug requires preemption or strict RCU grace periods, those are reasonable kernel configurations and the race is attacker-driven.\nPR:L - The path requires namespace-relative capabilities such as `CAP_SYS_ADMIN` and `CAP_DAC_READ_SEARCH`, which an unprivileged local user can obtain inside a user namespace on systems where unprivileged user namespaces are enabled. It does not require real init-namespace root.\nUI:N - No victim action is required; the attacker directly invokes the relevant syscalls and controls the racing threads. The mount clone, handle input, and close operation are all attacker initiated.\nS:U - The vulnerability affects kernel VFS/mount namespace state within the same security authority. It is a local kernel memory-safety issue, not a VM escape or cross-scope boundary bypass.\nC:H - The bug is a kernel use-after-free of `struct mnt_namespace`, followed by dereferencing reclaimed memory through `mnt_ns-\u003euser_ns` and capability-walk fields. Per the higher-severity rule for kernel UAFs, this is scored as high confidentiality impact.\nI:H - The immediate operation is a stale read in an authorization check, but reclaimed kernel heap contents can influence capability-check control flow and UAFs are treated as potentially exploitable memory corruption. Under the required uncertainty rule, integrity impact is high.\nA:H - The stale `mnt_namespace` dereference can crash the kernel, loop indefinitely, or otherwise destabilize the system. A local attacker can repeatedly trigger the race, so availability impact is high."
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-08-05T12:35:02.388Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/15ea8dc42a02259d49dee38a658d40f60fcd75ed"
},
{
"url": "https://git.kernel.org/stable/c/32138633e51e6db59e474765cf93268c92b42888"
},
{
"url": "https://git.kernel.org/stable/c/a8ed2c29fcfdac78db96c9da4e659c8a513f2a94"
},
{
"url": "https://git.kernel.org/stable/c/40ab6644b99685755f740b872c00ef40d9aa870e"
}
],
"title": "fhandle: fix UAF due to unlocked -\u003emnt_ns read in may_decode_fh()",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2026-53341",
"datePublished": "2026-07-01T13:32:22.873Z",
"dateReserved": "2026-06-09T07:44:35.399Z",
"dateUpdated": "2026-08-05T12:35:02.388Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
Loading…
Loading…
Sightings
| Author | Source | Type | Date |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.
Loading…
Loading…