From bcb9d9361ac0e9b2c15ec528902004bc6d56ff06 Mon Sep 17 00:00:00 2001 From: Darek Stojaczyk Date: Wed, 24 Jul 2019 13:32:02 +0200 Subject: [PATCH] scsi: fail invalid MODE_SELECT requests For MODE_SELECT request we didn't verify the parameter list length field from CDB and could complete an invalid I/O without reporting any error. Fix it by adding an additional check. Just to clarify: the I/O did not do any harm, we just completed it with success while we should have completed it with some error status. Change-Id: I473e321da37259ee6318ca7dadab2726851d2b68 Signed-off-by: Darek Stojaczyk Signed-off-by: Shuhei Matsumoto Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/463065 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris --- lib/scsi/scsi_bdev.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/lib/scsi/scsi_bdev.c b/lib/scsi/scsi_bdev.c index 4373a32d9..e4488dd9c 100644 --- a/lib/scsi/scsi_bdev.c +++ b/lib/scsi/scsi_bdev.c @@ -1779,14 +1779,9 @@ bdev_scsi_process_primary(struct spdk_scsi_task *task) if (rc < 0) { break; } - data_len = rc; - if (cdb[0] == SPDK_SPC_MODE_SELECT_6) { - rc = bdev_scsi_check_len(task, data_len, 4); - } else { - rc = bdev_scsi_check_len(task, data_len, 8); - } + rc = bdev_scsi_check_len(task, data_len, spdk_max(pllen, md)); if (rc < 0) { break; }