Skip to content
OpenAdvisories
High · 7.5 CVE-2021-47041 EUVD-2021-33689GHSA-cpr5-fxjg-jcr6

nvmet-tcp: fix incorrect locking in state_change sk callback

Published Feb 28, 2024 · Updated Aug 5, 2026 · Assigned by Linux

Vendor: Linux Product: Linux Package: linux Package: linux Package: linux-allwinner-5.19 Package: linux-aws Package: linux-aws-5.0 Package: linux-aws-5.11 Package: linux-aws-5.13 Package: linux-aws-5.19 Package: linux-aws-5.3 Package: linux-aws-5.4 Package: linux-aws-5.8 Package: linux-aws-6.2 Package: linux-aws-fips Package: linux-azure Package: linux-azure-5.11 Package: linux-azure-5.13 Package: linux-azure-5.19 Package: linux-azure-5.3 Package: linux-azure-5.4 Package: linux-azure-5.8 Package: linux-azure-6.2 Package: linux-azure-edge Package: linux-azure-fde Package: linux-azure-fde-5.19 Package: linux-azure-fde-6.2 Package: linux-azure-fips Package: linux-bluefield Package: linux-fips Package: linux-gcp Package: linux-gcp-5.11 Package: linux-gcp-5.13 Package: linux-gcp-5.19 Package: linux-gcp-5.3 Package: linux-gcp-5.4 Package: linux-gcp-5.8 Package: linux-gcp-6.2 Package: linux-gcp-fips Package: linux-gke Package: linux-gke-4.15 Package: linux-gke-5.15 Package: linux-gke-5.4 Package: linux-gkeop Package: linux-gkeop-5.4 Package: linux-hwe Package: linux-hwe-5.11 Package: linux-hwe-5.13 Package: linux-hwe-5.19 Package: linux-hwe-5.4 Package: linux-hwe-5.8 Package: linux-hwe-6.2 Package: linux-hwe-edge Package: linux-intel-5.13 Package: linux-intel-iot-realtime Package: linux-kvm Package: linux-lowlatency-hwe-5.19 Package: linux-lowlatency-hwe-6.2 Package: linux-nvidia-6.2 Package: linux-oem Package: linux-oem-5.10 Package: linux-oem-5.13 Package: linux-oem-5.14 Package: linux-oem-5.17 Package: linux-oem-5.6 Package: linux-oem-6.0 Package: linux-oem-6.1 Package: linux-oracle Package: linux-oracle-5.0 Package: linux-oracle-5.11 Package: linux-oracle-5.13 Package: linux-oracle-5.3 Package: linux-oracle-5.4 Package: linux-oracle-5.8 Package: linux-raspi Package: linux-raspi-5.4 Package: linux-raspi-realtime Package: linux-raspi2 Package: linux-realtime Package: linux-riscv Package: linux-riscv-5.11 Package: linux-riscv-5.19 Package: linux-riscv-5.8 Package: linux-starfive-5.19 Package: linux-starfive-6.2 Package: linux-vmware Platform: Linux Ecosystem: Debian Ecosystem: Ubuntu

Description

In the Linux kernel, the following vulnerability has been resolved:

nvmet-tcp: fix incorrect locking in state_change sk callback

We are not changing anything in the TCP connection state so
we should not take a write_lock but rather a read lock.

This caused a deadlock when running nvmet-tcp and nvme-tcp
on the same system, where state_change callbacks on the
host and on the controller side have causal relationship
and made lockdep report on this with blktests:

