One comment below.

With that fix,

Reviewed-by: Michael D Kinney <michael.d.kin...@intel.com>

Mike


> -----Original Message-----
> From: Albecki, Mateusz <mateusz.albe...@intel.com>
> Sent: Wednesday, September 27, 2023 8:51 AM
> To: devel@edk2.groups.io
> Cc: Albecki, Mateusz <mateusz.albe...@intel.com>; Kinney, Michael D
> <michael.d.kin...@intel.com>; Gao, Liming <gaolim...@byosoft.com.cn>;
> Liu, Zhiguang <zhiguang....@intel.com>
> Subject: [PATCHv2 1/2] MdePkg/UefiDevicePathLib: Fix AcpiEx print
> logic
> 
> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4555
> 
> 
> 
> Add logic that checks if the code doesn't overflow
> 
> ACPI_EXTENDED_HID_DEVICE_PATH node when searching for optional
> 
> strings. If the string is not provided in the device path node
> 
> default value of "\0" is used.
> 
> 
> 
> Cc: Michael D Kinney <michael.d.kin...@intel.com>
> 
> Cc: Liming Gao <gaolim...@byosoft.com.cn>
> 
> Cc: Zhiguang Liu <zhiguang....@intel.com>
> 
> 
> 
> Signed-off-by: Mateusz Albecki <mateusz.albe...@intel.com>
> 
> ---
> 
>  .../UefiDevicePathLib/DevicePathToText.c      | 69 +++++++++++-------
> -
> 
>  1 file changed, 42 insertions(+), 27 deletions(-)
> 
> 
> 
> diff --git a/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
> b/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
> 
> index dd90dfa58e..bd8d1de201 100644
> 
> --- a/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
> 
> +++ b/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
> 
> @@ -418,23 +418,38 @@ DevPathToTextAcpiEx (
> 
>    )
> 
>  {
> 
>    ACPI_EXTENDED_HID_DEVICE_PATH  *AcpiEx;
> 
> -  CHAR8                          *HIDStr;
> 
> -  CHAR8                          *UIDStr;
> 
> -  CHAR8                          *CIDStr;
> 
>    CHAR16                         HIDText[11];
> 
>    CHAR16                         CIDText[11];
> 
> -
> 
> -  AcpiEx = DevPath;
> 
> -  HIDStr = (CHAR8 *)(((UINT8 *)AcpiEx) + sizeof
> (ACPI_EXTENDED_HID_DEVICE_PATH));
> 
> -  UIDStr = HIDStr + AsciiStrLen (HIDStr) + 1;
> 
> -  CIDStr = UIDStr + AsciiStrLen (UIDStr) + 1;
> 
> +  UINTN                          CurrentLength;
> 
> +  CHAR8                          *CurrentPos;
> 
> +  UINTN                          NextStringOffset;
> 
> +  CHAR8                          *Strings[3];
> 
> +  CONST UINT8                    HidStrIndex = 0;
> 
> +  CONST UINT8                    UidStrIndex = 1;
> 
> +  CONST UINT8                    CidStrIndex = 2;

Locals should not be assigned to valued in declaration.  Please move value 
assignments down.

> 
> +  UINT8                          StrIndex;
> 
> +
> 
> +  AcpiEx               = DevPath;
> 
> +  Strings[HidStrIndex] = NULL;
> 
> +  Strings[UidStrIndex] = NULL;
> 
> +  Strings[CidStrIndex] = NULL;
> 
> +  CurrentLength        = sizeof (ACPI_EXTENDED_HID_DEVICE_PATH);
> 
> +  CurrentPos           = (CHAR8 *)(((UINT8 *)AcpiEx) + sizeof
> (ACPI_EXTENDED_HID_DEVICE_PATH));
> 
> +  StrIndex             = 0;
> 
> +  while (CurrentLength < AcpiEx->Header.Length[0] && StrIndex <
> ARRAY_SIZE (Strings)) {
> 
> +    Strings[StrIndex] = CurrentPos;
> 
> +    NextStringOffset  = AsciiStrLen (CurrentPos) + 1;
> 
> +    CurrentLength    += NextStringOffset;
> 
> +    CurrentPos       += NextStringOffset;
> 
> +    StrIndex++;
> 
> +  }
> 
> 
> 
>    if (DisplayOnly) {
> 
>      if ((EISA_ID_TO_NUM (AcpiEx->HID) == 0x0A03) ||
> 
>          ((EISA_ID_TO_NUM (AcpiEx->CID) == 0x0A03) && (EISA_ID_TO_NUM
> (AcpiEx->HID) != 0x0A08)))
> 
>      {
> 
> -      if (AcpiEx->UID == 0) {
> 
> -        UefiDevicePathLibCatPrint (Str, L"PciRoot(%a)", UIDStr);
> 
> +      if (Strings[UidStrIndex] != NULL) {
> 
> +        UefiDevicePathLibCatPrint (Str, L"PciRoot(%a)",
> Strings[UidStrIndex]);
> 
>        } else {
> 
>          UefiDevicePathLibCatPrint (Str, L"PciRoot(0x%x)", AcpiEx-
> >UID);
> 
>        }
> 
> @@ -443,8 +458,8 @@ DevPathToTextAcpiEx (
> 
>      }
> 
> 
> 
>      if ((EISA_ID_TO_NUM (AcpiEx->HID) == 0x0A08) || (EISA_ID_TO_NUM
> (AcpiEx->CID) == 0x0A08)) {
> 
> -      if (AcpiEx->UID == 0) {
> 
> -        UefiDevicePathLibCatPrint (Str, L"PcieRoot(%a)", UIDStr);
> 
> +      if (Strings[UidStrIndex] != NULL) {
> 
> +        UefiDevicePathLibCatPrint (Str, L"PcieRoot(%a)",
> Strings[UidStrIndex]);
> 
>        } else {
> 
>          UefiDevicePathLibCatPrint (Str, L"PcieRoot(0x%x)", AcpiEx-
> >UID);
> 
>        }
> 
> @@ -475,7 +490,10 @@ DevPathToTextAcpiEx (
> 
>      (AcpiEx->CID >> 16) & 0xFFFF
> 
>      );
> 
> 
> 
> -  if ((*HIDStr == '\0') && (*CIDStr == '\0') && (*UIDStr != '\0')) {
> 
> +  if (((Strings[HidStrIndex] != NULL) && (*Strings[HidStrIndex] ==
> '\0')) &&
> 
> +      ((Strings[CidStrIndex] != NULL) && (*Strings[CidStrIndex] ==
> '\0')) &&
> 
> +      ((Strings[UidStrIndex] != NULL) && (*Strings[UidStrIndex] !=
> '\0')))
> 
> +  {
> 
>      //
> 
>      // use AcpiExp()
> 
>      //
> 
> @@ -484,7 +502,7 @@ DevPathToTextAcpiEx (
> 
>          Str,
> 
>          L"AcpiExp(%s,0,%a)",
> 
>          HIDText,
> 
> -        UIDStr
> 
> +        Strings[UidStrIndex]
> 
>          );
> 
>      } else {
> 
>        UefiDevicePathLibCatPrint (
> 
> @@ -492,28 +510,25 @@ DevPathToTextAcpiEx (
> 
>          L"AcpiExp(%s,%s,%a)",
> 
>          HIDText,
> 
>          CIDText,
> 
> -        UIDStr
> 
> +        Strings[UidStrIndex]
> 
>          );
> 
>      }
> 
>    } else {
> 
>      if (DisplayOnly) {
> 
> -      //
> 
> -      // display only
> 
> -      //
> 
> -      if (AcpiEx->HID == 0) {
> 
> -        UefiDevicePathLibCatPrint (Str, L"AcpiEx(%a,", HIDStr);
> 
> +      if (Strings[HidStrIndex] != NULL) {
> 
> +        UefiDevicePathLibCatPrint (Str, L"AcpiEx(%a,",
> Strings[HidStrIndex]);
> 
>        } else {
> 
>          UefiDevicePathLibCatPrint (Str, L"AcpiEx(%s,", HIDText);
> 
>        }
> 
> 
> 
> -      if (AcpiEx->CID == 0) {
> 
> -        UefiDevicePathLibCatPrint (Str, L"%a,", CIDStr);
> 
> +      if (Strings[CidStrIndex] != NULL) {
> 
> +        UefiDevicePathLibCatPrint (Str, L"%a,",
> Strings[CidStrIndex]);
> 
>        } else {
> 
>          UefiDevicePathLibCatPrint (Str, L"%s,", CIDText);
> 
>        }
> 
> 
> 
> -      if (AcpiEx->UID == 0) {
> 
> -        UefiDevicePathLibCatPrint (Str, L"%a)", UIDStr);
> 
> +      if (Strings[UidStrIndex] != NULL) {
> 
> +        UefiDevicePathLibCatPrint (Str, L"%a)",
> Strings[UidStrIndex]);
> 
>        } else {
> 
>          UefiDevicePathLibCatPrint (Str, L"0x%x)", AcpiEx->UID);
> 
>        }
> 
> @@ -524,9 +539,9 @@ DevPathToTextAcpiEx (
> 
>          HIDText,
> 
>          CIDText,
> 
>          AcpiEx->UID,
> 
> -        HIDStr,
> 
> -        CIDStr,
> 
> -        UIDStr
> 
> +        Strings[HidStrIndex] != NULL ? Strings[HidStrIndex] : '\0',
> 
> +        Strings[CidStrIndex] != NULL ? Strings[CidStrIndex] : '\0',
> 
> +        Strings[UidStrIndex] != NULL ? Strings[UidStrIndex] : '\0'
> 
>          );
> 
>      }
> 
>    }
> 
> --
> 
> 2.39.2
> 
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#109595): https://edk2.groups.io/g/devel/message/109595
Mute This Topic: https://groups.io/mt/101619978/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: 
https://edk2.groups.io/g/devel/leave/9847357/21656/1706620634/xyzzy 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to