How about below fix? I think it might be simpler to understand and doesn't
introduce unnecessary logic to handle impossible case:
if (ResizableBarOp == PciResizableBarMax) {
Bit = HighBitSet64(Capabilities);
} else {
ASSERT (ResizableBarOp == PciResizableBarMin);
Bit = LowBitSet64(Capabilities);
}
> -----Original Message-----
> From: Sergei Dmitrouk <[email protected]>
> Sent: Friday, May 14, 2021 8:17 PM
> To: [email protected]
> Cc: Wang, Jian J <[email protected]>; Wu, Hao A <[email protected]>;
> Ni, Ray <[email protected]>
> Subject: [PATCH v1 2/3] MdeModulePkg/PciBusDxe: Fix possible uninitialized
> use
>
> If the function gets invalid value for the `ResizableBarOp` parameter
> and asserts are disabled, `Bit` can be used uninitialized.
>
> Cc: Jian J Wang <[email protected]>
> Cc: Hao A Wu <[email protected]>
> Cc: Ray Ni <[email protected]>
> Signed-off-by: Sergei Dmitrouk <[email protected]>
> ---
> MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c
> b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c
> index 6bba28367165..de601713a53b 100644
> --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c
> +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c
> @@ -1781,6 +1781,11 @@ PciProgramResizableBar (
> } else if (ResizableBarOp == PciResizableBarMin) {
> Bit = LowBitSet64(Capabilities);
> } else {
> + //
> + // Set Bit to avoid uninitialized use when built without assertions.
> + //
> + Bit = 0;
> +
> ASSERT ((ResizableBarOp == PciResizableBarMax) || (ResizableBarOp ==
> PciResizableBarMin));
> }
>
> --
> 2.17.6
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#75158): https://edk2.groups.io/g/devel/message/75158
Mute This Topic: https://groups.io/mt/82822573/21656
Group Owner: [email protected]
Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-