diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c --- a/sys/vm/vm_map.c +++ b/sys/vm/vm_map.c @@ -1415,7 +1415,9 @@ KASSERT(entry->end < root->end, ("%s: clip_start not within entry", __func__)); vm_map_splay_findprev(root, &llist); - root->offset += entry->end - root->start; + if ((root->eflags & (MAP_ENTRY_STACK_GAP_DN | + MAP_ENTRY_STACK_GAP_UP)) == 0) + root->offset += entry->end - root->start; root->start = entry->end; max_free_left = vm_map_splay_merge_pred(header, entry, llist); max_free_right = root->max_free = vm_size_max( @@ -1431,7 +1433,9 @@ KASSERT(entry->end == root->end, ("%s: clip_start not within entry", __func__)); vm_map_splay_findnext(root, &rlist); - entry->offset += entry->start - root->start; + if ((entry->eflags & (MAP_ENTRY_STACK_GAP_DN | + MAP_ENTRY_STACK_GAP_UP)) == 0) + entry->offset += entry->start - root->start; root->end = entry->start; max_free_left = root->max_free = vm_size_max( vm_map_splay_merge_left(header, root, llist), @@ -3105,7 +3109,8 @@ entry = vm_map_entry_succ(entry)) { vm_offset_t useEnd, useStart; - if ((entry->eflags & MAP_ENTRY_IS_SUB_MAP) != 0) + if ((entry->eflags & (MAP_ENTRY_IS_SUB_MAP | + MAP_ENTRY_GUARD)) != 0) continue; /*