From 5c86b0b57c153bde28f925de80cc011dd4ff1f9d Mon Sep 17 00:00:00 2001 From: Saloni Kasbekar Date: Wed, 10 Jul 2024 14:44:50 -0700 Subject: NetworkPkg/HttpDxe: Track HttpInstance URL buffer length. In EfiHttpRequest(), length of target URLs was always compared to fixed-size value, even after allocating a larger URL buffer. Added UrlLen to HTTP_PROTOCOL to store the size and reallocate if the size changes. Signed-off-by: Saloni Kasbekar --- NetworkPkg/HttpDxe/HttpImpl.c | 12 ++++++++---- NetworkPkg/HttpDxe/HttpProto.c | 6 ++++-- NetworkPkg/HttpDxe/HttpProto.h | 3 ++- 3 files changed, 14 insertions(+), 7 deletions(-) (limited to 'NetworkPkg') diff --git a/NetworkPkg/HttpDxe/HttpImpl.c b/NetworkPkg/HttpDxe/HttpImpl.c index 6606c29342..9500f565d0 100644 --- a/NetworkPkg/HttpDxe/HttpImpl.c +++ b/NetworkPkg/HttpDxe/HttpImpl.c @@ -1,7 +1,7 @@ /** @file Implementation of EFI_HTTP_PROTOCOL protocol interfaces. - Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.
+ Copyright (c) 2015, Intel Corporation. All rights reserved.
(C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.
@@ -341,14 +341,18 @@ EfiHttpRequest ( // Url = HttpInstance->Url; UrlLen = StrLen (Request->Url) + 1; - if (UrlLen > HTTP_URL_BUFFER_LEN) { + if (UrlLen > HttpInstance->UrlLen) { Url = AllocateZeroPool (UrlLen); if (Url == NULL) { return EFI_OUT_OF_RESOURCES; } - FreePool (HttpInstance->Url); - HttpInstance->Url = Url; + if (HttpInstance->Url != NULL) { + FreePool (HttpInstance->Url); + } + + HttpInstance->Url = Url; + HttpInstance->UrlLen = UrlLen; } UnicodeStrToAsciiStrS (Request->Url, Url, UrlLen); diff --git a/NetworkPkg/HttpDxe/HttpProto.c b/NetworkPkg/HttpDxe/HttpProto.c index 9c3b497dce..75eb068010 100644 --- a/NetworkPkg/HttpDxe/HttpProto.c +++ b/NetworkPkg/HttpDxe/HttpProto.c @@ -1,7 +1,7 @@ /** @file Miscellaneous routines for HttpDxe driver. -Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.
+Copyright (c) 2015, Intel Corporation. All rights reserved.
(C) Copyright 2016 Hewlett Packard Enterprise Development LP
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -738,6 +738,7 @@ HttpInitProtocol ( goto ON_ERROR; } + HttpInstance->UrlLen = HTTP_URL_BUFFER_LEN; return EFI_SUCCESS; ON_ERROR: @@ -847,7 +848,8 @@ HttpCleanProtocol ( if (HttpInstance->Url != NULL) { FreePool (HttpInstance->Url); - HttpInstance->Url = NULL; + HttpInstance->Url = NULL; + HttpInstance->UrlLen = 0; } NetMapClean (&HttpInstance->TxTokens); diff --git a/NetworkPkg/HttpDxe/HttpProto.h b/NetworkPkg/HttpDxe/HttpProto.h index 7e77b389a7..e49d2a229a 100644 --- a/NetworkPkg/HttpDxe/HttpProto.h +++ b/NetworkPkg/HttpDxe/HttpProto.h @@ -1,7 +1,7 @@ /** @file The header files of miscellaneous routines for HttpDxe driver. -Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.
+Copyright (c) 2015, Intel Corporation. All rights reserved.
(C) Copyright 2016 Hewlett Packard Enterprise Development LP
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -165,6 +165,7 @@ typedef struct _HTTP_PROTOCOL { NET_MAP RxTokens; CHAR8 *Url; + UINTN UrlLen; // // Https Support -- cgit v1.2.3