nfs: fix UAF in direct writes
In the Linux kernel, the following vulnerability has been resolved: nfs: fix UAF in direct writes In production we have been hitting the following warning consistently ------------[ cut here ]------------ refcount_t: underflow; use-after-free. WARNING: CPU: 17 PID: 1800359 at lib/refcount.c:28 refcount_warn_saturate+0x9c/0xe0 Workqueue: nfsiod nfs_direct_write_schedule_work [nfs] RIP: 0010:refcount_warn_saturate+0x9c/0xe0 PKRU: 55555554 Call Trace: ? __warn+0x9f/0x130 ? refcount_warn_saturate+0x9c/0xe0 ? report_bug+0xcc/0x150 ? handle_bug+0x3d/0x70 ? exc_invalid_op+0x16/0x40 ? asm_exc_invalid_op+0x16/0x20 ? refcount_warn_saturate+0x9c/0xe0 nfs_direct_write_schedule_work+0x237/0x250 [nfs] process_one_work+0x12f/0x4a0 worker_thread+0x14e/0x3b0 ? ZSTD_getCParams_internal+0x220/0x220 kthread+0xdc/0x120 ? __btf_name_valid+0xa0/0xa0 ret_from_fork+0x1f/0x30 This is because we're completing the nfs_direct_request twice in a row. The source of this is when we have our commit requests to submit, we process them and send them off, and then in the completion path for the commit requests we have if (nfs_commit_end(cinfo.mds)) nfs_direct_write_complete(dreq); However since we're submitting asynchronous requests we sometimes have one that completes before we submit the next one, so we end up calling complete on the nfs_direct_request twice. The only other place we use nfs_generic_commit_list() is in __nfs_commit_inode, which wraps this call in a nfs_commit_begin(); nfs_commit_end(); Which i
CVE-2024-26958
Primary source · Revision 1
Imported from structured advisory data. Source references identify upstream records or fields; verify affected versions and your deployed configuration.
Security context
Source reference: cve:CVE-2024-26958
Linux
Source reference: /containers/cna/affected/0/product
- Affected versions
- Not stated in this record
- Fixed versions
- Not stated in this record
- Prerequisites
- Not stated in this record
Linux
Source reference: /containers/cna/affected/1/product
- Affected versions
- Not stated in this record
- Fixed versions
- Not stated in this record
- Prerequisites
- Not stated in this record
Structured affected-version data
Original package identities and version rules from this source.
[
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "af7cf057933f01dc7f33ddfb5e436ad598ed17ad",
"lessThan": "6cd3f13aaa62970b5169d990e936b2e96943bc6a",
"versionType": "git"
},
{
"status": "affected",
"version": "af7cf057933f01dc7f33ddfb5e436ad598ed17ad",
"lessThan": "4595d90b5d2ea5fa4d318d13f59055aa4bf3e7f5",
"versionType": "git"
},
{
"status": "affected",
"version": "af7cf057933f01dc7f33ddfb5e436ad598ed17ad",
"lessThan": "80d24b308b7ee7037fc90d8ac99f6f78df0a256f",
"versionType": "git"
},
{
"status": "affected",
"version": "af7cf057933f01dc7f33ddfb5e436ad598ed17ad",
"lessThan": "3abc2d160ed8213948b147295d77d44a22c88fa3",
"versionType": "git"
},
{
"status": "affected",
"version": "af7cf057933f01dc7f33ddfb5e436ad598ed17ad",
"lessThan": "e25447c35f8745337ea8bc0c9697fcac14df8605",
"versionType": "git"
},
{
"status": "affected",
"version": "af7cf057933f01dc7f33ddfb5e436ad598ed17ad",
"lessThan": "1daf52b5ffb24870fbeda20b4967526d8f9e12ab",
"versionType": "git"
},
{
"status": "affected",
"version": "af7cf057933f01dc7f33ddfb5e436ad598ed17ad",
"lessThan": "cf54f66e1dd78990ec6b32177bca7e6ea2144a95",
"versionType": "git"
},
{
"status": "affected",
"version": "af7cf057933f01dc7f33ddfb5e436ad598ed17ad",
"lessThan": "17f46b803d4f23c66cacce81db35fef3adb8f2af",
"versionType": "git"
}
],
"programFiles": [
"fs/nfs/direct.c",
"fs/nfs/write.c",
"include/linux/nfs_fs.h"
],
"defaultStatus": "unaffected"
},
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "4.5"
},
{
"status": "unaffected",
"version": "0",
"lessThan": "4.5",
"versionType": "semver"
},
{
"status": "unaffected",
"version": "5.4.297",
"versionType": "semver",
"lessThanOrEqual": "5.4.*"
},
{
"status": "unaffected",
"version": "5.10.215",
"versionType": "semver",
"lessThanOrEqual": "5.10.*"
},
{
"status": "unaffected",
"version": "5.15.154",
"versionType": "semver",
"lessThanOrEqual": "5.15.*"
},
{
"status": "unaffected",
"version": "6.1.84",
"versionType": "semver",
"lessThanOrEqual": "6.1.*"
},
{
"status": "unaffected",
"version": "6.6.24",
"versionType": "semver",
"lessThanOrEqual": "6.6.*"
},
{
"status": "unaffected",
"version": "6.7.12",
"versionType": "semver",
"lessThanOrEqual": "6.7.*"
},
{
"status": "unaffected",
"version": "6.8.3",
"versionType": "semver",
"lessThanOrEqual": "6.8.*"
},
{
"status": "unaffected",
"version": "6.9",
"versionType": "original_commit_for_fix",
"lessThanOrEqual": "*"
}
],
"programFiles": [
"fs/nfs/direct.c",
"fs/nfs/write.c",
"include/linux/nfs_fs.h"
],
"defaultStatus": "affected"
}
]- Related CVEs
- CVE-2024-26958
Source reference:
/cveMetadata/cveId
Publisher severity
high
Source reference: /containers/cna/metrics
- Event
- #26467 · Revision 1
- Added to Heist Feed
- Publisher date