From owner-svn-src-all@FreeBSD.ORG Fri Aug 6 15:04:02 2010 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 195DB10656E8; Fri, 6 Aug 2010 15:04:02 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 083408FC1B; Fri, 6 Aug 2010 15:04:02 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o76F41P3049142; Fri, 6 Aug 2010 15:04:01 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o76F41No049140; Fri, 6 Aug 2010 15:04:01 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201008061504.o76F41No049140@svn.freebsd.org> From: Jung-uk Kim Date: Fri, 6 Aug 2010 15:04:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r210934 - head/sys/compat/x86bios X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Aug 2010 15:04:02 -0000 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;