{"id":"CVE-2022-50241","state":"PUBLISHED","title":"NFSD: fix use-after-free on source server when doing inter-server copy","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nNFSD: fix use-after-free on source server when doing inter-server copy\n\nUse-after-free occurred when the laundromat tried to free expired\ncpntf_state entry on the s2s_cp_stateids list after inter-server\ncopy completed. The sc_cp_list that the expired copy state was\ninserted on was already freed.\n\nWhen COPY completes, the Linux client normally sends LOCKU(lock_state x),\nFREE_STATEID(lock_state x) and CLOSE(open_state y) to the source server.\nThe nfs4_put_stid call from nfsd4_free_stateid cleans up the copy state\nfrom the s2s_cp_stateids list before freeing the lock state's stid.\n\nHowever, sometimes the CLOSE was sent before the FREE_STATEID request.\nWhen this happens, the nfsd4_close_open_stateid call from nfsd4_close\nfrees all lock states on its st_locks list without cleaning up the copy\nstate on the sc_cp_list list. When the time the FREE_STATEID arrives the\nserver returns BAD_STATEID since the lock state was freed. This causes\nthe use-after-free error to occur when the laundromat tries to free\nthe expired cpntf_state.\n\nThis patch adds a call to nfs4_free_cpntf_statelist in\nnfsd4_close_open_stateid to clean up the copy state before calling\nfree_ol_stateid_reaplist to free the lock state's stid on the reaplist.","publishedAt":"2025-09-15T14:01:47.539Z","updatedAt":"2026-10-15T21:31:19.268Z","severity":{"score":8.8,"label":"High","version":"3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","source":"Linux"},"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"624322f1adc58acd0b69f77a6ddc764207e97241","status":"affected","lessThan":"bbacfcde5fff25ac22597e8373a065c647da6738","versionType":"git"},{"version":"624322f1adc58acd0b69f77a6ddc764207e97241","status":"affected","lessThan":"83b94969751a691347606dbe6b1865efcfa5a643","versionType":"git"},{"version":"624322f1adc58acd0b69f77a6ddc764207e97241","status":"affected","lessThan":"6ea71246b7a02af675d733e72d14bd0d591d5f4a","versionType":"git"},{"version":"624322f1adc58acd0b69f77a6ddc764207e97241","status":"affected","lessThan":"35aa0fb8c3033a3d78603356e96fc18c5b9cceb2","versionType":"git"},{"version":"624322f1adc58acd0b69f77a6ddc764207e97241","status":"affected","lessThan":"019805fea91599b22dfa62ffb29c022f35abeb06","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["fs/nfsd/nfs4state.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"5.6","status":"affected"},{"version":"0","status":"unaffected","lessThan":"5.6","versionType":"semver"},{"version":"5.10.150","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.75","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"5.19.17","status":"unaffected","lessThanOrEqual":"5.19.*","versionType":"semver"},{"version":"6.0.3","status":"unaffected","lessThanOrEqual":"6.0.*","versionType":"semver"},{"version":"6.1","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["fs/nfsd/nfs4state.c"]}],"references":["https://git.kernel.org/stable/c/bbacfcde5fff25ac22597e8373a065c647da6738","https://git.kernel.org/stable/c/83b94969751a691347606dbe6b1865efcfa5a643","https://git.kernel.org/stable/c/6ea71246b7a02af675d733e72d14bd0d591d5f4a","https://git.kernel.org/stable/c/35aa0fb8c3033a3d78603356e96fc18c5b9cceb2","https://git.kernel.org/stable/c/019805fea91599b22dfa62ffb29c022f35abeb06"],"weaknesses":[],"ingestedAt":"2026-10-29T20:05:26.763Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2022/50xxx/CVE-2022-50241.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2022-50241","state":"PUBLISHED","datePublished":"2025-09-15T14:01:47.539Z","dateUpdated":"2026-10-15T21:31:19.268Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2025-09-15T13:58:00.971Z"},"containers":{"cna":{"title":"NFSD: fix use-after-free on source server when doing inter-server copy","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nNFSD: fix use-after-free on source server when doing inter-server copy\n\nUse-after-free occurred when the laundromat tried to free expired\ncpntf_state entry on the s2s_cp_stateids list after inter-server\ncopy completed. The sc_cp_list that the expired copy state was\ninserted on was already freed.\n\nWhen COPY completes, the Linux client normally sends LOCKU(lock_state x),\nFREE_STATEID(lock_state x) and CLOSE(open_state y) to the source server.\nThe nfs4_put_stid call from nfsd4_free_stateid cleans up the copy state\nfrom the s2s_cp_stateids list before freeing the lock state's stid.\n\nHowever, sometimes the CLOSE was sent before the FREE_STATEID request.\nWhen this happens, the nfsd4_close_open_stateid call from nfsd4_close\nfrees all lock states on its st_locks list without cleaning up the copy\nstate on the sc_cp_list list. When the time the FREE_STATEID arrives the\nserver returns BAD_STATEID since the lock state was freed. This causes\nthe use-after-free error to occur when the laundromat tries to free\nthe expired cpntf_state.\n\nThis patch adds a call to nfs4_free_cpntf_statelist in\nnfsd4_close_open_stateid to clean up the copy state before calling\nfree_ol_stateid_reaplist to free the lock state's stid on the reaplist."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"624322f1adc58acd0b69f77a6ddc764207e97241","status":"affected","lessThan":"bbacfcde5fff25ac22597e8373a065c647da6738","versionType":"git"},{"version":"624322f1adc58acd0b69f77a6ddc764207e97241","status":"affected","lessThan":"83b94969751a691347606dbe6b1865efcfa5a643","versionType":"git"},{"version":"624322f1adc58acd0b69f77a6ddc764207e97241","status":"affected","lessThan":"6ea71246b7a02af675d733e72d14bd0d591d5f4a","versionType":"git"},{"version":"624322f1adc58acd0b69f77a6ddc764207e97241","status":"affected","lessThan":"35aa0fb8c3033a3d78603356e96fc18c5b9cceb2","versionType":"git"},{"version":"624322f1adc58acd0b69f77a6ddc764207e97241","status":"affected","lessThan":"019805fea91599b22dfa62ffb29c022f35abeb06","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["fs/nfsd/nfs4state.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"5.6","status":"affected"},{"version":"0","status":"unaffected","lessThan":"5.6","versionType":"semver"},{"version":"5.10.150","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.75","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"5.19.17","status":"unaffected","lessThanOrEqual":"5.19.*","versionType":"semver"},{"version":"6.0.3","status":"unaffected","lessThanOrEqual":"6.0.*","versionType":"semver"},{"version":"6.1","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["fs/nfsd/nfs4state.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/bbacfcde5fff25ac22597e8373a065c647da6738"},{"url":"https://git.kernel.org/stable/c/83b94969751a691347606dbe6b1865efcfa5a643"},{"url":"https://git.kernel.org/stable/c/6ea71246b7a02af675d733e72d14bd0d591d5f4a"},{"url":"https://git.kernel.org/stable/c/35aa0fb8c3033a3d78603356e96fc18c5b9cceb2"},{"url":"https://git.kernel.org/stable/c/019805fea91599b22dfa62ffb29c022f35abeb06"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","baseScore":8.8,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:N - The flaw is in the in-kernel NFS server (nfsd); COPY_NOTIFY, CLOSE, and FREE_STATEID are processed from NFSv4.2 compounds over the network (TCP/2049), so a remote NFS client reaches the vulnerable path.\nAC:L - A malicious client fully controls the sequence—OPEN/LOCK, COPY_NOTIFY to attach cpntf_state to sc_cp_list, then CLOSE before FREE_STATEID—so the dangling cpntf entry and subsequent laundromat list_del are deterministic with no race outside attacker control.\nPR:L - The attacker must be an established NFSv4.2 client of an export with a valid open/lock stateid to issue COPY_NOTIFY, which is authenticated low-privilege service access rather than a pre-authentication path.\nUI:N - No victim action is required; the attacking client drives every NFS operation, and the server's own laundromat worker triggers the use-after-free after lease expiry.\nS:U - The use-after-free corrupts kernel slab memory within the host nfsd security authority and does not cross a VM, IOMMU, or sandbox boundary.\nC:H - The dangling cpntf_state remains linked into a freed parent stateid's sc_cp_list; reclaim of that slab object lets an attacker who grooms the heap control freed contents, enabling arbitrary kernel memory disclosure.\nI:H - Laundromat's list_del on the stale cp_list writes heap pointers into the freed, potentially reallocated stateid_slab object—a classic UAF write primitive usable for controlled memory modification and control-flow hijacking.\nA:H - The list corruption reliably causes a kernel oops/BUG/panic in laundromat_main when freeing the expired cpntf_state, fully disrupting availability of the NFS server host."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-08-05T08:57:53.698Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"5.10.150"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"5.15.75"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"5.19.17"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"6.0.3"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"6.1"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"title":"CISA ADP Vulnrichment","metrics":[{"other":{"type":"ssvc","content":{"id":"CVE-2022-50241","role":"CISA Coordinator","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"total"}],"version":"2.0.3","timestamp":"2026-10-15T21:30:36.338429Z"}}}],"providerMetadata":{"shortName":"CISA-ADP","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","dateUpdated":"2026-10-15T21:31:19.268Z"}}]}}}