Check the EBDA is mapped before accessing it.
authorMichał Januszewski <spock@gentoo.org>
Wed, 27 Jan 2010 19:40:03 +0000 (27 20:40 +0100)
committerMichał Januszewski <spock@gentoo.org>
Wed, 27 Jan 2010 19:40:03 +0000 (27 20:40 +0100)
The EBDA is the one region of memory which may not be mapped.  If this is
the case, and someone tries to access it, emit a proper warning.  Thanks
to Enrico Perla for spotting the problem.

v86_mem.c

index 23eb7c0..c492e92 100644 (file)
--- a/v86_mem.c
+++ b/v86_mem.c
@@ -44,7 +44,7 @@ void *vptr(u32 addr) {
                return (mem_vram + addr - VRAM_BASE);
        else if (addr < IVTBDA_SIZE)
                return (mem_low + addr);
-       else if (addr >= ebda_start && addr < ebda_start + ebda_size)
+       else if (mem_ebda && addr >= ebda_start && addr < ebda_start + ebda_size)
                return (mem_ebda + addr - ebda_start + ebda_diff);
        else {
                ulog(LOG_WARNING, "Trying to access an unsupported memory region at %x", addr);