Cc Samer and Nagaraj.
I saw them with "git sent-email --dry-run". Wonder how they were dropped.

Gary Lin

On Thu, May 19, 2016 at 11:49:17AM +0800, Gary Lin wrote:
> The HTTP Token Wrap is created in EfiHttpResponse() and then passed
> to the deferred Receive event callback, HttpTcpReceiveNotifyDpc.
> HttpTcpReceiveHeader and HttpTcpReceiveBody use a Tcp polling loop to
> monitor the socket status and trigger the Receive event when a new
> packet arrives. The Receive event brings up HttpTcpReceiveNotifyDpc
> to process the HTTP message and the function will set Wrap->TcpWrap.IsRxDone
> to TRUE to break the Tcp polling loop.
> 
> However, HttpTcpReceiveNotifyDpc mistakenly freed Wrap, so the Tcp
> polling loop was actually checking a dead variable, and this led the
> system into an unstable status.
> 
> Given the fact that the HTTP Token Wrap will be freed in EfiHttpResponse
> or HttpResponseWorker, this commit removes every "FreePool (Wrap)" in
> HttpTcpReceiveNotifyDpc.
> 
> Cc: "Wu, Jiaxin" <jiaxin...@intel.com>
> Cc: "Siyuan Fu" <siyuan...@intel.com>
> Cc: "El-Haj-Mahmoud, Samer" <samer.el-haj-mahm...@hpe.com>
> Cc: "Laszlo Ersek" <ler...@redhat.com>
> Cc: "Hegde, Nagaraj P" <nagaraj-p.he...@hpe.com>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Gary Lin <g...@suse.com>
> ---
>  NetworkPkg/HttpDxe/HttpProto.c | 4 ----
>  1 file changed, 4 deletions(-)
> 
> diff --git a/NetworkPkg/HttpDxe/HttpProto.c b/NetworkPkg/HttpDxe/HttpProto.c
> index f3992ed..afa7fe4 100644
> --- a/NetworkPkg/HttpDxe/HttpProto.c
> +++ b/NetworkPkg/HttpDxe/HttpProto.c
> @@ -152,7 +152,6 @@ HttpTcpReceiveNotifyDpc (
>      if (EFI_ERROR (Wrap->TcpWrap.Rx6Token.CompletionToken.Status)) {
>        Wrap->HttpToken->Status = 
> Wrap->TcpWrap.Rx6Token.CompletionToken.Status;
>        gBS->SignalEvent (Wrap->HttpToken->Event);
> -      FreePool (Wrap);
>        return ;
>      }
>  
> @@ -162,7 +161,6 @@ HttpTcpReceiveNotifyDpc (
>      if (EFI_ERROR (Wrap->TcpWrap.Rx4Token.CompletionToken.Status)) {
>        Wrap->HttpToken->Status = 
> Wrap->TcpWrap.Rx4Token.CompletionToken.Status;
>        gBS->SignalEvent (Wrap->HttpToken->Event);
> -      FreePool (Wrap);
>        return ;
>      }
>    }
> @@ -234,8 +232,6 @@ HttpTcpReceiveNotifyDpc (
>    // Check pending RxTokens and receive the HTTP message.
>    //
>    NetMapIterate (&Wrap->HttpInstance->RxTokens, HttpTcpReceive, NULL);
> -  
> -  FreePool (Wrap);
>  }
>  
>  /**
> -- 
> 2.8.2
> 
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
> 
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to