Subject: CVE-2023-52454: nvmet-tcp: Fix a kernel panic when host sends an invalid H2C PDU length

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

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

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

nvmet-tcp: Fix a kernel panic when host sends an invalid H2C PDU length

If the host sends an H2CData command with an invalid DATAL,
the kernel may crash in nvmet_tcp_build_pdu_iovec().

Unable to handle kernel NULL pointer dereference at
virtual address 0000000000000000
lr : nvmet_tcp_io_work+0x6ac/0x718 [nvmet_tcp]
Call trace:
  process_one_work+0x174/0x3c8
  worker_thread+0x2d0/0x3e8
  kthread+0x104/0x110

Fix the bug by raising a fatal error if DATAL isn't coherent
with the packet size.
Also, the PDU length should never exceed the MAXH2CDATA parameter which
has been communicated to the host in nvmet_tcp_handle_icreq().

The Linux kernel CVE team has assigned CVE-2023-52454 to this issue.

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

	Issue introduced in 5.0 with commit 872d26a391da and fixed in 5.4.268 with commit ee5e7632e981
	Issue introduced in 5.0 with commit 872d26a391da and fixed in 5.10.209 with commit f775f2621c2a
	Issue introduced in 5.0 with commit 872d26a391da and fixed in 5.15.148 with commit 4cb3cf7177ae
	Issue introduced in 5.0 with commit 872d26a391da and fixed in 6.1.75 with commit 2871aa407007
	Issue introduced in 5.0 with commit 872d26a391da and fixed in 6.6.14 with commit 24e05760186d
	Issue introduced in 5.0 with commit 872d26a391da and fixed in 6.7.2 with commit 70154e8d015c
	Issue introduced in 5.0 with commit 872d26a391da and fixed in 6.8 with commit efa56305908b

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-2023-52454
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/target/tcp.c

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/ee5e7632e981673f42a50ade25e71e612e543d9d
	https://git.kernel.org/stable/c/f775f2621c2ac5cc3a0b3a64665dad4fb146e510
	https://git.kernel.org/stable/c/4cb3cf7177ae3666be7fb27d4ad4d72a295fb02d
	https://git.kernel.org/stable/c/2871aa407007f6f531fae181ad252486e022df42
	https://git.kernel.org/stable/c/24e05760186dc070d3db190ca61efdbce23afc88
	https://git.kernel.org/stable/c/70154e8d015c9b4fb56c1a2ef1fc8b83d45c7f68
	https://git.kernel.org/stable/c/efa56305908ba20de2104f1b8508c6a7401833be