]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Pci/NvmExpressPei/NvmExpressPeiPassThru.c
MdeModulePkg/NvmExpressPei: Refine data buffer & len check in PassThru
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / NvmExpressPei / NvmExpressPeiPassThru.c
index 81ad01b7eeca720cb607f432e2ed1d0c129eb449..ddcfe039981f7a82ff92051f82db510ac6cca5b3 100644 (file)
@@ -442,7 +442,8 @@ NvmePassThru (
   // specific addresses.\r
   //\r
   if ((Sq->Opc & (BIT0 | BIT1)) != 0) {\r
-    if ((Packet->TransferLength == 0) || (Packet->TransferBuffer == NULL)) {\r
+    if (((Packet->TransferLength != 0) && (Packet->TransferBuffer == NULL)) ||\r
+        ((Packet->TransferLength == 0) && (Packet->TransferBuffer != NULL))) {\r
       return EFI_INVALID_PARAMETER;\r
     }\r
 \r
@@ -468,21 +469,23 @@ NvmePassThru (
         MapOp = EdkiiIoMmuOperationBusMasterWrite;\r
       }\r
 \r
-      MapLength = Packet->TransferLength;\r
-      Status = IoMmuMap (\r
-                 MapOp,\r
-                 Packet->TransferBuffer,\r
-                 &MapLength,\r
-                 &PhyAddr,\r
-                 &MapData\r
-                 );\r
-      if (EFI_ERROR (Status) || (MapLength != Packet->TransferLength)) {\r
-        Status = EFI_OUT_OF_RESOURCES;\r
-        DEBUG ((DEBUG_ERROR, "%a: Fail to map data buffer.\n", __FUNCTION__));\r
-        goto Exit;\r
-      }\r
+      if ((Packet->TransferLength != 0) && (Packet->TransferBuffer != NULL)) {\r
+        MapLength = Packet->TransferLength;\r
+        Status = IoMmuMap (\r
+                   MapOp,\r
+                   Packet->TransferBuffer,\r
+                   &MapLength,\r
+                   &PhyAddr,\r
+                   &MapData\r
+                   );\r
+        if (EFI_ERROR (Status) || (MapLength != Packet->TransferLength)) {\r
+          Status = EFI_OUT_OF_RESOURCES;\r
+          DEBUG ((DEBUG_ERROR, "%a: Fail to map data buffer.\n", __FUNCTION__));\r
+          goto Exit;\r
+        }\r
 \r
-      Sq->Prp[0] = PhyAddr;\r
+        Sq->Prp[0] = PhyAddr;\r
+      }\r
 \r
       if((Packet->MetadataLength != 0) && (Packet->MetadataBuffer != NULL)) {\r
         MapLength = Packet->MetadataLength;\r