Subject: CVE-2024-27435: nvme: fix reconnection fail due to reserved tag allocation

From: Greg Kroah-Hartman <[email-masked]>

Description
===========

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

nvme: fix reconnection fail due to reserved tag allocation

We found a issue on production environment while using NVMe over RDMA,
admin_q reconnect failed forever while remote target and network is ok.
After dig into it, we found it may caused by a ABBA deadlock due to tag
allocation. In my case, the tag was hold by a keep alive request
waiting inside admin_q, as we quiesced admin_q while reset ctrl, so the
request maked as idle and will not process before reset success. As
fabric_q shares tagset with admin_q, while reconnect remote target, we
need a tag for connect command, but the only one reserved tag was held
by keep alive command which waiting inside admin_q. As a result, we
failed to reconnect admin_q forever. In order to fix this issue, I
think we should keep two reserved tags for admin queue.

The Linux kernel CVE team has assigned CVE-2024-27435 to this issue.

Affected and fixed versions
===========================

	Issue introduced in 5.12 with commit ed01fee283a0 and fixed in 6.1.83 with commit 149afee5c741
	Issue introduced in 5.12 with commit ed01fee283a0 and fixed in 6.6.23 with commit ff2f90f88d78
	Issue introduced in 5.12 with commit ed01fee283a0 and fixed in 6.7.11 with commit 6851778504cd
	Issue introduced in 5.12 with commit ed01fee283a0 and fixed in 6.8.2 with commit 262da920896e
	Issue introduced in 5.12 with commit ed01fee283a0 and fixed in 6.9 with commit de105068fead

Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.

Unaffected versions might change over time as fixes are backported to
older supported kernel versions.  The official CVE entry at
	https://cve.org/CVERecord/?id=CVE-2024-27435
will be updated if fixes are backported, please check that for the most
up to date information about this issue.

Affected files
==============

The file(s) affected by this issue are:
	drivers/nvme/host/core.c
	drivers/nvme/host/fabrics.h

Mitigation
==========

The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes.  Individual
changes are never tested alone, but rather are part of a larger kernel
release.  Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all.  If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
	https://git.kernel.org/stable/c/149afee5c7418ec5db9d7387b9c9a5c1eb7ea2a8
	https://git.kernel.org/stable/c/ff2f90f88d78559802466ad1c84ac5bda4416b3a
	https://git.kernel.org/stable/c/6851778504cdb49431809b4ba061903d5f592c96
	https://git.kernel.org/stable/c/262da920896e2f2ab0e3947d9dbee0aa09045818
	https://git.kernel.org/stable/c/de105068fead55ed5c07ade75e9c8e7f86a00d1d