From 2d1c3419ad492c088cb6c9ec1ed5f9e9f74a3b5e Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Mon, 18 Jul 2016 11:16:32 -0700 Subject: [PATCH] nvmf: verify correct IOSQES and IOCQES on connect The NVMe spec requires that the I/O queue entry size values in CC are set before any I/O queues may be created. Change-Id: I4f0c9a9c20411223d281993745c85a8431197961 Signed-off-by: Daniel Verkamp --- lib/nvmf/session.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/nvmf/session.c b/lib/nvmf/session.c index 66de516a9..f301b0efa 100644 --- a/lib/nvmf/session.c +++ b/lib/nvmf/session.c @@ -271,6 +271,20 @@ spdk_nvmf_session_connect(struct spdk_nvmf_conn *conn, return; } + if (1u << session->vcprop.cc.bits.iosqes != sizeof(struct spdk_nvme_cmd)) { + SPDK_ERRLOG("Got I/O connect with invalid IOSQES %u\n", + session->vcprop.cc.bits.iosqes); + INVALID_CONNECT_CMD(qid); + return; + } + + if (1u << session->vcprop.cc.bits.iocqes != sizeof(struct spdk_nvme_cpl)) { + SPDK_ERRLOG("Got I/O connect with invalid IOCQES %u\n", + session->vcprop.cc.bits.iocqes); + INVALID_CONNECT_CMD(qid); + return; + } + /* check if we would exceed session connection limit */ if (session->num_connections >= session->max_connections_allowed) { SPDK_ERRLOG("connection limit %d\n", session->num_connections);