Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[relocate] Guard against systems that report empty memory regions
If the INT 15,e820 memory map reports a region [0,0), this confuses
the "truncate to even megabytes" logic, which ends up rounding the
region 'down' to [0,fff00000).

Fix by ensuring that the region's end address is at least 1, before we
subtract 1 to obtain the "last byte in region" address.
  • Loading branch information
Michael Brown committed Sep 23, 2008
1 parent 0fd1e54 commit ca0b0f0
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions src/arch/i386/core/relocate.c
Expand Up @@ -93,11 +93,16 @@ __cdecl void relocate ( struct i386_all_regs *ix86 ) {
/* If last byte that might be used (r_end-1)
* is in an odd megabyte, round down r_end to
* the top of the next even megabyte.
*
* Make sure that we don't accidentally wrap
* r_end below 0.
*/
r_end = ( r_end - 1 ) & ~0xfffff;
DBG ( "...end truncated to %lx "
"(avoid ending in odd megabyte)\n",
r_end );
if ( r_end >= 1 ) {
r_end = ( r_end - 1 ) & ~0xfffff;
DBG ( "...end truncated to %lx "
"(avoid ending in odd megabyte)\n",
r_end );
}
} else if ( ( r_end - size ) & 0x100000 ) {
/* If the last byte that might be used
* (r_end-1) is in an even megabyte, but the
Expand All @@ -108,7 +113,7 @@ __cdecl void relocate ( struct i386_all_regs *ix86 ) {
* Make sure that we don't accidentally wrap
* r_end below 0.
*/
if ( r_end > 0x100000 ) {
if ( r_end >= 0x100000 ) {
r_end = ( r_end - 0x100000 ) & ~0xfffff;
DBG ( "...end truncated to %lx "
"(avoid starting in odd megabyte)\n",
Expand Down

0 comments on commit ca0b0f0

Please sign in to comment.