[syslinux] mboot.c32, weird e820 map on HP blade machine, possible memory corruption

Ram Yalamanchili ramy at stanford.edu
Fri Mar 10 17:46:20 PST 2006


I'm seeing this on a HP Blade and i'm not sure why this is happning since
the nature of the issue is so wierd.

I compiled mboot.c with a DEBUG defined in the mboot.c file. In the funciton
init_mmap(), it prints the e820 map and on the HP blade this map values come
out to be totally random. Some weird numbers which dont make any sense at
all.

However, if i add a while(1); or a exit(1); at the end of init_mmap()
function, I magically see the values of the e820 printed correctly! its
very weird why this may happen, and I haven't changed anything else in
mboot.c from syslinux-2.11 code.

Can someone think of anything?

Another thing is, the e820 buffer should be zeroed out since some bios'es
are buggy and dont overwrite the high doubleword of Length field of the
AddrRangeDesc. This is seen on the Dell Poweredge1800's.

So it should look like:

while(((void *)(e820 + 1)) < __com32.cs_bounce + __com32.cs_bounce_size)
{
      memset(e820, 0, sizeof(*e820));
      e820->size = sizeof(*e820) - sizeof(e820->size);
      ....

hope Tim, the maintainer can take care of this.

--
Ram




More information about the Syslinux mailing list