svn commit: r210934 - head/sys/compat/x86bios
Jung-uk Kim
jkim at FreeBSD.org
Fri Aug 6 15:04:02 UTC 2010
Author: jkim
Date: Fri Aug 6 15:04:01 2010
New Revision: 210934
URL: http://svn.freebsd.org/changeset/base/210934
Log:
Fix allocation of multiple pages, which forgot to increase page number.
Particularly, it caused "vm86_addpage: overlap" panics under VirtualBox.
Add a safety check before freeing memory while I am here.
Modified:
head/sys/compat/x86bios/x86bios.c
Modified: head/sys/compat/x86bios/x86bios.c
==============================================================================
--- head/sys/compat/x86bios/x86bios.c Fri Aug 6 14:33:42 2010 (r210933)
+++ head/sys/compat/x86bios/x86bios.c Fri Aug 6 15:04:01 2010 (r210934)
@@ -121,7 +121,7 @@ x86bios_alloc(uint32_t *offset, size_t s
*offset = vtophys(addr);
mtx_lock(&x86bios_lock);
for (i = 0; i < howmany(size, PAGE_SIZE); i++)
- vm86_addpage(&x86bios_vmc, atop(*offset),
+ vm86_addpage(&x86bios_vmc, atop(*offset) + i,
addr + i * PAGE_SIZE);
mtx_unlock(&x86bios_lock);
}
@@ -142,6 +142,10 @@ x86bios_free(void *addr, size_t size)
sizeof(x86bios_vmc.pmap[i]));
last = i;
}
+ if (last < 0) {
+ mtx_unlock(&x86bios_lock);
+ return;
+ }
if (last == x86bios_vmc.npages - 1) {
x86bios_vmc.npages -= howmany(size, PAGE_SIZE);
for (i = x86bios_vmc.npages - 1;
More information about the svn-src-head
mailing list