aboutsummaryrefslogtreecommitdiff
path: root/lib/libnvmf
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2024-07-25 19:32:38 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2024-07-25 19:32:38 +0000
commitfd0e6af5e49c3db034f1c45ff3f053f282e758c3 (patch)
treedd65755bb78624f6f257e863051b653c5ae66a4d /lib/libnvmf
parent6549718b70f0e660a15685369afb4f9caf2215ce (diff)
Diffstat (limited to 'lib/libnvmf')
-rw-r--r--lib/libnvmf/nvmf_tcp.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/libnvmf/nvmf_tcp.c b/lib/libnvmf/nvmf_tcp.c
index b9bf8153ab1b..89fc65bf6c43 100644
--- a/lib/libnvmf/nvmf_tcp.c
+++ b/lib/libnvmf/nvmf_tcp.c
@@ -956,6 +956,7 @@ tcp_connect(struct nvmf_tcp_qpair *qp, struct nvmf_association *na, bool admin)
struct nvmf_tcp_association *ta = TASSOC(na);
struct nvme_tcp_ic_req ic_req;
struct nvme_tcp_ic_resp ic_resp;
+ uint32_t maxh2cdata;
int error;
if (!admin) {
@@ -1007,9 +1008,9 @@ tcp_connect(struct nvmf_tcp_qpair *qp, struct nvmf_association *na, bool admin)
* some large value and report larger values as an unsupported
* parameter?
*/
- if (le32toh(ic_resp.maxh2cdata) < 4096) {
- na_error(na, "Invalid MAXH2CDATA %u",
- le32toh(ic_resp.maxh2cdata));
+ maxh2cdata = le32toh(ic_resp.maxh2cdata);
+ if (maxh2cdata < 4096 || maxh2cdata % 4 != 0) {
+ na_error(na, "Invalid MAXH2CDATA %u", maxh2cdata);
nvmf_tcp_report_error(na, qp,
NVME_TCP_TERM_REQ_FES_INVALID_HEADER_FIELD, 12, &ic_resp,
sizeof(ic_resp), sizeof(ic_resp));
@@ -1021,7 +1022,7 @@ tcp_connect(struct nvmf_tcp_qpair *qp, struct nvmf_association *na, bool admin)
qp->header_digests = ic_resp.dgst.bits.hdgst_enable != 0;
qp->data_digests = ic_resp.dgst.bits.ddgst_enable != 0;
qp->maxr2t = params->tcp.maxr2t;
- qp->maxh2cdata = le32toh(ic_resp.maxh2cdata);
+ qp->maxh2cdata = maxh2cdata;
if (admin)
/* 7.4.3 */
qp->max_icd = 8192;