CVE-2023-52909CWE-476

CVE-2023-52909

High · published August 21, 2024

CVSS v3.1
7.5
EPSS
1%
Percentile
50.2
In the wild
Unconfirmed
What it is

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

nfsd: fix handling of cached open files in nfsd4_open codepath

Commit fb70bf124b05 ("NFSD: Instantiate a struct file when creating a

regular NFSv4 file") added the ability to cache an open fd over a

compound. There are a couple of problems with the way this currently

works:

It's racy, as a newly-created nfsd_file can end up with its PENDING bit

cleared while the nf is hashed, and the nf_file pointer is still zeroed

out. Other tasks can find it in this state and they expect to see a

valid nf_file, and can oops if nf_file is NULL.

Also, there is no guarantee that we'll end up creating a new nfsd_file

if one is already in the hash. If an extant entry is in the hash with a

valid nf_file, nfs4_get_vfs_file will clobber its nf_file pointer with

the value of op_file and the old nf_file will leak.

Fix both issues by making a new nfsd_file_acquirei_opened variant that

takes an optional file pointer. If one is present when this is called,

we'll take a new reference to it instead of trying to open the file. If

the nfsd_file already has a valid nf_file, we'll just ignore the

optional file and pass the nfsd_file back as-is.

Also rework the tracepoints a bit to allow for an "opened" variant and

don't try to avoid counting acquisitions in the case where we already

have a cached open file.

The record
Technical detail
CVSS v3.1
7.5 · HIGH
Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
CVSS v4.0
Not supplied
EPSS
0.00643 · 50.2th percentile
Weakness
CWE-476 · NULL Pointer Dereference
Published
2024-08-21T11:15Z
Affected products (4)
ProductVersionsFixed in
linux/linux_kernel≥ 5.19, < 6.1.76.1.7
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (4)
EPSS history
Timeline
  • 21 AUG 06:10Z
    nfsd: fix handling of cached open files in nfsd4_open codepath
    cvelistv5