[PATCH] scsi: qla2xxx avoid a panic due to BUG() if a WRITE_SAME command is sent to a device that has no protection

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



In the current code, If a device does not have protection, qla2xx will
land up defaulting to a BUG() and will panic the system when
sg_write_same is sent.This is because SCSI_PROT_NORMAL is matched and
falls through to the BUG() call.
The write_same command to a device without protection is not handled
safely.

Fix this by making two changes:
Set the bundling variable also to 0 for SCSI_PROT_NORMAL
Modify the switch statement to match on SCSI_PROT_NORMAL and handle it
appropriately removing the call to BUG()

Supersedes prior suggested patch.
 
Suggested-by: David Jeffery <djeffery@xxxxxxxxxx>
Tested-by: Laurence Oberman <loberman@xxxxxxxxxx>
Signed-off-by: Laurence Oberman <loberman@xxxxxxxxxx>
---
 drivers/scsi/qla2xxx/qla_iocb.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/qla2xxx/qla_iocb.c
b/drivers/scsi/qla2xxx/qla_iocb.c
index b9b3e6f80ea9..82a5d195e401 100644
--- a/drivers/scsi/qla2xxx/qla_iocb.c
+++ b/drivers/scsi/qla2xxx/qla_iocb.c
@@ -1381,7 +1381,8 @@ qla24xx_build_scsi_crc_2_iocbs(srb_t *sp, struct
cmd_type_crc_2 *cmd_pkt,
 	if ((scsi_get_prot_op(cmd) == SCSI_PROT_READ_INSERT) ||
 	    (scsi_get_prot_op(cmd) == SCSI_PROT_WRITE_STRIP) ||
 	    (scsi_get_prot_op(cmd) == SCSI_PROT_READ_STRIP) ||
-	    (scsi_get_prot_op(cmd) == SCSI_PROT_WRITE_INSERT))
+	    (scsi_get_prot_op(cmd) == SCSI_PROT_WRITE_INSERT) ||
+	    (scsi_get_prot_op(cmd) == SCSI_PROT_NORMAL))
 		bundling = 0;
 
 	/* Allocate CRC context from global pool */
@@ -1443,6 +1444,9 @@ qla24xx_build_scsi_crc_2_iocbs(srb_t *sp, struct
cmd_type_crc_2 *cmd_pkt,
 	dif_bytes = (data_bytes / blk_size) * 8;
 
 	switch (scsi_get_prot_op(GET_CMD_SP(sp))) {
+	case SCSI_PROT_NORMAL:
+		total_bytes = data_bytes;
+		break;
 	case SCSI_PROT_READ_INSERT:
 	case SCSI_PROT_WRITE_STRIP:
 		total_bytes = data_bytes;
-- 
2.39.3





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux