nfsd: fix BUG_ON in nfsd4_alloc_layout_stateid on racing delegation revoke
In the Linux kernel, the following vulnerability has been resolved: nfsd: fix BUG_ON in nfsd4_alloc_layout_stateid on racing delegation revoke nfsd4_alloc_layout_stateid reads fp->fi_deleg_file without holding fi_lock when the parent stateid is a delegation. A concurrent delegation revoke via the laundromat can clear fi_deleg_file under fi_lock, causing nfsd_file_get() to return NULL and triggering the BUG_ON. This race is client-reachable: two NFS clients can trigger it by having one hold a delegation while another opens the same file to force a recall. When the first client doesn't respond to the recall, the laundromat revokes it. A concurrent LAYOUTGET from any client using the delegation stateid hits the race window. Fix this by taking fi_lock around the fi_deleg_file read in the SC_TYPE_DELEG path, matching the locking discipline of the find_any_file() arm, and replacing the BUG_ON with a graceful error return that cleans up the partially-initialized layout stateid.
- Products
- Kernel
- Affected versions
- Not specified
- Fixed versions
- 6.1.191, 6.12.109, 6.18.50, 6.6.160, 7.2.4
- CVEs
- CVE-2026-89686
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 8 Nov 2026, 01:28 UTC · Revision 1
Source evidence
nfsd: fix BUG_ON in nfsd4_alloc_layout_stateid on racing delegation revoke
core-osv · Original sourcePublished 11 Sept 2026, 19:46 UTC
In the Linux kernel, the following vulnerability has been resolved: nfsd: fix BUG_ON in nfsd4_alloc_layout_stateid on racing delegation revoke nfsd4_alloc_layout_stateid reads fp->fi_deleg_file without holding fi_lock when the parent stateid is a delegation. A concurrent delegation revoke via the laundromat can clear fi_deleg_file under fi_lock, causing nfsd_file_get() to return NULL and triggering the BUG_ON. This race is client-reachable: two NFS clients can trigger it by having one hold a delegation while another opens the same file to force a recall. When the first client doesn't respond to the recall, the laundromat revokes it. A concurrent LAYOUTGET from any client using the delegation stateid hits the race window. Fix this by taking fi_lock around the fi_deleg_file read in the SC_TYPE_DELEG path, matching the locking discipline of the find_any_file() arm, and replacing the BUG_ON with a graceful error return that cleans up the partially-initialized layout stateid.
osv:CVE-2026-89686
Kernel
Fixed versions: 6.1.191, 6.6.160, 6.12.109, 6.18.50, 7.2.4
Complete source record
{
"id": "8a978447beda1492ffe9b0a3119b8382059bcf1ad0f90761309ec2508ea32cd6",
"url": "https://osv.dev/vulnerability/CVE-2026-89686",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "nfsd: fix BUG_ON in nfsd4_alloc_layout_stateid on racing delegation revoke",
"summary": "In the Linux kernel, the following vulnerability has been resolved: nfsd: fix BUG_ON in nfsd4_alloc_layout_stateid on racing delegation revoke nfsd4_alloc_layout_stateid reads fp->fi_deleg_file without holding fi_lock when the parent stateid is a delegation. A concurrent delegation revoke via the laundromat can clear fi_deleg_file under fi_lock, causing nfsd_file_get() to return NULL and triggering the BUG_ON. This race is client-reachable: two NFS clients can trigger it by having one hold a delegation while another opens the same file to force a recall. When the first client doesn't respond to the recall, the laundromat revokes it. A concurrent LAYOUTGET from any client using the delegation stateid hits the race window. Fix this by taking fi_lock around the fi_deleg_file read in the SC_TYPE_DELEG path, matching the locking discipline of the find_any_file() arm, and replacing the BUG_ON with a graceful error return that cleans up the partially-initialized layout stateid.",
"evidence": "osv:CVE-2026-89686",
"products": [
{
"name": {
"value": "Kernel",
"evidence": "/affected/1/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "6.1.191",
"evidence": "/affected/1/ranges"
},
{
"value": "6.6.160",
"evidence": "/affected/1/ranges"
},
{
"value": "6.12.109",
"evidence": "/affected/1/ranges"
},
{
"value": "6.18.50",
"evidence": "/affected/1/ranges"
},
{
"value": "7.2.4",
"evidence": "/affected/1/ranges"
}
],
"affected_versions": []
}
],
"severity": "critical",
"structured": {
"id": "CVE-2026-89686",
"aliases": [
"CVE-2026-89686"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"type": "GIT",
"events": [
{
"introduced": "c5c707f96fc9a6e5a57ca5baac892673270abe3d"
},
{
"fixed": "f5011c26246d1abed3dc750c9744e33cb79ff9bc"
},
{
"fixed": "d12af460df27876661707efab3a8532146cb961f"
},
{
"fixed": "c517f27498757e616d2a8fe6d16caad1fee422e6"
},
{
"fixed": "607a56fea772c1f4f4989d8e255dd4f7192d9604"
},
{
"fixed": "97bda8b4284d90897a1f1922e5082ff9e35d7c7e"
},
{
"fixed": "ca94ba36172046be6a694a7986f6931e47ed4d51"
}
]
}
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-89686.json"
}
},
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "4.0.0"
},
{
"fixed": "6.1.191"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.2.0"
},
{
"fixed": "6.6.160"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.7.0"
},
{
"fixed": "6.12.109"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.13.0"
},
{
"fixed": "6.18.50"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.19.0"
},
{
"fixed": "7.2.4"
}
]
}
],
"package": {
"name": "Kernel",
"ecosystem": "Linux"
},
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-89686.json"
}
}
],
"modified": "2026-11-01T02:30:29.096869557Z",
"provider": "osv",
"references": [
"https://git.kernel.org/stable/c/607a56fea772c1f4f4989d8e255dd4f7192d9604",
"https://git.kernel.org/stable/c/97bda8b4284d90897a1f1922e5082ff9e35d7c7e",
"https://git.kernel.org/stable/c/c517f27498757e616d2a8fe6d16caad1fee422e6",
"https://git.kernel.org/stable/c/ca94ba36172046be6a694a7986f6931e47ed4d51",
"https://git.kernel.org/stable/c/d12af460df27876661707efab3a8532146cb961f",
"https://git.kernel.org/stable/c/f5011c26246d1abed3dc750c9744e33cb79ff9bc",
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/89xxx/CVE-2026-89686.json",
"https://nvd.nist.gov/vuln/detail/CVE-2026-89686",
"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git"
],
"provider_metadata": {
"cna_assigner": "Linux",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/89xxx/CVE-2026-89686.json"
}
},
"related_cves": [
{
"value": "CVE-2026-89686",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 521350,
"published_at": "2026-09-11T19:46:07.877+00:00"
}