Revision: 13936
          http://edk2.svn.sourceforge.net/edk2/?rev=13936&view=rev
Author:   vanjeff
Date:     2012-11-12 06:17:08 +0000 (Mon, 12 Nov 2012)
Log Message:
-----------
SyncSync patch r13929 and r13931 from main trunk.
1. Moved the PeiS3ResumeState access when PeiS3ResumeState is not 0, this will 
fix K9 error.
2. Refine code to make it more safely. 

Revision Links:
--------------
    http://edk2.svn.sourceforge.net/edk2/?rev=13929&view=rev
    http://edk2.svn.sourceforge.net/edk2/?rev=13931&view=rev

Modified Paths:
--------------
    
branches/UDK2010.SR1/MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/ScriptExecute.c
    branches/UDK2010.SR1/MdeModulePkg/Universal/Network/IScsiDxe/IScsiCHAP.c
    branches/UDK2010.SR1/MdeModulePkg/Universal/Network/IScsiDxe/IScsiProto.c

Modified: 
branches/UDK2010.SR1/MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/ScriptExecute.c
===================================================================
--- 
branches/UDK2010.SR1/MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/ScriptExecute.c
      2012-11-12 05:28:32 UTC (rev 13935)
+++ 
branches/UDK2010.SR1/MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/ScriptExecute.c
      2012-11-12 06:17:08 UTC (rev 13936)
@@ -67,12 +67,6 @@
   //
   Status = S3BootScriptExecute ();
 
-  //
-  // Need report status back to S3ResumePeim. 
-  // If boot script execution is failed, S3ResumePeim wil report the error 
status code.
-  //
-  PeiS3ResumeState->ReturnStatus = (UINT64)(UINTN)Status;
-
   AsmWbinvd ();
 
   //
@@ -84,6 +78,11 @@
   // We need turn back to S3Resume - install boot script done ppi and report 
