In the Linux kernel, the following vulnerability has been resolved:
nfsd: prevent panic for nfsv4.0 closed files in nfs4showopen
Prior to commit 3f29cc82a84c ("nfsd: split scstatus out of sctype") statesshow() relied on sctype field to be of valid type before calling into a subfunction to show content of a particular stateid. From that commit, we split the validity of the stateid into scstatus and no longer changed sctype to 0 while unhashing the stateid. This resulted in kernel oopsing for nfsv4.0 opens that stay around and in nfs4showopen() would derefence sc_file which was NULL.
Instead, for closed open stateids forgo displaying information that relies of having a valid sc_file.
To reproduce: mount the server with 4.0, read and close a file and then on the server cat /proc/fs/nfsd/clients/2/states
[ 513.590804] Call trace: [ 513.590925] rawspinlock+0xcc/0x160 [ 513.591119] nfs4showopen+0x78/0x2c0 [nfsd] [ 513.591412] statesshow+0x44c/0x488 [nfsd] [ 513.591681] seqreaditer+0x5d8/0x760 [ 513.591896] seqread+0x188/0x208 [ 513.592075] vfsread+0x148/0x470 [ 513.592241] ksys_read+0xcc/0x178
[
{
"deprecated": false,
"target": {
"file": "fs/nfsd/nfs4state.c",
"function": "nfs4_show_open"
},
"digest": {
"length": 1049.0,
"function_hash": "98214123756087920494303021508562941364"
},
"id": "CVE-2024-46682-15bd60bb",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@ba0b697de298285301c71c258598226e06494236",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "fs/nfsd/nfs4state.c",
"function": "nfs4_show_open"
},
"digest": {
"length": 1049.0,
"function_hash": "98214123756087920494303021508562941364"
},
"id": "CVE-2024-46682-5d4f8765",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@a204501e1743d695ca2930ed25a2be9f8ced96d3",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "fs/nfsd/nfs4state.c"
},
"digest": {
"threshold": 0.9,
"line_hashes": [
"28960750494253016270364298968189389206",
"94911075558698856298592125359090027712",
"131452135854860570004712879194681164555",
"171966675258927717056678350595483192111",
"34434693454573427042525573200005772428",
"139850013673532714114545341380693045952",
"230248917975456552120877456903649021323",
"22949530615946740376097708232331737403",
"259981438709234202883244527069927044260",
"133993634174965799004113992994010190457",
"182045780439096178121559423485186894349",
"195517655993078914340291909734065713770"
]
},
"id": "CVE-2024-46682-5dc59f62",
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@ba0b697de298285301c71c258598226e06494236",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "fs/nfsd/nfs4state.c"
},
"digest": {
"threshold": 0.9,
"line_hashes": [
"28960750494253016270364298968189389206",
"94911075558698856298592125359090027712",
"131452135854860570004712879194681164555",
"171966675258927717056678350595483192111",
"34434693454573427042525573200005772428",
"139850013673532714114545341380693045952",
"230248917975456552120877456903649021323",
"22949530615946740376097708232331737403",
"259981438709234202883244527069927044260",
"133993634174965799004113992994010190457",
"182045780439096178121559423485186894349",
"195517655993078914340291909734065713770"
]
},
"id": "CVE-2024-46682-76a83e59",
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@a204501e1743d695ca2930ed25a2be9f8ced96d3",
"signature_version": "v1"
}
]