[PATCH 1/1] SCSI READ10/12/16: Return correct sense when invalid RDPROTECT is used

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


Tomo, List

Please find attached a patch for read10/12/16 that makes it return
INVALID REQUEST/ILLEGAL OPERATION CODE
when a non-zero RDPROTECT value is specified.

RDPROTECT must be 0 when type 0 protection (==no protection) is used.


regards
ronnie sahlberg

Attachment: 0001-Return-correct-sense-for-reads-with-invalid-RDPROTEC.patch.gz
Description: GNU Zip compressed data

From 0c63772a0c10c812e17b1db80adcfb2d7c0b7dfb Mon Sep 17 00:00:00 2001
From: Ronnie Sahlberg <ronniesahlberg@xxxxxxxxx>
Date: Sat, 16 Apr 2011 09:56:17 +1000
Subject: [PATCH] Return correct sense for reads with invalid RDPROTECT field.

TGTD does not use formatting protection, i.e. it always uses
'type 0 protection'.

In 'type 0 protection' any READ10/12/16 command that specifies a non-zero
RDPROTECT value should be aborted with ILLEGAL REQUEST/INVALID OPERATION CODE

Signed-off-by: Ronnie Sahlberg <ronniesahlberg@xxxxxxxxx>
---
 usr/sbc.c |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/usr/sbc.c b/usr/sbc.c
index a5fb754..cb07be6 100644
--- a/usr/sbc.c
+++ b/usr/sbc.c
@@ -112,6 +112,18 @@ static int sbc_rw(int host_no, struct scsi_cmd *cmd)
 	if (ret)
 		return SAM_STAT_RESERVATION_CONFLICT;
 
+	switch (cmd->scb[0]) {
+	case READ_10:
+	case READ_12:
+	case READ_16:
+		if (cmd->scb[1] & 0xe0) {
+			key = ILLEGAL_REQUEST;
+			asc = ASC_INVALID_OP_CODE;
+			goto sense;
+		}
+		break;
+	}
+
 	if (lu->attrs.readonly) {
 		switch (cmd->scb[0]) {
 		case WRITE_6:
-- 
1.7.3.1


[Linux SCSI]     [Linux RAID]     [Linux Clusters]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]    [Yosemite Photos]    [Free Online Dating]     [Linux Kernel]     [XFree86]     [Video Devices]

Add to Google Powered by Linux