From 91f1ce4e27649e8e6911a505539b137302f1b02d Mon Sep 17 00:00:00 2001 From: Mike Maslenkin Date: Thu, 14 Dec 2023 01:33:55 +0300 Subject: RedfishDiscoverDxe: handle memory allocation error conditions. REF:https://bugzilla.tianocore.org/show_bug.cgi?id=4625 Cc: Nickle Wang Cc: Igor Kulchytskyy Signed-off-by: Mike Maslenkin Reviewed-by: Abner Chang --- RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c | 89 +++++++++++++++++++--- 1 file changed, 78 insertions(+), 11 deletions(-) diff --git a/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c b/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c index 0a56a68bb1..33730888a4 100644 --- a/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c +++ b/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c @@ -791,38 +791,105 @@ InitInformationData ( if (RedfishLocation != NULL) { AllocationSize = AsciiStrSize (RedfishLocation) * sizeof (CHAR16); Information->Location = AllocatePool (AllocationSize); - AsciiStrToUnicodeStrS (RedfishLocation, Information->Location, AllocationSize); - DEBUG ((DEBUG_MANAGEABILITY, "Redfish service location: %s.\n", Information->Location)); + if (Information->Location != NULL) { + AsciiStrToUnicodeStrS (RedfishLocation, Information->Location, AllocationSize); + DEBUG ((DEBUG_MANAGEABILITY, "Redfish service location: %s.\n", Information->Location)); + } else { + DEBUG (( + DEBUG_ERROR, + "%a: Can not allocate memory for Redfish service location: %a.\n", + __func__, + RedfishLocation + )); + } } if (Uuid != NULL) { AllocationSize = AsciiStrSize (Uuid) * sizeof (CHAR16); Information->Uuid = AllocatePool (AllocationSize); - AsciiStrToUnicodeStrS (Uuid, Information->Uuid, AllocationSize); - DEBUG ((DEBUG_MANAGEABILITY, "Service UUID: %s.\n", Information->Uuid)); + if (Information->Uuid != NULL) { + AsciiStrToUnicodeStrS (Uuid, Information->Uuid, AllocationSize); + DEBUG ((DEBUG_MANAGEABILITY, "Service UUID: %s.\n", Information->Uuid)); + } else { + DEBUG (( + DEBUG_ERROR, + "%a: Can not allocate memory for Service UUID: %a.\n", + __func__, + Uuid + )); + } } if (Os != NULL) { AllocationSize = AsciiStrSize (Os) * sizeof (CHAR16); Information->Os = AllocatePool (AllocationSize); - AsciiStrToUnicodeStrS (Os, Information->Os, AllocationSize); + if (Information->Os != NULL) { + AsciiStrToUnicodeStrS (Os, Information->Os, AllocationSize); + } else { + DEBUG (( + DEBUG_ERROR, + "%a: Can not allocate memory for Redfish service OS: %a.\n", + __func__, + Os + )); + } } if (OsVer != NULL) { AllocationSize = AsciiStrSize (OsVer) * sizeof (CHAR16); Information->OsVersion = AllocatePool (AllocationSize); - AsciiStrToUnicodeStrS (OsVer, Information->OsVersion, AllocationSize); - DEBUG ((DEBUG_MANAGEABILITY, "Redfish service OS: %s, Version:%s.\n", Information->Os, Information->OsVersion)); + if (Information->OsVersion != NULL) { + AsciiStrToUnicodeStrS (OsVer, Information->OsVersion, AllocationSize); + DEBUG (( + DEBUG_MANAGEABILITY, + "Redfish service OS: %s, Version:%s.\n", + Information->Os, + Information->OsVersion + )); + } else { + DEBUG (( + DEBUG_ERROR, + "%a: Can not allocate memory for Redfish OS Version:%a.\n", + __func__, + OsVer + )); + } } - if ((Product != NULL) && (ProductVer != NULL)) { + if (Product != NULL) { AllocationSize = AsciiStrSize (Product) * sizeof (CHAR16); Information->Product = AllocatePool (AllocationSize); - AsciiStrToUnicodeStrS (Product, Information->Product, AllocationSize); + if (Information->Product != NULL) { + AsciiStrToUnicodeStrS (Product, Information->Product, AllocationSize); + } else { + DEBUG (( + DEBUG_ERROR, + "%a: Can not allocate memory for Redfish service product: %a.\n", + __func__, + Product + )); + } + } + + if (ProductVer != NULL) { AllocationSize = AsciiStrSize (ProductVer) * sizeof (CHAR16); Information->ProductVer = AllocatePool (AllocationSize); - AsciiStrToUnicodeStrS (ProductVer, Information->ProductVer, AllocationSize); - DEBUG ((DEBUG_MANAGEABILITY, "Redfish service product: %s, Version:%s.\n", Information->Product, Information->ProductVer)); + if (Information->ProductVer != NULL) { + AsciiStrToUnicodeStrS (ProductVer, Information->ProductVer, AllocationSize); + DEBUG (( + DEBUG_MANAGEABILITY, + "Redfish service product: %s, Version:%s.\n", + Information->Product, + Information->ProductVer + )); + } else { + DEBUG (( + DEBUG_ERROR, + "%a: Can not allocate memory for Redfish service product Version: %a.\n", + __func__, + ProductVer + )); + } } } -- cgit v1.2.3