summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Wilck <Martin.Wilck@suse.com>2019-09-04 15:52:29 +0000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-10-05 13:14:01 +0200
commita16791fccaf68008e2614aa726b36912f3daef2e (patch)
treee60d1d2960fe5685913be01f859ada43846dae4a
parent6e8f051e504d15da929385a1eef66c8f5d91e167 (diff)
downloadlinux-stable-a16791fccaf68008e2614aa726b36912f3daef2e.tar.gz
linux-stable-a16791fccaf68008e2614aa726b36912f3daef2e.tar.bz2
linux-stable-a16791fccaf68008e2614aa726b36912f3daef2e.zip
scsi: scsi_dh_rdac: zero cdb in send_mode_select()
commit 57adf5d4cfd3198aa480e7c94a101fc8c4e6109d upstream. cdb in send_mode_select() is not zeroed and is only partially filled in rdac_failover_get(), which leads to some random data getting to the device. Users have reported storage responding to such commands with INVALID FIELD IN CDB. Code before commit 327825574132 was not affected, as it called blk_rq_set_block_pc(). Fix this by zeroing out the cdb first. Identified & fix proposed by HPE. Fixes: 327825574132 ("scsi_dh_rdac: switch to scsi_execute_req_flags()") Cc: stable@vger.kernel.org Link: https://lore.kernel.org/r/20190904155205.1666-1-martin.wilck@suse.com Signed-off-by: Martin Wilck <mwilck@suse.com> Acked-by: Ales Novak <alnovak@suse.cz> Reviewed-by: Shane Seymour <shane.seymour@hpe.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/scsi/device_handler/scsi_dh_rdac.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/scsi/device_handler/scsi_dh_rdac.c b/drivers/scsi/device_handler/scsi_dh_rdac.c
index 65f1fe343c64..5efc959493ec 100644
--- a/drivers/scsi/device_handler/scsi_dh_rdac.c
+++ b/drivers/scsi/device_handler/scsi_dh_rdac.c
@@ -546,6 +546,8 @@ static void send_mode_select(struct work_struct *work)
spin_unlock(&ctlr->ms_lock);
retry:
+ memset(cdb, 0, sizeof(cdb));
+
data_size = rdac_failover_get(ctlr, &list, cdb);
RDAC_LOG(RDAC_LOG_FAILOVER, sdev, "array %s, ctlr %d, "