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