Skip to content

Commit

Permalink
NetworkPkg/HttpDxe: Track HttpInstance URL buffer length.
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
SaloniKasbekar authored and mergify[bot] committed Jul 11, 2024
1 parent 071d2cf commit 5c86b0b
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 7 deletions.
12 changes: 8 additions & 4 deletions NetworkPkg/HttpDxe/HttpImpl.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/** @file
Implementation of EFI_HTTP_PROTOCOL protocol interfaces.
Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
(C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR>
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>
Expand Down Expand Up @@ -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);
Expand Down
6 changes: 4 additions & 2 deletions NetworkPkg/HttpDxe/HttpProto.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/** @file
Miscellaneous routines for HttpDxe driver.
Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
Expand Down Expand Up @@ -738,6 +738,7 @@ HttpInitProtocol (
goto ON_ERROR;
}

HttpInstance->UrlLen = HTTP_URL_BUFFER_LEN;
return EFI_SUCCESS;

ON_ERROR:
Expand Down Expand Up @@ -847,7 +848,8 @@ HttpCleanProtocol (

if (HttpInstance->Url != NULL) {
FreePool (HttpInstance->Url);
HttpInstance->Url = NULL;
HttpInstance->Url = NULL;
HttpInstance->UrlLen = 0;
}

NetMapClean (&HttpInstance->TxTokens);
Expand Down
3 changes: 2 additions & 1 deletion NetworkPkg/HttpDxe/HttpProto.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/** @file
The header files of miscellaneous routines for HttpDxe driver.
Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
Expand Down Expand Up @@ -165,6 +165,7 @@ typedef struct _HTTP_PROTOCOL {
NET_MAP RxTokens;

CHAR8 *Url;
UINTN UrlLen;

//
// Https Support
Expand Down

0 comments on commit 5c86b0b

Please sign in to comment.