Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aa677bc7 authored by Ju, Seokmann's avatar Ju, Seokmann Committed by James Bottomley
Browse files

[SCSI] megaraid_{mm,mbox}: a fix on INQUIRY with EVPD



With this patch, driver will protect data corruption created by
INQUIRY with EVPD request to megaraid controllers.  As specified in
the changelog, megaraid F/W already has fixed the issue and being
under process of release. Meanwhile, driver will protect the system
with this patch.

Signed-Off By: Seokmann Ju <seokmann.ju@lsil.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent fbf60802
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -59,6 +59,13 @@ Older Version : 2.20.4.8 (scsi module), 2.20.2.6 (cmm module)
	> Buffer I/O error on device sda6, logical block 522067228
	> attempt to access beyond end of device

2.	When INQUIRY with EVPD bit set issued to the MegaRAID controller,
	system memory gets corrupted.
	Root Cause: MegaRAID F/W handle the INQUIRY with EVPD bit set
	incorrectly.
	Fix: MegaRAID F/W has fixed the problem and being process of release,
	soon. Meanwhile, driver will filter out the request.

Release Date	: Mon Apr 11 12:27:22 EST 2006 - Seokmann Ju <sju@lsil.com>
Current Version : 2.20.4.8 (scsi module), 2.20.2.6 (cmm module)
Older Version	: 2.20.4.7 (scsi module), 2.20.2.6 (cmm module)
+3 −0
Original line number Diff line number Diff line
@@ -40,6 +40,9 @@
#define HBA_SIGNATURE_64_BIT		0x299
#define PCI_CONF_AMISIG64		0xa4

#define MEGA_SCSI_INQ_EVPD		1
#define MEGA_INVALID_FIELD_IN_CDB	0x24


/**
 * scb_t - scsi command control block
+8 −0
Original line number Diff line number Diff line
@@ -1644,6 +1644,14 @@ megaraid_mbox_build_cmd(adapter_t *adapter, struct scsi_cmnd *scp, int *busy)
				rdev->last_disp |= (1L << SCP2CHANNEL(scp));
			}

			if (scp->cmnd[1] & MEGA_SCSI_INQ_EVPD) {
				scp->sense_buffer[0] = 0x70;
				scp->sense_buffer[2] = ILLEGAL_REQUEST;
				scp->sense_buffer[12] = MEGA_INVALID_FIELD_IN_CDB;
				scp->result = CHECK_CONDITION << 1;
				return NULL;
			}

			/* Fall through */

		case READ_CAPACITY: