svn commit: r325037 - stable/10/sys/vm
Mark Johnston
markj at FreeBSD.org
Fri Oct 27 14:23:54 UTC 2017
Author: markj
Date: Fri Oct 27 14:23:53 2017
New Revision: 325037
URL: https://svnweb.freebsd.org/changeset/base/325037
Log:
MFC r324809:
Free the right address range if kmem_back() fails in memguard_alloc().
Modified:
stable/10/sys/vm/memguard.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/vm/memguard.c
==============================================================================
--- stable/10/sys/vm/memguard.c Fri Oct 27 14:22:56 2017 (r325036)
+++ stable/10/sys/vm/memguard.c Fri Oct 27 14:23:53 2017 (r325037)
@@ -284,7 +284,7 @@ v2sizev(vm_offset_t va)
void *
memguard_alloc(unsigned long req_size, int flags)
{
- vm_offset_t addr;
+ vm_offset_t addr, origaddr;
u_long size_p, size_v;
int do_guard, rv;
@@ -328,7 +328,7 @@ memguard_alloc(unsigned long req_size, int flags)
for (;;) {
if (vmem_xalloc(memguard_arena, size_v, 0, 0, 0,
memguard_cursor, VMEM_ADDR_MAX,
- M_BESTFIT | M_NOWAIT, &addr) == 0)
+ M_BESTFIT | M_NOWAIT, &origaddr) == 0)
break;
/*
* The map has no space. This may be due to
@@ -343,11 +343,12 @@ memguard_alloc(unsigned long req_size, int flags)
memguard_wrap++;
memguard_cursor = memguard_base;
}
+ addr = origaddr;
if (do_guard)
addr += PAGE_SIZE;
rv = kmem_back(kmem_object, addr, size_p, flags);
if (rv != KERN_SUCCESS) {
- vmem_xfree(memguard_arena, addr, size_v);
+ vmem_xfree(memguard_arena, origaddr, size_v);
memguard_fail_pgs++;
addr = (vm_offset_t)NULL;
goto out;
More information about the svn-src-all
mailing list