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

Re: [RFC PATCH 5/6] Check Service Action when handling Read Capacity 16


  • To: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>, "win-pv-devel@xxxxxxxxxxxxxxxxxxxx" <win-pv-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Owen Smith <owen.smith@xxxxxxxxxx>
  • Date: Wed, 4 Mar 2026 08:27:50 +0000
  • Accept-language: en-GB, en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=JomGpP21U2Qru1FDvOcnHy+Rw7SbA7Dz650T5JMQ7SU=; b=fGb3UAlmGsRuEBzVRgUga2iCkqZcUr+kG20V66RR5qD/N4o9U2WvlndM3hq2eeGCDSvNBtGCFNmkgBNagRxOP3ftndwBnfHN3Fr33WWg0ue3eEVNj4G8CtDKiOry4Wa1NOBNdN8lLLQVXGEDhVhWKl0rPY67VdywVylYk9wTt4k9FPplvXOOUtLvq76zyVqoTdtVmK3kw6By+U2sVDBTw4RkrjiWFfPCMVM85M6nnXOA1lSNSiDa9EFk2nTja2BszfLhSnZsO2hzq3lwoPdWHx9YvcdQ4ZzeuSS0YjhqGzcteZByo1mxQ/U7jWBHk+XX1MUUPzsbMR43BuLPAF4iTg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=H6PHPARpkkVaTTRPDHlTikcGtOvaHPp8HvlIC3qfBvV9tBh9SNLZcYIqoqrMYxeAZYH2kB1L33H2OHbzCU6wpK+fejZ7XYebolmt11FC7Hn4oWeTpkVdINllhj90QFAFYzghTzC8qX1AaDLBMXgHIfeJ2JgZBWgtErX2Ve68AzcGtzmK5BBQ2FcQHPzEvsNTqZmm1AmTjnZTZXUr1j2AaZ6nV1694oevlQp6aPBoAgPt9rPc1fl01LcDonOHUDMed+iih20Vosnx/6wAtmqDqJuIz0eG4zHKPvjlMnAqH+pqNIk0d5RBXR1Ztk8VmVfo9g3rVIamHZSDG4AITPGqcg==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Delivery-date: Wed, 04 Mar 2026 08:27:55 +0000
  • List-id: Developer list for the Windows PV Drivers subproject <win-pv-devel.lists.xenproject.org>
  • Msip_labels:
  • Thread-index: AQHcpw8HMGEo69R2lECJVGbqnNFVk7WeE3Ek
  • Thread-topic: [RFC PATCH 5/6] Check Service Action when handling Read Capacity 16

Reviewed-by: Owen Smith <owen.smith@xxxxxxxxxx>

________________________________________
From: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
Sent: 26 February 2026 10:59 AM
To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx
Cc: Tu Dinh; Owen Smith
Subject: [RFC PATCH 5/6] Check Service Action when handling Read Capacity 16

Read Capacity 16 shares the same opcode with other Service Action In 16
subcommands.

Add an explicit check for SERVICE_ACTION_READ_CAPACITY16.

Signed-off-by: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
---
 include/xencdb.h    |  8 ++++++++
 src/xenvbd/target.c | 26 ++++++++++++++++++++++++--
 2 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/include/xencdb.h b/include/xencdb.h
index 492d50d..594e9fe 100644
--- a/include/xencdb.h
+++ b/include/xencdb.h
@@ -261,6 +261,14 @@ FORCEINLINE UCHAR Cdb_EVPD(const SCSI_REQUEST_BLOCK* const 
srb)
     return Cdb_EVPDRaw(srb->CdbLength, srb->Cdb);
 }

+FORCEINLINE UCHAR Cdb_ServiceAction(const SCSI_REQUEST_BLOCK* const srb)
+{
+    if (srb->CdbLength > 6)
+        return srb->Cdb[1] & 0x1F;
+    else
+        return 0;
+}
+
 FORCEINLINE const char* Cdb_OperationName(UCHAR op)
 {
 #define _SCSIOP_NAME(x) case x: return #x;
diff --git a/src/xenvbd/target.c b/src/xenvbd/target.c
index 3d48ade..2cae479 100644
--- a/src/xenvbd/target.c
+++ b/src/xenvbd/target.c
@@ -636,6 +636,28 @@ fail1:
     Error("fail1\n");
 }

+static DECLSPEC_NOINLINE VOID
+TargetServiceActionIn16(
+    IN  PXENVBD_TARGET      Target,
+    IN  PSCSI_REQUEST_BLOCK Srb
+    )
+{
+    UCHAR                   ServiceAction = Cdb_ServiceAction(Srb);
+
+    switch (ServiceAction){
+    case SERVICE_ACTION_READ_CAPACITY16:
+        TargetReadCapacity16(Target, Srb);
+        return;
+    default:
+        Trace("Target[%d] : Unsupported SCSIOP_SERVICE_ACTION_IN16 "
+              "service action (%02hhx)\n",
+              TargetGetTargetId(Target),
+              ServiceAction);
+        Srb->SrbStatus = SRB_STATUS_INVALID_REQUEST;
+        break;
+    }
+}
+
 static FORCEINLINE VOID
 TargetInquiryStd(
     IN  PXENVBD_TARGET      Target,
@@ -1063,8 +1085,8 @@ TargetStartIo(
         TargetReadCapacity(Target, Srb);
         break;

-    case SCSIOP_READ_CAPACITY16:
-        TargetReadCapacity16(Target, Srb);
+    case SCSIOP_SERVICE_ACTION_IN16:
+        TargetServiceActionIn16(Target, Srb);
         break;

     case SCSIOP_MEDIUM_REMOVAL:
--
2.51.2.windows.1



--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.