================================
WARNING: inconsistent lock state
5.12.0-rc3 #1 Tainted: G I
--------------------------------
inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-R} usage.
nvme/1324 [HC0[0]:SC0[0]:HE1:SE1] takes:
ffff888363151000 (clock-AF_INET){++-?}-{2:2}, at: nvme_tcp_state_change+0x21/0x150 [nvme_tcp]
{IN-SOFTIRQ-W} state was registered at:
__lock_acquire+0x79b/0x18d0
lock_acquire+0x1ca/0x480
_raw_write_lock_bh+0x39/0x80
nvmet_tcp_state_change+0x21/0x170 [nvmet_tcp]
tcp_fin+0x2a8/0x780
tcp_data_queue+0xf94/0x1f20
tcp_rcv_established+0x6ba/0x1f00
tcp_v4_do_rcv+0x502/0x760
tcp_v4_rcv+0x257e/0x3430
ip_protocol_deliver_rcu+0x69/0x6a0
ip_local_deliver_finish+0x1e2/0x2f0
ip_local_deliver+0x1a2/0x420
ip_rcv+0x4fb/0x6b0
__netif_receive_skb_one_core+0x162/0x1b0
process_backlog+0x1ff/0x770
__napi_poll.constprop.0+0xa9/0x5c0
net_rx_action+0x7b3/0xb30
__do_softirq+0x1f0/0x940
do_softirq+0xa1/0xd0
__local_bh_enable_ip+0xd8/0x100
ip_finish_output2+0x6b7/0x18a0
__ip_queue_xmit+0x706/0x1aa0
__tcp_transmit_skb+0x2068/0x2e20
tcp_write_xmit+0xc9e/0x2bb0
__tcp_push_pending_frames+0x92/0x310
inet_shutdown+0x158/0x300
__nvme_tcp_stop_queue+0x36/0x270 [nvme_tcp]
nvme_tcp_stop_queue+0x87/0xb0 [nvme_tcp]
nvme_tcp_teardown_admin_queue+0x69/0xe0 [nvme_tcp]
nvme_do_delete_ctrl+0x100/0x10c [nvme_core]
nvme_sysfs_delete.cold+0x8/0xd [nvme_core]
kernfs_fop_write_iter+0x2c7/0x460
new_sync_write+0x36c/0x610
vfs_write+0x5c0/0x870
ksys_write+0xf9/0x1d0
do_syscall_64+0x33/0x40
entry_SYSCALL_64_after_hwframe+0x44/0xae
irq event stamp: 10687
hardirqs last enabled at (10687): [<ffffffff9ec376bd>] _raw_spin_unlock_irqrestore+0x2d/0x40
hardirqs last disabled at (10686): [<ffffffff9ec374d8>] _raw_spin_lock_irqsave+0x68/0x90
softirqs last enabled at (10684): [<ffffffff9f000608>] __do_softirq+0x608/0x940
softirqs last disabled at (10649): [<ffffffff9cdedd31>] do_softirq+0xa1/0xd0

other info that might help us debug this:
Possible unsafe locking scenario:

CPU0
----
lock(clock-AF_INET);
<Interrupt>
lock(clock-AF_INET);

*** DEADLOCK ***

5 locks held by nvme/1324:
#0: ffff8884a01fe470 (sb_writers#4){.+.+}-{0:0}, at: ksys_write+0xf9/0x1d0
#1: ffff8886e435c090 (&of->mutex){+.+.}-{3:3}, at: kernfs_fop_write_iter+0x216/0x460
#2: ffff888104d90c38 (kn->active#255){++++}-{0:0}, at: kernfs_remove_self+0x22d/0x330
#3: ffff8884634538d0 (&queue->queue_lock){+.+.}-{3:3}, at: nvme_tcp_stop_queue+0x52/0xb0 [nvme_tcp]
#4: ffff888363150d30 (sk_lock-AF_INET){+.+.}-{0:0}, at: inet_shutdown+0x59/0x300

