Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Aug 2010 15:04:01 +0000 (UTC)
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r210934 - head/sys/compat/x86bios
Message-ID:  <201008061504.o76F41No049140@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201008061504.o76F41No049140>