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