stack backtrace:
CPU: 26 PID: 1324 Comm: nvme Tainted: G I 5.12.0-rc3 #1
Hardware name: Dell Inc. PowerEdge R640/06NR82, BIOS 2.10.0 11/12/2020
Call Trace:
dump_stack+0x93/0xc2
mark_lock_irq.cold+0x2c/0xb3
? verify_lock_unused+0x390/0x390
? stack_trace_consume_entry+0x160/0x160
? lock_downgrade+0x100/0x100
? save_trace+0x88/0x5e0
? _raw_spin_unlock_irqrestore+0x2d/0x40
mark_lock+0x530/0x1470
? mark_lock_irq+0x1d10/0x1d10
? enqueue_timer+0x660/0x660
mark_usage+0x215/0x2a0
__lock_acquire+0x79b/0x18d0
? tcp_schedule_loss_probe.part.0+0x38c/0x520
lock_acquire+0x1ca/0x480
? nvme_tcp_state_change+0x21/0x150 [nvme_tcp]
? rcu_read_unlock+0x40/0x40
? tcp_mtu_probe+0x1ae0/0x1ae0
? kmalloc_reserve+0xa0/0xa0
? sysfs_file_ops+0x170/0x170
_raw_read_lock+0x3d/0xa0
? nvme_tcp_state_change+0x21/0x150 [nvme_tcp]
nvme_tcp_state_change+0x21/0x150 [nvme_tcp]
? sysfs_file_ops
---truncated---

Affected products

VendorProductAffectedFixed
Linux Linux 5.0 5.4.119

Fixed in Linux distributions

Distributions backport fixes, so the version that fixes this vulnerability differs per release — upgrade to at least the version shown. From the distributions' security trackers and advisories.

