From: Roland Dreier <rol...@purestorage.com>

An empty parameter list (length == 0) is not an error, so succeed MODE
SELECT in this case.  If the parameter list length is too small,
return the correct sense code of PARAMETER LIST LENGTH ERROR.

Signed-off-by: Roland Dreier <rol...@purestorage.com>
---
 drivers/target/target_core_spc.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/drivers/target/target_core_spc.c b/drivers/target/target_core_spc.c
index 2d88f08..73c5d53 100644
--- a/drivers/target/target_core_spc.c
+++ b/drivers/target/target_core_spc.c
@@ -983,6 +983,14 @@ static sense_reason_t spc_emulate_modeselect(struct se_cmd 
*cmd)
        int ret = 0;
        int i;
 
+       if (!cmd->data_length) {
+               target_complete_cmd(cmd, GOOD);
+               return 0;
+       }
+
+       if (cmd->data_length < off + 2)
+               return TCM_PARAMETER_LIST_LENGTH_ERROR;
+
        buf = transport_kmap_data_sg(cmd);
        if (!buf)
                return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
@@ -1007,6 +1015,11 @@ static sense_reason_t spc_emulate_modeselect(struct 
se_cmd *cmd)
        goto out;
 
 check_contents:
+       if (cmd->data_length < off + length) {
+               ret = TCM_PARAMETER_LIST_LENGTH_ERROR;
+               goto out;
+       }
+
        if (memcmp(buf + off, tbuf, length))
                ret = TCM_INVALID_PARAMETER_LIST;
 
-- 
1.8.1.2

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to