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 libperfUpgrade kernel-debug-uki-virtUpgrade kernel-rt-modules-extraUpgrade kernel-rt-debug-coreUpgrade kernel-64k-debug-modules-extraUpgrade kernel-64k-devel-matchedUpgrade kernel-modules-extraUpgrade kernel-headersUpgrade kernel-debug-modules-coreUpgrade kernel-rt-debug-develUpgrade kernel-zfcpdump-develUpgrade kernel-debug-modulesUpgrade kernel-coreUpgrade kernel-64k-debug-coreUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-64k-develUpgrade kernel-zfcpdump-modules-coreUpgrade kernel-64k-modulesUpgrade kernel-cross-headersUpgrade kernel-debug-develUpgrade kernel-modules-coreUpgrade kernel-debugUpgrade kernel-64k-coreUpgrade rtlaUpgrade kernel-64kUpgrade kernel-tools-libsUpgrade kernel-devel-matchedUpgrade kernel-rt-coreUpgrade kernel-debug-coreUpgrade kernel-64k-modules-coreUpgrade kernel-abi-stablelistsUpgrade kernel-debug-devel-matchedUpgrade kernelUpgrade python3-perfUpgrade kernel-rt-debug-modules-extraUpgrade kernel-rt-debugUpgrade kernel-zfcpdump-modulesUpgrade kernel-rt-debug-modules-coreUpgrade kernel-64k-debug-develUpgrade kernel-toolsUpgrade kernel-zfcpdump-devel-matchedUpgrade kernel-tools-libs-develUpgrade kernel-64k-debug-devel-matchedUpgrade kernel-develUpgrade kernel-64k-debug-modulesUpgrade perfUpgrade bpftoolUpgrade kernel-64k-modules-extraUpgrade kernel-zfcpdumpUpgrade kernel-64k-debugUpgrade kernel-rt-modules-coreUpgrade kernel-rtUpgrade kernel-docUpgrade kernel-rt-debug-modulesUpgrade kernel-modulesUpgrade kernel-debug-modules-extraUpgrade kernel-uki-virtUpgrade kernel-zfcpdump-coreUpgrade kernel-rt-modulesUpgrade kernel-64k-debug-modules-coreUpgrade kernel-rt-develUpgrade rv | Nov 4, 2024 | Mar 13, 2024 |
| Amazon Linux Ami 2 | — | Upgrade kernel-debuginfo-common-x86_64Upgrade bpftool-debuginfoUpgrade kernel-headersUpgrade python-perfUpgrade python-perf-debuginfoUpgrade kernelUpgrade kernel-livepatch-5.15.156-102.160Upgrade kernel-tools-develUpgrade kernel-toolsUpgrade kernel-livepatch-5.10.220-209.867Upgrade perfUpgrade kernel-tools-debuginfoUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-develUpgrade kernel-debuginfoUpgrade bpftoolUpgrade perf-debuginfo | Jul 9, 2024 | Mar 13, 2024 |
| Amazon_linux_2023 | — | Upgrade kernel-tools-debuginfoUpgrade python3-perf-debuginfoUpgrade kernel-modules-extraUpgrade kernelUpgrade kernel-headersUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-libbpfUpgrade bpftoolUpgrade kernel-libbpf-staticUpgrade kernel-libbpf-develUpgrade bpftool-debuginfoUpgrade python3-perfUpgrade kernel-toolsUpgrade perf-debuginfoUpgrade kernel-tools-develUpgrade kernel-livepatch-6.1.79-99.164Upgrade kernel-debuginfoUpgrade perfUpgrade kernel-modules-extra-commonUpgrade kernel-develUpgrade kernel-debuginfo-common-aarch64 | Feb 17, 2025 | Mar 13, 2024 |
| Debian | — | Upgrade linux | Jul 17, 2024 | Mar 13, 2024 |
| Huawei Euleros 2_0_sp13 | — | Upgrade kernelUpgrade kernel-tools-libsUpgrade python3-perfUpgrade bpftoolUpgrade kernel-toolsUpgrade kernel-abi-stablelists | 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-zfcpdump-modules-coreUpgrade libperf-debuginfoUpgrade python3-perf-debuginfoUpgrade kernel-cross-headersUpgrade kernel-debug-modulesUpgrade kernel-tools-libs-develUpgrade kernel-tools-libsUpgrade python3-perfUpgrade kernel-debuginfoUpgrade rtlaUpgrade bpftoolUpgrade kernel-debug-modules-coreUpgrade kernel-rt-debug-coreUpgrade kernel-rt-debug-debuginfoUpgrade kernel-zfcpdump-devel-matchedUpgrade kernel-rt-modules-extraUpgrade kernel-rt-coreUpgrade kernelUpgrade kernel-zfcpdump-debuginfoUpgrade kernel-rt-kvmUpgrade kernel-rt-debugUpgrade kernel-rt-develUpgrade kernel-rt-debug-modules-extraUpgrade kernel-rt-debug-kvmUpgrade kernel-modules-extraUpgrade kernel-modules-coreUpgrade perfUpgrade kernel-debug-devel-matchedUpgrade kernel-rt-modulesUpgrade kernel-debug-debuginfoUpgrade kernel-develUpgrade kernel-toolsUpgrade kernel-rt-debug-modules-coreUpgrade kernel-debug-develUpgrade kernel-rt-debug-develUpgrade kernel-debug-uki-virtUpgrade kernel-rt-debug-modulesUpgrade kernel-rt-modules-coreUpgrade kernel-headersUpgrade kernel-debugUpgrade bpftool-debuginfoUpgrade kernel-devel-matchedUpgrade perf-debuginfoUpgrade kernel-rt-debuginfoUpgrade kernel-tools-debuginfoUpgrade rvUpgrade libperfUpgrade kernel-zfcpdump-modules-extraUpgrade kernel-zfcpdump-modulesUpgrade kernel-uki-virtUpgrade kernel-coreUpgrade kernel-rtUpgrade kernel-modulesUpgrade kernel-debug-modules-extraUpgrade kernel-zfcpdump-develUpgrade kernel-zfcpdump-coreUpgrade kernel-zfcpdumpUpgrade kernel-debug-core | Sep 17, 2024 | Mar 13, 2024 |
| Suse | — | Upgrade kernel-devel-rtUpgrade kernel-default-optionalUpgrade kernel-docsUpgrade dtb-armUpgrade kernel-default-baseUpgrade kernel-default-extraUpgrade kernel-syms-rtUpgrade ocfs2-kmp-rtUpgrade kernel-64kb-develUpgrade gfs2-kmp-64kbUpgrade kselftests-kmp-defaultUpgrade kernel-kvmsmall-develUpgrade dtb-qcomUpgrade kselftests-kmp-rtUpgrade kernel-azure-livepatch-develUpgrade kernel-debugUpgrade dtb-nvidiaUpgrade dtb-rockchipUpgrade dlm-kmp-defaultUpgrade reiserfs-kmp-azureUpgrade dlm-kmp-azureUpgrade dtb-xilinxUpgrade dtb-hisiliconUpgrade kernel-symsUpgrade kernel-default-base-rebuildUpgrade kernel-defaultUpgrade kernel-rt-develUpgrade kernel-macrosUpgrade kernel-64kb-optionalUpgrade kernel-debug-develUpgrade cluster-md-kmp-rtUpgrade gfs2-kmp-rtUpgrade kernel-kvmsmallUpgrade kernel-devel-azureUpgrade kernel-develUpgrade dtb-apmUpgrade kernel-zfcpdumpUpgrade cluster-md-kmp-defaultUpgrade kernel-rt_debug-vdsoUpgrade dtb-renesasUpgrade dtb-mediatekUpgrade kernel-syms-azureUpgrade kernel-debug-livepatch-develUpgrade ocfs2-kmp-azureUpgrade dtb-amlogicUpgrade kernel-64kb-livepatch-develUpgrade reiserfs-kmp-defaultUpgrade kernel-obs-qaUpgrade dlm-kmp-rtUpgrade kernel-azure-develUpgrade dtb-lgUpgrade kernel-rt_debug-livepatch-develUpgrade dtb-sprdUpgrade dtb-amdUpgrade gfs2-kmp-defaultUpgrade kernel-default-livepatchUpgrade kernel-azure-vdsoUpgrade dtb-freescaleUpgrade kernel-source-rtUpgrade dtb-amazonUpgrade kernel-source-vanillaUpgrade kernel-azure-extraUpgrade kernel-64kbUpgrade kernel-rt-optionalUpgrade kernel-default-livepatch-develUpgrade dtb-marvellUpgrade ocfs2-kmp-64kbUpgrade kernel-rt-livepatch-develUpgrade gfs2-kmp-azureUpgrade kernel-docs-htmlUpgrade kernel-source-azureUpgrade kernel-sourceUpgrade kernel-64kb-extraUpgrade dtb-alteraUpgrade reiserfs-kmp-64kbUpgrade kernel-azure-optionalUpgrade kernel-obs-buildUpgrade kernel-azureUpgrade dtb-caviumUpgrade kernel-rt-vdsoUpgrade dtb-appleUpgrade ocfs2-kmp-defaultUpgrade kselftests-kmp-64kbUpgrade kernel-rt_debug-develUpgrade kernel-debug-vdsoUpgrade dtb-allwinnerUpgrade cluster-md-kmp-azureUpgrade kernel-kvmsmall-livepatch-develUpgrade dtb-socionextUpgrade dtb-exynosUpgrade dlm-kmp-64kbUpgrade kernel-default-vdsoUpgrade kernel-default-develUpgrade kernel-rtUpgrade dtb-broadcomUpgrade kernel-rt_debugUpgrade kernel-kvmsmall-vdsoUpgrade cluster-md-kmp-64kbUpgrade kselftests-kmp-azureUpgrade kernel-rt-extra | Apr 18, 2024 | Mar 13, 2024 |
| Ubuntu | — | Upgrade linux-image-azure-cvmUpgrade linux-image-6.5.0-41-genericUpgrade linux-image-5.15.0-1068-azure-fdeUpgrade linux-image-intel-iotgUpgrade linux-image-5.15.0-1064-gcpUpgrade linux-image-nvidia-hwe-22.04Upgrade linux-image-oem-20.04dUpgrade linux-image-5.15.0-1065-gcpUpgrade linux-image-6.5.0-1022-azureUpgrade linux-image-nvidia-6.5Upgrade linux-image-5.15.0-116-generic-64kUpgrade linux-image-5.15.0-1060-intel-iotgUpgrade linux-image-oem-22.04bUpgrade linux-image-kvmUpgrade linux-image-5.15.0-1060-nvidia-lowlatencyUpgrade linux-image-azure-fdeUpgrade linux-image-azureUpgrade linux-image-oracle-lts-22.04Upgrade linux-image-5.15.0-116-genericUpgrade linux-image-laptop-23.10Upgrade linux-image-generic-hwe-22.04Upgrade linux-image-generic-64k-hwe-22.04Upgrade linux-image-gcpUpgrade linux-image-6.5.0-41-generic-64kUpgrade linux-image-oem-20.04cUpgrade linux-image-5.15.0-116-lowlatencyUpgrade linux-image-gkeop-5.15Upgrade linux-image-virtual-hwe-20.04Upgrade linux-image-6.5.0-1018-raspiUpgrade linux-image-lowlatency-64k-hwe-22.04Upgrade linux-image-azure-fde-lts-22.04Upgrade linux-image-generic-hwe-20.04Upgrade linux-image-oem-22.04cUpgrade linux-image-5.15.0-1062-kvmUpgrade linux-image-aws-lts-22.04Upgrade linux-image-5.15.0-1058-ibmUpgrade linux-image-oem-22.04dUpgrade linux-image-5.15.0-1060-nvidiaUpgrade linux-image-raspiUpgrade linux-image-6.5.0-1022-gcpUpgrade linux-image-nvidia-64k-6.5Upgrade linux-image-virtual-hwe-22.04Upgrade linux-image-oracle-64kUpgrade linux-image-awsUpgrade linux-image-5.15.0-1048-gkeopUpgrade linux-image-starfiveUpgrade linux-image-generic-lpae-hwe-20.04Upgrade linux-image-5.15.0-1035-xilinx-zynqmpUpgrade linux-image-6.5.0-1024-oemUpgrade linux-image-5.15.0-1065-awsUpgrade linux-image-nvidiaUpgrade linux-image-6.5.0-1021-awsUpgrade linux-image-gcp-lts-22.04Upgrade linux-image-oracleUpgrade linux-image-6.5.0-1021-nvidiaUpgrade linux-image-gke-5.15Upgrade linux-image-5.15.0-1068-azureUpgrade linux-image-oem-22.04aUpgrade linux-image-5.15.0-116-lowlatency-64kUpgrade linux-image-6.5.0-1015-starfiveUpgrade linux-image-generic-64kUpgrade linux-image-oem-20.04bUpgrade linux-image-lowlatency-64kUpgrade linux-image-lowlatency-hwe-20.04Upgrade linux-image-6.5.0-1024-oracleUpgrade linux-image-gkeUpgrade linux-image-xilinx-zynqmpUpgrade linux-image-6.5.0-1024-oracle-64kUpgrade linux-image-lowlatency-hwe-22.04Upgrade linux-image-nvidia-lowlatencyUpgrade linux-image-raspi-nolpaeUpgrade linux-image-lowlatencyUpgrade linux-image-oem-20.04Upgrade linux-image-gkeopUpgrade linux-image-intelUpgrade linux-image-5.15.0-1062-gkeUpgrade linux-image-azure-lts-22.04Upgrade linux-image-nvidia-64k-hwe-22.04Upgrade linux-image-6.5.0-1021-nvidia-64kUpgrade linux-image-5.15.0-1058-raspiUpgrade linux-image-6.5.0-41-lowlatency-64kUpgrade linux-image-genericUpgrade linux-image-oem-22.04Upgrade linux-image-ibmUpgrade linux-image-6.5.0-1017-laptopUpgrade linux-image-generic-64k-hwe-20.04Upgrade linux-image-6.5.0-41-lowlatencyUpgrade linux-image-6.5.0-1022-azure-fdeUpgrade linux-image-lowlatency-64k-hwe-20.04Upgrade linux-image-generic-lpaeUpgrade linux-image-5.15.0-1063-oracleUpgrade linux-image-virtualUpgrade linux-image-5.15.0-116-generic-lpae | 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