ReleasePackageFixed inAdvisory
Debian 14 linux 5.10.38-1 —
Debian 13 linux 5.10.38-1 —
Debian 12 linux 5.10.38-1 —
ReleasePackageFixed inAdvisory
Ubuntu 24.04 LTS linux-raspi-realtime No fix yet —
Ubuntu 22.04 LTS linux-riscv +22 No fix yet —
Ubuntu 20.04 LTS linux 5.4.0-77.86 —
Ubuntu 20.04 LTS linux-aws +1 5.4.0-1051.53 —
Ubuntu 20.04 LTS linux-bluefield 5.4.0-1013.16 —
Ubuntu 20.04 LTS linux-gcp 5.4.0-1046.49 —
Ubuntu 20.04 LTS linux-gke +26 No fix yet —
Ubuntu 20.04 LTS linux-gkeop 5.4.0-1018.19 —
Ubuntu 20.04 LTS linux-kvm 5.4.0-1041.42 —
Ubuntu 20.04 LTS linux-oracle 5.4.0-1048.52 —
Ubuntu 20.04 LTS linux-raspi 5.4.0-1038.41 —
Ubuntu 18.04 LTS linux-aws-5.4 +1 5.4.0-1051.53~18.04.1 —
Ubuntu 18.04 LTS linux-gcp +14 No fix yet —
Ubuntu 18.04 LTS linux-gcp-5.4 5.4.0-1046.49~18.04.1 —
Ubuntu 18.04 LTS linux-hwe-5.4 5.4.0-77.86~18.04.1 —
Ubuntu 18.04 LTS linux-oracle-5.4 5.4.0-1048.52~18.04.1 —
Ubuntu 18.04 LTS linux-raspi-5.4 5.4.0-1038.41~18.04.1 —
Ubuntu 16.04 LTS linux-hwe-edge No fix yet —
Show 2 more (older releases, extended support, other products)
ReleasePackageFixed inAdvisory
Ubuntu Pro FIPS 20.04 LTS linux-fips +3 No fix yet —
Ubuntu Pro FIPS-updates 20.04 LTS linux-aws-fips 5.4.0-1069.73+fips2 —
Ubuntu Pro FIPS-updates 20.04 LTS linux-azure-fips 5.4.0-1073.76+fips1 —
Ubuntu Pro FIPS-updates 20.04 LTS linux-fips 5.4.0-1028.32 —
Ubuntu Pro FIPS-updates 20.04 LTS linux-gcp-fips 5.4.0-1067.71~20.04.1 —
ReleasePackageFixed inAdvisory
SLES 15 SP3 kernel-64kb +6 5.3.18-150300.59.161.1 SUSE-SU-2024:1642-1
SLES 15 SP3 kernel-default-base 5.3.18-150300.59.161.1.150300.18.94.1 SUSE-SU-2024:1642-1
SLES 15 SP3 kernel-docs 5.3.18-150300.59.161.2 SUSE-SU-2024:1642-1
SLES 15 SP2 kernel-default-base 5.3.18-150200.24.191.1.150200.9.97.1 SUSE-SU-2024:1650-1
SLES 15 SP2 kernel-docs +5 5.3.18-150200.24.191.1 SUSE-SU-2024:1650-1
Show 9 more (older releases, extended support, other products)
ReleasePackageFixed inAdvisory
SLES for SAP 15 SP3 kernel-default-base 5.3.18-150300.59.161.1.150300.18.94.1 SUSE-SU-2024:1642-1
SLES for SAP 15 SP3 kernel-docs 5.3.18-150300.59.161.2 SUSE-SU-2024:1642-1
SLES for SAP 15 SP3 kernel-syms +4 5.3.18-150300.59.161.1 SUSE-SU-2024:1642-1
SLES for SAP 15 SP2 kernel-default-base 5.3.18-150200.24.191.1.150200.9.97.1 SUSE-SU-2024:1650-1
SLES for SAP 15 SP2 kernel-docs +5 5.3.18-150200.24.191.1 SUSE-SU-2024:1650-1
SLE Micro 5.2 kernel-default 5.3.18-150300.59.161.1 SUSE-SU-2024:1642-1
SLE Micro 5.2 kernel-default-base 5.3.18-150300.59.161.1.150300.18.94.1 SUSE-SU-2024:1642-1
SLE Micro 5.2 kernel-rt +1 5.3.18-150300.169.1 SUSE-SU-2024:1645-1
SLE Micro 5.1 kernel-default 5.3.18-150300.59.161.1 SUSE-SU-2024:1642-1
SLE Micro 5.1 kernel-default-base 5.3.18-150300.59.161.1.150300.18.94.1 SUSE-SU-2024:1642-1
SLE Micro 5.1 kernel-rt +1 5.3.18-150300.169.1 SUSE-SU-2024:1645-1
SLE Live Patching 15 SP3 kernel-default 5.3.18-150300.59.161.1 SUSE-SU-2024:1642-1
SLE Live Patching 15 SP3 kernel-livepatch-SLE15-SP3_Update_44 1-150300.7.3.1 SUSE-SU-2024:1642-1
SLE Live Patching 15 SP2 kernel-default 5.3.18-150200.24.191.1 SUSE-SU-2024:1650-1
SLE Live Patching 15 SP2 kernel-livepatch-SLE15-SP2_Update_48 1-150200.5.3.1 SUSE-SU-2024:1650-1
SLE HPC 15 SP3 kernel-64kb +5 5.3.18-150300.59.161.1 SUSE-SU-2024:1642-1
SLE HPC 15 SP3 kernel-default-base 5.3.18-150300.59.161.1.150300.18.94.1 SUSE-SU-2024:1642-1
SLE HPC 15 SP3 kernel-docs 5.3.18-150300.59.161.2 SUSE-SU-2024:1642-1
SLE HPC 15 SP2 kernel-default-base 5.3.18-150200.24.191.1.150200.9.97.1 SUSE-SU-2024:1650-1
SLE HPC 15 SP2 kernel-docs +5 5.3.18-150200.24.191.1 SUSE-SU-2024:1650-1
SUSE Enterprise Storage 7.1 kernel-64kb +5 5.3.18-150300.59.161.1 SUSE-SU-2024:1642-1
SUSE Enterprise Storage 7.1 kernel-default-base 5.3.18-150300.59.161.1.150300.18.94.1 SUSE-SU-2024:1642-1
SUSE Enterprise Storage 7.1 kernel-docs 5.3.18-150300.59.161.2 SUSE-SU-2024:1642-1

Advisories 4

References