Page MenuHomeFreeBSD

D13155.id35911.diff
No OneTemporary

D13155.id35911.diff

Index: sys/vm/vm_map.c
===================================================================
--- sys/vm/vm_map.c
+++ sys/vm/vm_map.c
@@ -1499,6 +1499,9 @@
vm_prot_t prot, vm_prot_t max, int cow)
{
vm_offset_t alignment, initial_addr, start;
+#ifdef INVARIANTS
+ vm_offset_t prev_start;
+#endif
int result;
KASSERT((cow & (MAP_STACK_GROWS_DOWN | MAP_STACK_GROWS_UP)) == 0 ||
@@ -1515,6 +1518,7 @@
initial_addr = *addr;
vm_map_lock(map);
again:
+ result = KERN_SUCCESS;
start = initial_addr;
do {
if (find_space != VMFS_NO_SPACE) {
@@ -1542,9 +1546,14 @@
}
break;
}
-
+ if (*addr < start || *addr + length < *addr ||
+ *addr + length < length) {
+ vm_map_unlock(map);
+ return (KERN_NO_SPACE);
+ }
start = *addr;
}
+ MPASS(result == KERN_SUCCESS || prev_start < start);
if ((cow & (MAP_STACK_GROWS_DOWN | MAP_STACK_GROWS_UP)) != 0) {
result = vm_map_stack_locked(map, start, length,
sgrowsiz, prot, max, cow);
@@ -1552,6 +1561,9 @@
result = vm_map_insert(map, object, offset, start,
start + length, prot, max, cow);
}
+#ifdef INVARIANTS
+ prev_start = start;
+#endif
} while (result == KERN_NO_SPACE && find_space != VMFS_NO_SPACE &&
find_space != VMFS_ANY_SPACE);
vm_map_unlock(map);

File Metadata

Mime Type
text/plain
Expires
Mon, Aug 17, 7:43 PM (15 h, 57 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
36842521
Default Alt Text
D13155.id35911.diff (1 KB)

Event Timeline