In the Linux kernel, the following vulnerability has been resolved:
nfsd: fix RELEASE_LOCKOWNER
The test on so_count in nfsd4_release_lockowner() is nonsense and harmful. Revert to using check_for_locks(), changing that to not sleep.
First: harmful. As is documented in the kdoc comment for nfsd4_release_lockowner(), the test on so_count can transiently return a false positive resulting in a return of NFS4ERR_LOCKS_HELD when in fact no locks are held. This is clearly a protocol violation and with the Linux NFS client it can cause incorrect behaviour.
If RELEASE_LOCKOWNER is sent while some other thread is still processing a LOCK request which failed because, at the time that request was received, the given owner held a conflicting lock, then the nfsd thread processing that LOCK request can hold a reference (conflock) to the lock owner that causes nfsd4_release_lockowner() to return an incorrect error.
The Linux NFS client ignores that NFS4ERR_LOCKS_HELD error because it never sends NFS4_RELEASE_LOCKOWNER without first releasing any locks, so it knows that the error is impossible. It assumes the lock owner was in fact released so it feels free to use the same lock owner identifier in some later locking request.
When it does reuse a lock owner identifier for which a previous RELEASE failed, it will naturally use a lock_seqid of zero. However the server, which didn't release the lock owner, will expect a larger lock_seqid and so will respond with NFS4ERR_BAD_SEQID.
So clearly it is harmful to allow a false positive, which testing so_count allows.
The test is nonsense because ... well... it doesn't mean anything.
so_count is the sum of three different counts. 1/ the set of states listed on so_stateids 2/ the set of active vfs locks owned by any of those states 3/ various transient counts such as for conflicting locks.
When it is tested against '2' it is clear that one of these is the transient reference obtained by find_lockowner_str_locked(). It is not clear what the other one is expected to be.
In practice, the count is often 2 because there is precisely one state on so_stateids. If there were more, this would fail.
In my testing I see two circumstances when RELEASE_LOCKOWNER is called. In one case, CLOSE is called before RELEASE_LOCKOWNER. That results in all the lock states being removed, and so the lockowner being discarded (it is removed when there are no more references which usually happens when the lock state is discarded). When nfsd4_release_lockowner() finds that the lock owner doesn't exist, it returns success.
The other case shows an so_count of '2' and precisely one state listed in so_stateid. It appears that the Linux client uses a separate lock owner for each file resulting in one lock state per lock owner, so this test on '2' is safe. For another client it might not be safe.
So this patch changes check_for_locks() to use the (newish) find_any_file_locked() so that it doesn't take a reference on the nfs4_file and so never calls nfsd_file_put(), and so never sleeps. With this check is it safe to restore the use of check_for_locks() rather than testing so_count against the mysterious '2'.
CVSS Details
- CVSS 3.1 Base Score: 5.5
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Alma_linux | — | Upgrade kernel-64k-debugUpgrade kernel-zfcpdump-modulesUpgrade kernel-rtUpgrade kernel-64k-debug-devel-matchedUpgrade kernel-docUpgrade kernel-rt-modules-coreUpgrade kernel-rt-debugUpgrade rvUpgrade kernel-toolsUpgrade kernel-64k-debug-modulesUpgrade kernel-uki-virtUpgrade kernel-rt-debug-modules-extraUpgrade kernel-64k-debug-modules-coreUpgrade kernel-rt-modulesUpgrade kernel-zfcpdump-devel-matchedUpgrade kernel-develUpgrade perfUpgrade kernel-zfcpdump-coreUpgrade kernel-64k-modules-extraUpgrade kernel-rt-debug-modulesUpgrade kernel-zfcpdumpUpgrade kernel-rt-debug-modules-coreUpgrade bpftoolUpgrade kernel-rt-develUpgrade kernel-tools-libs-develUpgrade kernel-modulesUpgrade kernel-debug-modules-extraUpgrade kernel-64k-debug-develUpgrade kernel-debugUpgrade kernel-debug-uki-virtUpgrade kernel-zfcpdump-modules-coreUpgrade kernel-debug-develUpgrade kernel-64k-coreUpgrade kernel-64k-develUpgrade kernel-modules-coreUpgrade kernel-cross-headersUpgrade kernel-debug-coreUpgrade kernel-tools-libsUpgrade kernel-64k-modules-coreUpgrade kernel-64k-devel-matchedUpgrade kernel-64k-modulesUpgrade kernel-rt-modules-extraUpgrade kernelUpgrade kernel-headersUpgrade kernel-64k-debug-coreUpgrade python3-perfUpgrade kernel-debug-devel-matchedUpgrade kernel-abi-stablelistsUpgrade kernel-64kUpgrade rtlaUpgrade kernel-debug-modules-coreUpgrade kernel-devel-matchedUpgrade kernel-rt-coreUpgrade kernel-debug-modulesUpgrade kernel-rt-debug-coreUpgrade kernel-modules-extraUpgrade kernel-zfcpdump-modules-extraUpgrade libperfUpgrade kernel-zfcpdump-develUpgrade kernel-coreUpgrade kernel-64k-debug-modules-extraUpgrade kernel-rt-debug-devel | Nov 4, 2024 | Mar 13, 2024 |
| Amazon Linux Ami 2 | — | Upgrade kernel-toolsUpgrade bpftoolUpgrade kernel-livepatch-5.10.220-209.867Upgrade perf-debuginfoUpgrade perfUpgrade kernel-tools-debuginfoUpgrade kernel-develUpgrade kernel-tools-develUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-debuginfoUpgrade python-perf-debuginfoUpgrade kernel-headersUpgrade kernel-livepatch-5.15.156-102.160Upgrade python-perfUpgrade kernel-debuginfo-common-x86_64Upgrade bpftool-debuginfoUpgrade kernel | Jul 9, 2024 | Mar 13, 2024 |
| Amazon_linux_2023 | — | Upgrade kernel-modules-extraUpgrade kernel-debuginfo-common-x86_64Upgrade kernelUpgrade kernel-headersUpgrade kernel-libbpfUpgrade python3-perf-debuginfoUpgrade bpftool-debuginfoUpgrade kernel-libbpf-staticUpgrade kernel-tools-debuginfoUpgrade bpftoolUpgrade kernel-libbpf-develUpgrade kernel-debuginfoUpgrade perfUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-livepatch-6.1.79-99.164Upgrade kernel-toolsUpgrade kernel-tools-develUpgrade python3-perfUpgrade kernel-modules-extra-commonUpgrade kernel-develUpgrade perf-debuginfo | Feb 17, 2025 | Mar 13, 2024 |
| Debian | — | Upgrade linux | Jul 17, 2024 | Mar 13, 2024 |
| Huawei Euleros 2_0_sp13 | — | Upgrade python3-perfUpgrade kernelUpgrade kernel-tools-libsUpgrade kernel-toolsUpgrade kernel-abi-stablelistsUpgrade bpftool | Mar 10, 2026 | Mar 10, 2026 |
| Oracle_linux | — | Upgrade kernel | Oct 16, 2024 | Mar 13, 2024 |
| Redhat_linux | — | Upgrade kernel-rtNo solution existsUpgrade kernel | Dec 5, 2024 | Mar 13, 2024 |
| Rocky_linux | — | Upgrade kernel-modulesUpgrade kernel-modules-coreUpgrade kernel-debug-modules-extraUpgrade kernel-zfcpdumpUpgrade kernel-rtUpgrade kernel-rt-debug-modules-coreUpgrade kernel-coreUpgrade kernel-zfcpdump-coreUpgrade kernel-uki-virtUpgrade kernel-zfcpdump-modulesUpgrade kernel-zfcpdump-modules-extraUpgrade libperfUpgrade kernel-debugUpgrade rvUpgrade kernel-zfcpdump-develUpgrade bpftool-debuginfoUpgrade kernel-debug-uki-virtUpgrade kernel-headersUpgrade kernel-rt-debug-modulesUpgrade kernel-rt-debug-modules-extraUpgrade perfUpgrade kernel-rt-debug-develUpgrade kernel-rt-modules-coreUpgrade kernel-debug-develUpgrade kernel-debug-devel-matchedUpgrade perf-debuginfoUpgrade kernel-tools-debuginfoUpgrade kernel-develUpgrade kernel-modules-extraUpgrade kernel-rt-modulesUpgrade kernel-rt-debug-kvmUpgrade kernel-debug-debuginfoUpgrade kernel-debug-coreUpgrade kernel-rt-debuginfoUpgrade kernel-toolsUpgrade kernel-devel-matchedUpgrade kernel-tools-libsUpgrade rtlaUpgrade kernel-tools-libs-develUpgrade kernel-rt-debug-debuginfoUpgrade kernel-rt-debug-coreUpgrade bpftoolUpgrade kernel-rt-kvmUpgrade kernel-cross-headersUpgrade kernel-debug-modules-coreUpgrade kernel-rt-develUpgrade kernel-rt-debugUpgrade python3-perfUpgrade kernelUpgrade kernel-rt-coreUpgrade kernel-rt-modules-extraUpgrade python3-perf-debuginfoUpgrade libperf-debuginfoUpgrade kernel-debuginfoUpgrade kernel-zfcpdump-devel-matchedUpgrade kernel-zfcpdump-modules-coreUpgrade kernel-debug-modulesUpgrade kernel-zfcpdump-debuginfo | Sep 17, 2024 | Mar 13, 2024 |
| Suse | — | Upgrade kernel-kvmsmall-develUpgrade kernel-rt-develUpgrade dlm-kmp-azureUpgrade kernel-defaultUpgrade dtb-renesasUpgrade kernel-devel-azureUpgrade kernel-kvmsmallUpgrade ocfs2-kmp-azureUpgrade kernel-64kb-optionalUpgrade kernel-symsUpgrade kselftests-kmp-defaultUpgrade gfs2-kmp-64kbUpgrade kernel-64kb-develUpgrade kernel-debugUpgrade kernel-develUpgrade ocfs2-kmp-rtUpgrade cluster-md-kmp-rtUpgrade reiserfs-kmp-rtUpgrade dtb-apmUpgrade kernel-rt-livepatchUpgrade kernel-syms-rtUpgrade dtb-mediatekUpgrade dtb-xilinxUpgrade reiserfs-kmp-defaultUpgrade dtb-armUpgrade kernel-obs-qaUpgrade kernel-default-baseUpgrade kernel-devel-rtUpgrade kernel-rt_debug-vdsoUpgrade kernel-default-optionalUpgrade kernel-default-extraUpgrade dtb-amlogicUpgrade kernel-64kb-livepatch-develUpgrade kernel-docsUpgrade kernel-syms-azureUpgrade kernel-debug-livepatch-develUpgrade dtb-rockchipUpgrade kernel-default-base-rebuildUpgrade gfs2-kmp-rtUpgrade reiserfs-kmp-azureUpgrade dtb-qcomUpgrade kernel-azure-livepatch-develUpgrade kernel-macrosUpgrade dtb-hisiliconUpgrade kselftests-kmp-rtUpgrade dtb-nvidiaUpgrade dlm-kmp-defaultUpgrade kernel-debug-develUpgrade kernel-azure-extraUpgrade kernel-rt-livepatch-develUpgrade ocfs2-kmp-64kbUpgrade gfs2-kmp-defaultUpgrade kernel-debug-vdsoUpgrade dtb-allwinnerUpgrade cluster-md-kmp-azureUpgrade dtb-sprdUpgrade dtb-amdUpgrade kernel-rt-optionalUpgrade kernel-default-livepatch-develUpgrade gfs2-kmp-azureUpgrade dtb-marvellUpgrade kernel-azureUpgrade kernel-source-rtUpgrade kernel-rt_debugUpgrade kernel-rt-vdsoUpgrade kernel-obs-buildUpgrade kernel-docs-htmlUpgrade dtb-caviumUpgrade dtb-appleUpgrade dtb-amazonUpgrade dlm-kmp-rtUpgrade ocfs2-kmp-defaultUpgrade kselftests-kmp-64kbUpgrade kernel-rt_debug-livepatch-develUpgrade dtb-freescaleUpgrade kselftests-kmp-azureUpgrade kernel-rt-extraUpgrade kernel-kvmsmall-vdsoUpgrade kernel-default-livepatchUpgrade kernel-azure-vdsoUpgrade kernel-azure-develUpgrade dtb-lgUpgrade cluster-md-kmp-64kbUpgrade kernel-64kbUpgrade kernel-default-develUpgrade dtb-socionextUpgrade dtb-exynosUpgrade dtb-broadcomUpgrade kernel-rtUpgrade kernel-kvmsmall-livepatch-develUpgrade kernel-default-vdsoUpgrade dlm-kmp-64kbUpgrade kernel-64kb-extraUpgrade kernel-rt_debug-develUpgrade kernel-azure-optionalUpgrade dtb-alteraUpgrade reiserfs-kmp-64kbUpgrade kernel-source-vanillaUpgrade kernel-source-azureUpgrade kernel-source | Apr 18, 2024 | Mar 13, 2024 |
| Ubuntu | — | Upgrade linux-image-5.15.0-1065-awsUpgrade linux-image-6.5.0-1022-gcpUpgrade linux-image-6.5.0-1018-raspiUpgrade linux-image-6.5.0-41-generic-64kUpgrade linux-image-5.15.0-1064-gcpUpgrade linux-image-nvidia-64k-6.5Upgrade linux-image-5.15.0-1068-azure-fdeUpgrade linux-image-generic-hwe-20.04Upgrade linux-image-oem-22.04cUpgrade linux-image-gkeop-5.15Upgrade linux-image-5.15.0-1062-kvmUpgrade linux-image-generic-hwe-22.04Upgrade linux-image-oracle-64kUpgrade linux-image-generic-64k-hwe-22.04Upgrade linux-image-kvmUpgrade linux-image-5.15.0-1058-ibmUpgrade linux-image-oem-20.04dUpgrade linux-image-laptop-23.10Upgrade linux-image-raspiUpgrade linux-image-6.5.0-1024-oemUpgrade linux-image-5.15.0-116-genericUpgrade linux-image-5.15.0-1035-xilinx-zynqmpUpgrade linux-image-gcpUpgrade linux-image-5.15.0-1060-nvidiaUpgrade linux-image-azure-cvmUpgrade linux-image-5.15.0-1060-nvidia-lowlatencyUpgrade linux-image-virtual-hwe-20.04Upgrade linux-image-6.5.0-41-genericUpgrade linux-image-oem-20.04cUpgrade linux-image-virtual-hwe-22.04Upgrade linux-image-5.15.0-1060-intel-iotgUpgrade linux-image-5.15.0-116-generic-64kUpgrade linux-image-aws-lts-22.04Upgrade linux-image-5.15.0-1048-gkeopUpgrade linux-image-azure-fdeUpgrade linux-image-oem-22.04bUpgrade linux-image-nvidia-hwe-22.04Upgrade linux-image-awsUpgrade linux-image-azure-fde-lts-22.04Upgrade linux-image-nvidia-6.5Upgrade linux-image-5.15.0-1065-gcpUpgrade linux-image-oem-22.04dUpgrade linux-image-6.5.0-1022-azureUpgrade linux-image-azureUpgrade linux-image-starfiveUpgrade linux-image-generic-lpae-hwe-20.04Upgrade linux-image-lowlatency-64k-hwe-22.04Upgrade linux-image-intel-iotgUpgrade linux-image-oracle-lts-22.04Upgrade linux-image-5.15.0-116-lowlatencyUpgrade linux-image-xilinx-zynqmpUpgrade linux-image-lowlatencyUpgrade linux-image-lowlatency-hwe-22.04Upgrade linux-image-nvidiaUpgrade linux-image-5.15.0-1063-oracleUpgrade linux-image-azure-lts-22.04Upgrade linux-image-gcp-lts-22.04Upgrade linux-image-nvidia-64k-hwe-22.04Upgrade linux-image-oem-20.04Upgrade linux-image-6.5.0-1021-nvidia-64kUpgrade linux-image-6.5.0-1015-starfiveUpgrade linux-image-genericUpgrade linux-image-raspi-nolpaeUpgrade linux-image-6.5.0-1017-laptopUpgrade linux-image-lowlatency-hwe-20.04Upgrade linux-image-generic-64kUpgrade linux-image-5.15.0-1062-gkeUpgrade linux-image-oem-20.04bUpgrade linux-image-generic-lpaeUpgrade linux-image-nvidia-lowlatencyUpgrade linux-image-oem-22.04aUpgrade linux-image-virtualUpgrade linux-image-gkeopUpgrade linux-image-5.15.0-1068-azureUpgrade linux-image-5.15.0-116-lowlatency-64kUpgrade linux-image-6.5.0-1024-oracle-64kUpgrade linux-image-6.5.0-41-lowlatencyUpgrade linux-image-6.5.0-1024-oracleUpgrade linux-image-6.5.0-1021-awsUpgrade linux-image-gkeUpgrade linux-image-oem-22.04Upgrade linux-image-6.5.0-41-lowlatency-64kUpgrade linux-image-ibmUpgrade linux-image-generic-64k-hwe-20.04Upgrade linux-image-lowlatency-64kUpgrade linux-image-6.5.0-1022-azure-fdeUpgrade linux-image-intelUpgrade linux-image-gke-5.15Upgrade linux-image-5.15.0-1058-raspiUpgrade linux-image-oracleUpgrade linux-image-5.15.0-116-generic-lpaeUpgrade linux-image-6.5.0-1021-nvidiaUpgrade linux-image-lowlatency-64k-hwe-20.04 | May 17, 2024 | Mar 13, 2024 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Oct 14, 2025 | Mar 13, 2024 |
Prioritise with Active Threat Intelligence
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub