From 574a80194156b0bea82131818c72ad40736354ac Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Tue, 16 Aug 2016 11:22:02 -0700 Subject: [PATCH] nvmf: check Connect command RECFMT field Verify that the record format is the one we support (only 0 is defined by the spec for now). Change-Id: Iddf038b381e540134abf572e0545c97a0ef71d5f Signed-off-by: Daniel Verkamp --- lib/nvmf/request.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/nvmf/request.c b/lib/nvmf/request.c index 23de36db1..76d4a13cc 100644 --- a/lib/nvmf/request.c +++ b/lib/nvmf/request.c @@ -183,11 +183,19 @@ nvmf_process_connect(struct spdk_nvmf_request *req) spdk_event_t event; struct spdk_nvmf_fabric_connect_data *data = (struct spdk_nvmf_fabric_connect_data *) req->data; + struct spdk_nvmf_fabric_connect_cmd *cmd = &req->cmd->connect_cmd; struct spdk_nvmf_fabric_connect_rsp *rsp = &req->rsp->connect_rsp; void *end; #define INVALID_CONNECT_DATA(field) invalid_connect_response(rsp, 1, offsetof(struct spdk_nvmf_fabric_connect_data, field)) + if (cmd->recfmt != 0) { + SPDK_ERRLOG("Connect command unsupported RECFMT %u\n", cmd->recfmt); + rsp->status.sct = SPDK_NVME_SCT_COMMAND_SPECIFIC; + rsp->status.sc = SPDK_NVMF_FABRIC_SC_INCOMPATIBLE_FORMAT; + return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; + } + if (req->length < sizeof(struct spdk_nvmf_fabric_connect_data)) { SPDK_ERRLOG("Connect command data length 0x%x too small\n", req->length); req->rsp->nvme_cpl.status.sc = SPDK_NVME_SC_INVALID_FIELD;