Looks good to me. 

Reviewed-By: Wu Jiaxin <[email protected]>

Best Regards!
Jiaxin

> -----Original Message-----
> From: Zhang, Lubo
> Sent: Monday, June 20, 2016 1:57 PM
> To: [email protected]
> Cc: Ye, Ting <[email protected]>; Fu, Siyuan <[email protected]>; Wu,
> Jiaxin <[email protected]>
> Subject: [PATCH v2] NetworkPkg: Replace ASSERT with error handling in Http
> boot and IScsi
> 
> v2:
> *Fix some memory leak issue.
> 
> This patch is used to replace ASSERT with error handling in Http boot Driver
> and IScsi driver.
> 
> Cc: Ye Ting <[email protected]>
> Cc: Fu Siyuan <[email protected]>
> Cc: Wu Jiaxin <[email protected]>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Zhang Lubo <[email protected]>
> ---
>  NetworkPkg/HttpBootDxe/HttpBootConfig.c |  5 +++--
> NetworkPkg/HttpBootDxe/HttpBootDhcp6.c  |  5 ++++-
>  NetworkPkg/IScsiDxe/IScsiConfig.c       |  8 ++++++--
>  NetworkPkg/IScsiDxe/IScsiDriver.c       |  1 +
>  NetworkPkg/IScsiDxe/IScsiMisc.c         |  5 ++++-
>  NetworkPkg/IScsiDxe/IScsiProto.c        | 17 +++++++++++++----
>  6 files changed, 31 insertions(+), 10 deletions(-)
> 
> diff --git a/NetworkPkg/HttpBootDxe/HttpBootConfig.c
> b/NetworkPkg/HttpBootDxe/HttpBootConfig.c
> index 04c2f3e..3708995 100644
> --- a/NetworkPkg/HttpBootDxe/HttpBootConfig.c
> +++ b/NetworkPkg/HttpBootDxe/HttpBootConfig.c
> @@ -271,11 +271,13 @@ HttpBootFormExtractConfig (
>      // followed by "&OFFSET=0&WIDTH=WWWWWWWWWWWWWWWW"
> followed by a Null-terminator
>      //
>      ConfigRequestHdr = HiiConstructConfigHdr (&gHttpBootConfigGuid,
> mHttpBootConfigStorageName, CallbackInfo->ChildHandle);
>      Size = (StrLen (ConfigRequestHdr) + 32 + 1) * sizeof (CHAR16);
>      ConfigRequest = AllocateZeroPool (Size);
> -    ASSERT (ConfigRequest != NULL);
> +    if (ConfigRequest == NULL) {
> +      return EFI_OUT_OF_RESOURCES;
> +    }
>      AllocatedRequest = TRUE;
>      UnicodeSPrint (ConfigRequest, Size, L"%s&OFFSET=0&WIDTH=%016LX",
> ConfigRequestHdr, (UINT64)BufferSize);
>      FreePool (ConfigRequestHdr);
>    }
> 
> @@ -462,11 +464,10 @@ HttpBootFormCallback (
>    case KEY_INITIATOR_URI:
>      //
>      // Get user input URI string
>      //
>      Uri = HiiGetString (CallbackInfo->RegisteredHandle, Value->string, NULL);
> -    ASSERT (Uri != NULL);
>      if (Uri == NULL) {
>        return EFI_UNSUPPORTED;
>      }
> 
>      //
> diff --git a/NetworkPkg/HttpBootDxe/HttpBootDhcp6.c
> b/NetworkPkg/HttpBootDxe/HttpBootDhcp6.c
> index 0157095..9ea421d 100644
> --- a/NetworkPkg/HttpBootDxe/HttpBootDhcp6.c
> +++ b/NetworkPkg/HttpBootDxe/HttpBootDhcp6.c
> @@ -399,10 +399,11 @@ HttpBootCacheDhcp6Offer (
> 
>    @retval EFI_SUCCESS           Told the EFI DHCPv6 Protocol driver to 
> continue
> the DHCP process.
>    @retval EFI_NOT_READY         Only used in the Dhcp6Selecting state. The 
> EFI
> DHCPv6 Protocol
>                                  driver will continue to wait for more 
> packets.
>    @retval EFI_ABORTED           Told the EFI DHCPv6 Protocol driver to abort 
> the
> current process.
> +  @retval EFI_OUT_OF_RESOURCES  There are not enough resources.
> 
>  **/
>  EFI_STATUS
>  EFIAPI
>  HttpBootDhcp6CallBack (
> @@ -449,11 +450,13 @@ HttpBootDhcp6CallBack (
>         Status = EFI_ABORTED;
>       } else {
>         ASSERT (NewPacket != NULL);
>         SelectAd   = &Private->OfferBuffer[Private->SelectIndex -
> 1].Dhcp6.Packet.Offer;
>         *NewPacket = AllocateZeroPool (SelectAd->Size);
> -       ASSERT (*NewPacket != NULL);
> +       if (*NewPacket == NULL) {
> +         return EFI_OUT_OF_RESOURCES;
> +       }
>         CopyMem (*NewPacket, SelectAd, SelectAd->Size);
>       }
>       break;
> 
>     default:
> diff --git a/NetworkPkg/IScsiDxe/IScsiConfig.c
> b/NetworkPkg/IScsiDxe/IScsiConfig.c
> index 69a4003..8f06a07 100644
> --- a/NetworkPkg/IScsiDxe/IScsiConfig.c
> +++ b/NetworkPkg/IScsiDxe/IScsiConfig.c
> @@ -1,9 +1,9 @@
>  /** @file
>    Helper functions for configuring or getting the parameters relating to 
> iSCSI.
> 
> -Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
>  This program and the accompanying materials  are licensed and made
> available under the terms and conditions of the BSD License  which
> accompanies this distribution.  The full text of the license may be found at
> http://opensource.org/licenses/bsd-license.php
> 
> @@ -1957,11 +1957,15 @@ IScsiFormExtractConfig (
>      // followed by "&OFFSET=0&WIDTH=WWWWWWWWWWWWWWWW"
> followed by a Null-terminator
>      //
>      ConfigRequestHdr = HiiConstructConfigHdr (&gIScsiConfigGuid,
> mVendorStorageName, Private->DriverHandle);
>      Size = (StrLen (ConfigRequestHdr) + 32 + 1) * sizeof (CHAR16);
>      ConfigRequest = AllocateZeroPool (Size);
> -    ASSERT (ConfigRequest != NULL);
> +    if (ConfigRequest == NULL) {
> +      FreePool (IfrNvData);
> +      FreePool (InitiatorName);
> +      return EFI_OUT_OF_RESOURCES;
> +    }
>      AllocatedRequest = TRUE;
>      UnicodeSPrint (ConfigRequest, Size, L"%s&OFFSET=0&WIDTH=%016LX",
> ConfigRequestHdr, (UINT64)BufferSize);
>      FreePool (ConfigRequestHdr);
>    }
> 
> diff --git a/NetworkPkg/IScsiDxe/IScsiDriver.c
> b/NetworkPkg/IScsiDxe/IScsiDriver.c
> index 5a121ce..285f151 100644
> --- a/NetworkPkg/IScsiDxe/IScsiDriver.c
> +++ b/NetworkPkg/IScsiDxe/IScsiDriver.c
> @@ -321,10 +321,11 @@ IScsiSupported (
>    @retval EFI_SUCCES            This driver was started.
>    @retval EFI_ALREADY_STARTED   This driver is already running on this
> device.
>    @retval EFI_INVALID_PARAMETER Any input parameter is invalid.
>    @retval EFI_NOT_FOUND         There is no sufficient information to 
> establish
>                                  the iScsi session.
> +  @retval EFI_OUT_OF_RESOURCES  Failed to allocate memory.
>    @retval EFI_DEVICE_ERROR      Failed to get TCP connection device path.
>    @retval EFI_ACCESS_DENIED     The protocol could not be removed from
> the Handle
>                                  because its interfaces are being used.
> 
>  **/
> diff --git a/NetworkPkg/IScsiDxe/IScsiMisc.c
> b/NetworkPkg/IScsiDxe/IScsiMisc.c index a1f2672..f19f36c 100644
> --- a/NetworkPkg/IScsiDxe/IScsiMisc.c
> +++ b/NetworkPkg/IScsiDxe/IScsiMisc.c
> @@ -1004,10 +1004,11 @@ IScsiDhcpIsConfigured (
> 
>    @param[in]  Private   The iSCSI driver data.
> 
>    @retval EFI_SUCCESS            The configuration data is retrieved.
>    @retval EFI_NOT_FOUND          This iSCSI driver is not configured yet.
> +  @retval EFI_OUT_OF_RESOURCES   Failed to allocate memory.
> 
>  **/
>  EFI_STATUS
>  IScsiGetConfigData (
>    IN ISCSI_DRIVER_DATA  *Private
> @@ -1290,11 +1291,13 @@ IScsiGetConfigData (
>                                                   
> mCallbackInfo->RegisteredHandle,
>                                                   0,
>                                                   mPrivate->PortString,
>                                                   NULL
>                                                   );
> -    ASSERT (AttemptConfigData->AttemptTitleHelpToken != 0);
> +    if (AttemptConfigData->AttemptTitleHelpToken == 0) {
> +      continue;
> +    }
> 
>      //
>      // Record the attempt in global link list.
>      //
>      InsertTailList (&mPrivate->AttemptConfigs, &AttemptConfigData->Link);
> diff --git a/NetworkPkg/IScsiDxe/IScsiProto.c
> b/NetworkPkg/IScsiDxe/IScsiProto.c
> index 4c4e3c2..c82290e 100644
> --- a/NetworkPkg/IScsiDxe/IScsiProto.c
> +++ b/NetworkPkg/IScsiDxe/IScsiProto.c
> @@ -1,9 +1,9 @@
>  /** @file
>    The implementation of iSCSI protocol based on RFC3720.
> 
> -Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
>  This program and the accompanying materials  are licensed and made
> available under the terms and conditions of the BSD License  which
> accompanies this distribution.  The full text of the license may be found at
> http://opensource.org/licenses/bsd-license.php
> 
> @@ -729,11 +729,14 @@ IScsiPrepareLoginReq (
>    if (Nbuf == NULL) {
>      return NULL;
>    }
> 
>    LoginReq = (ISCSI_LOGIN_REQUEST *) NetbufAllocSpace (Nbuf, sizeof
> (ISCSI_LOGIN_REQUEST), NET_BUF_TAIL);
> -  ASSERT (LoginReq != NULL);
> +  if (LoginReq == NULL) {
> +    NetbufFree (Nbuf);
> +    return NULL;
> +  }
>    ZeroMem (LoginReq, sizeof (ISCSI_LOGIN_REQUEST));
> 
>    //
>    // Init the login request pdu
>    //
> @@ -1243,11 +1246,14 @@ IScsiReceivePdu (
>      Status = EFI_OUT_OF_RESOURCES;
>      goto ON_EXIT;
>    }
> 
>    Header = NetbufAllocSpace (PduHdr, Len, NET_BUF_TAIL);
> -  ASSERT (Header != NULL);
> +  if (Header == NULL) {
> +    Status = EFI_OUT_OF_RESOURCES;
> +    goto ON_EXIT;
> +  }
>    InsertTailList (NbufList, &PduHdr->List);
> 
>    //
>    // First step, receive the BHS of the PDU.
>    //
> @@ -2314,11 +2320,14 @@ IScsiNewDataOutPdu (
>    // Insert the BHS into the buffer list.
>    //
>    InsertTailList (NbufList, &PduHdr->List);
> 
>    DataOutHdr  = (ISCSI_SCSI_DATA_OUT *) NetbufAllocSpace (PduHdr, sizeof
> (ISCSI_SCSI_DATA_OUT), NET_BUF_TAIL);
> -  ASSERT (DataOutHdr != NULL);
> +  if (DataOutHdr == NULL) {
> +    IScsiFreeNbufList (NbufList);
> +    return NULL;
> +  }
>    XferContext = &Tcb->XferContext;
> 
>    ZeroMem (DataOutHdr, sizeof (ISCSI_SCSI_DATA_OUT));
> 
>    //
> --
> 1.9.5.msysgit.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to