status code on S3resume.
   //
   if (PeiS3ResumeState != 0) {
+    //
+    // Need report status back to S3ResumePeim. 
+    // If boot script execution is failed, S3ResumePeim wil report the error 
status code.
+    //
+    PeiS3ResumeState->ReturnStatus = (UINT64)(UINTN)Status;
     if (FeaturePcdGet (PcdDxeIplSwitchToLongMode)) {
       //
       // X64 S3 Resume

Modified: 
branches/UDK2010.SR1/MdeModulePkg/Universal/Network/IScsiDxe/IScsiCHAP.c
===================================================================
--- branches/UDK2010.SR1/MdeModulePkg/Universal/Network/IScsiDxe/IScsiCHAP.c    
2012-11-12 05:28:32 UTC (rev 13935)
+++ branches/UDK2010.SR1/MdeModulePkg/Universal/Network/IScsiDxe/IScsiCHAP.c    
2012-11-12 06:17:08 UTC (rev 13936)
@@ -332,6 +332,9 @@
   Session     = Conn->Session;
   AuthData    = &Session->AuthData;
   LoginReq    = (ISCSI_LOGIN_REQUEST *) NetbufGetByte (Pdu, 0, 0);
+  if (LoginReq == NULL) {
+    return EFI_PROTOCOL_ERROR;
+  }
   Status      = EFI_SUCCESS;
 
   RspLen      = 2 * ISCSI_CHAP_RSP_LEN + 3;

Modified: 
branches/UDK2010.SR1/MdeModulePkg/Universal/Network/IScsiDxe/IScsiProto.c
===================================================================
--- branches/UDK2010.SR1/MdeModulePkg/Universal/Network/IScsiDxe/IScsiProto.c   
2012-11-12 05:28:32 UTC (rev 13935)
+++ branches/UDK2010.SR1/MdeModulePkg/Universal/Network/IScsiDxe/IScsiProto.c   
2012-11-12 06:17:08 UTC (rev 13936)
@@ -441,6 +441,9 @@
   CHAR8               *Data;
 
   LoginReq    = (ISCSI_LOGIN_REQUEST *) NetbufGetByte (Pdu, 0, NULL);
+  if (LoginReq == NULL) {
+    return EFI_PROTOCOL_ERROR;
+  }
   DataSegLen  = NTOH24 (LoginReq->DataSegmentLength);
 
   KeyLen      = (UINT32) AsciiStrLen (Key);
@@ -607,6 +610,9 @@
   Session   = Conn->Session;
 
   LoginRsp  = (ISCSI_LOGIN_RESPONSE *) NetbufGetByte (Pdu, 0, NULL);
+  if (LoginRsp == NULL) {
+    return EFI_PROTOCOL_ERROR;
+  }
   if (!ISCSI_CHECK_OPCODE (LoginRsp, ISCSI_OPCODE_LOGIN_RSP)) {
     //
     // It's not a Login Response
@@ -2070,6 +2076,7 @@
   NET_BUF             *DataOutPdu;
   ISCSI_CONNECTION    *Conn;
   ISCSI_XFER_CONTEXT  *XferContext;
+  UINT8               *DataOutPacket;
 
   PduList = AllocatePool (sizeof (LIST_ENTRY));
   if (PduList == NULL) {
@@ -2113,8 +2120,15 @@
   //
   // Set the F bit for the last data out PDU in this sequence.
   //
-  ISCSI_SET_FLAG (NetbufGetByte (DataOutPdu, 0, NULL), ISCSI_BHS_FLAG_FINAL);
+  DataOutPacket = NetbufGetByte (DataOutPdu, 0, NULL);
+  if (DataOutPacket == NULL) {
+    IScsiFreeNbufList (PduList);
+    PduList = NULL;
+    goto ON_EXIT;
+  }
 
+  ISCSI_SET_FLAG (DataOutPacket, ISCSI_BHS_FLAG_FINAL);
+
 ON_EXIT:
 
   return PduList;
@@ -2194,6 +2208,9 @@
   EFI_STATUS          Status;
 
   DataInHdr                   = (ISCSI_SCSI_DATA_IN *) NetbufGetByte (Pdu, 0, 
NULL);
+  if (DataInHdr == NULL) {
+    return EFI_PROTOCOL_ERROR;
+  }
 
   DataInHdr->InitiatorTaskTag = NTOHL (DataInHdr->InitiatorTaskTag);
   DataInHdr->ExpCmdSN         = NTOHL (DataInHdr->ExpCmdSN);
@@ -2282,6 +2299,9 @@
   UINT8                   *Data;
 
   R2THdr = (ISCSI_READY_TO_TRANSFER *) NetbufGetByte (Pdu, 0, NULL);
+  if (R2THdr == NULL) {
+    return EFI_PROTOCOL_ERROR;
+  }
 
   R2THdr->InitiatorTaskTag = NTOHL (R2THdr->InitiatorTaskTag);
   R2THdr->TargetTransferTag = NTOHL (R2THdr->TargetTransferTag);
@@ -2345,6 +2365,9 @@
   UINT32            DataSegLen;
 
   ScsiRspHdr                    = (SCSI_RESPONSE *) NetbufGetByte (Pdu, 0, 
NULL);
+  if (ScsiRspHdr == NULL) {
+    return EFI_PROTOCOL_ERROR;
+  }
 
   ScsiRspHdr->InitiatorTaskTag  = NTOHL (ScsiRspHdr->InitiatorTaskTag);
   if (ScsiRspHdr->InitiatorTaskTag != Tcb->InitiatorTaskTag) {
@@ -2407,6 +2430,9 @@
   DataSegLen = ISCSI_GET_DATASEG_LEN (ScsiRspHdr);
   if (DataSegLen != 0) {
     SenseData               = (ISCSI_SENSE_DATA *) NetbufGetByte (Pdu, sizeof 
(SCSI_RESPONSE), NULL);
+    if (SenseData == NULL) {
+      return EFI_PROTOCOL_ERROR;
+    }
 
     SenseData->Length       = NTOHS (SenseData->Length);
 
@@ -2441,6 +2467,9 @@
   EFI_STATUS    Status;
 
   NopInHdr            = (ISCSI_NOP_IN *) NetbufGetByte (Pdu, 0, NULL);
+  if (NopInHdr == NULL) {
+    return EFI_PROTOCOL_ERROR;
+  }
 
   NopInHdr->StatSN    = NTOHL (NopInHdr->StatSN);
   NopInHdr->ExpCmdSN  = NTOHL (NopInHdr->ExpCmdSN);
@@ -2496,7 +2525,7 @@
   UINT8                   *Data;
   ISCSI_IN_BUFFER_CONTEXT InBufferContext;
   UINT64                  Timeout;
-  UINT8                   *Buffer;
+  UINT8                   *PduHdr;
 
   Private       = ISCSI_DRIVER_DATA_FROM_EXT_SCSI_PASS_THRU (PassThru);
   Session       = &Private->Session;
@@ -2534,8 +2563,13 @@
   }
 
   XferContext         = &Tcb->XferContext;
-  Buffer              = NetbufGetByte (Pdu, 0, NULL);
-  XferContext->Offset = ISCSI_GET_DATASEG_LEN (Buffer);
+  PduHdr              = NetbufGetByte (Pdu, 0, NULL);
+  if (PduHdr == NULL) {
+    Status = EFI_PROTOCOL_ERROR;
+    NetbufFree (Pdu);
+    goto ON_EXIT;
+  }
+  XferContext->Offset = ISCSI_GET_DATASEG_LEN (PduHdr);
 
   //
   // Transmit the SCSI Command PDU.
@@ -2591,7 +2625,13 @@
       goto ON_EXIT;
     }
 
-    switch (ISCSI_GET_OPCODE (NetbufGetByte (Pdu, 0, NULL))) {
+    PduHdr = NetbufGetByte (Pdu, 0, NULL);
+    if (PduHdr == NULL) {
+      Status = EFI_PROTOCOL_ERROR;
+      NetbufFree (Pdu);
+      goto ON_EXIT;
+    }
+    switch (ISCSI_GET_OPCODE (PduHdr)) {
     case ISCSI_OPCODE_SCSI_DATA_IN:
       Status = IScsiOnDataInRcvd (Pdu, Tcb, Packet);
       break;

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_nov
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to