amd/agesa/f1?/Lib/amdlib.c: Integer overflow in loop construct
The semantics of this loop relies on an integer overflow in Index >=0 that implies a return value of (UINT8)-1 which around wraps to 0xFF, or VOLT_UNSUPPORTED. Change-Id: I44d68973d0a80093350b2a8a4d3b46bfbb57917a Signed-off-by: Edward O'Callaghan <eocallaghan@alterapraxis.com> Reviewed-on: http://review.coreboot.org/5801 Tested-by: build bot (Jenkins) Reviewed-by: Marc Jones <marc.jones@se-eng.com>
This commit is contained in:
parent
2c9e370646
commit
3312ed7e7a
|
@ -344,11 +344,11 @@ LibAmdBitScanReverse (
|
||||||
IN UINT32 value
|
IN UINT32 value
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN Index;
|
UINT8 Index;
|
||||||
for (Index = 31; Index >= 0; Index--){
|
for (Index = 31; Index >= 0; Index--){
|
||||||
if (value & (1 << Index)) break;
|
if (value & (1 << Index)) return Index;
|
||||||
}
|
}
|
||||||
return (UINT8) Index;
|
return 0xFF;
|
||||||
}
|
}
|
||||||
VOID
|
VOID
|
||||||
LibAmdMsrRead (
|
LibAmdMsrRead (
|
||||||
|
|
|
@ -348,11 +348,11 @@ LibAmdBitScanReverse (
|
||||||
IN UINT32 value
|
IN UINT32 value
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN Index;
|
UINT8 Index;
|
||||||
for (Index = 31; Index >= 0; Index--){
|
for (Index = 31; Index >= 0; Index--){
|
||||||
if (value & (1 << Index)) break;
|
if (value & (1 << Index)) return Index;
|
||||||
}
|
}
|
||||||
return (UINT8) Index;
|
return 0xFF;
|
||||||
}
|
}
|
||||||
VOID
|
VOID
|
||||||
LibAmdMsrRead (
|
LibAmdMsrRead (
|
||||||
|
|
|
@ -348,11 +348,11 @@ LibAmdBitScanReverse (
|
||||||
IN UINT32 value
|
IN UINT32 value
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN Index;
|
UINT8 Index;
|
||||||
for (Index = 31; Index >= 0; Index--){
|
for (Index = 31; Index >= 0; Index--){
|
||||||
if (value & (1 << Index)) break;
|
if (value & (1 << Index)) return Index;
|
||||||
}
|
}
|
||||||
return (UINT8) Index;
|
return 0xFF;
|
||||||
}
|
}
|
||||||
VOID
|
VOID
|
||||||
LibAmdMsrRead (
|
LibAmdMsrRead (
|
||||||
|
|
|
@ -348,11 +348,11 @@ LibAmdBitScanReverse (
|
||||||
IN UINT32 value
|
IN UINT32 value
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN Index;
|
UINT8 Index;
|
||||||
for (Index = 31; Index >= 0; Index--){
|
for (Index = 31; Index >= 0; Index--){
|
||||||
if (value & (1 << Index)) break;
|
if (value & (1 << Index)) return Index;
|
||||||
}
|
}
|
||||||
return (UINT8) Index;
|
return 0xFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
UINT64
|
UINT64
|
||||||
|
|
|
@ -359,11 +359,11 @@ LibAmdBitScanReverse (
|
||||||
IN UINT32 value
|
IN UINT32 value
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN Index;
|
UINT8 Index;
|
||||||
for (Index = 31; Index >= 0; Index--){
|
for (Index = 31; Index >= 0; Index--){
|
||||||
if (value & (1 << Index)) break;
|
if (value & (1 << Index)) return Index;
|
||||||
}
|
}
|
||||||
return (UINT8) Index;
|
return 0xFF;
|
||||||
}
|
}
|
||||||
VOID
|
VOID
|
||||||
LibAmdMsrRead (
|
LibAmdMsrRead (
|
||||||
|
|
Loading…
Reference in New Issue