From e9f5d8c0e066da55b3f79dfdbf4df5fc97ca5916 Mon Sep 17 00:00:00 2001 From: Ranbir Singh Date: Wed, 16 Aug 2023 13:38:02 +0800 Subject: MdeModulePkg/Bus/Pci/UhciDxe: Fix BAD_SHIFT Coverity issue The function UhciConvertPollRate has a check ASSERT (Interval != 0); but this comes into play only in DEBUG mode. In Release mode, there is no handling if the Interval parameter value is ZERO. To avoid shifting by a negative amount later in the code flow in this undesirable case, it is better to handle it as well by treating it same as if 1 is sent. REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4211 Cc: Hao A Wu Cc: Ray Ni Co-authored-by: Veeresh Sangolli Signed-off-by: Ranbir Singh Signed-off-by: Ranbir Singh Reviewed-by: Hao A Wu --- MdeModulePkg/Bus/Pci/UhciDxe/UhciSched.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'MdeModulePkg') diff --git a/MdeModulePkg/Bus/Pci/UhciDxe/UhciSched.c b/MdeModulePkg/Bus/Pci/UhciDxe/UhciSched.c index c08f949696..408e7d5ab7 100644 --- a/MdeModulePkg/Bus/Pci/UhciDxe/UhciSched.c +++ b/MdeModulePkg/Bus/Pci/UhciDxe/UhciSched.c @@ -197,7 +197,7 @@ UhciDestoryFrameList ( } /** - Convert the poll rate to the maxium 2^n that is smaller + Convert the poll rate to the maximum 2^n that is smaller than Interval. @param Interval The poll rate to convert. @@ -214,6 +214,14 @@ UhciConvertPollRate ( ASSERT (Interval != 0); + // + // To safeguard RELEASE mode wherein ASSERT is effectively not there, + // if inadvertently Interval is still 0 here, treat it the same as 1. + // + if (Interval == 0) { + Interval = 1; + } + // // Find the index (1 based) of the highest non-zero bit // -- cgit v1.2.3