Changeset View
Changeset View
Standalone View
Standalone View
sys/vm/vm_map.c
Show First 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | |||||
/* | /* | ||||
* Virtual memory mapping module. | * Virtual memory mapping module. | ||||
*/ | */ | ||||
#include <sys/cdefs.h> | #include <sys/cdefs.h> | ||||
__FBSDID("$FreeBSD$"); | __FBSDID("$FreeBSD$"); | ||||
#include "opt_pax.h" | |||||
#include <sys/param.h> | #include <sys/param.h> | ||||
#include <sys/systm.h> | #include <sys/systm.h> | ||||
#include <sys/kernel.h> | #include <sys/kernel.h> | ||||
#include <sys/ktr.h> | #include <sys/ktr.h> | ||||
#include <sys/lock.h> | #include <sys/lock.h> | ||||
#include <sys/mutex.h> | #include <sys/mutex.h> | ||||
#include <sys/proc.h> | #include <sys/proc.h> | ||||
#include <sys/vmmeter.h> | #include <sys/vmmeter.h> | ||||
▲ Show 20 Lines • Show All 216 Lines • ▼ Show 20 Lines | vmspace_alloc(vm_offset_t min, vm_offset_t max, pmap_pinit_t pinit) | ||||
vm->vm_shm = NULL; | vm->vm_shm = NULL; | ||||
vm->vm_swrss = 0; | vm->vm_swrss = 0; | ||||
vm->vm_tsize = 0; | vm->vm_tsize = 0; | ||||
vm->vm_dsize = 0; | vm->vm_dsize = 0; | ||||
vm->vm_ssize = 0; | vm->vm_ssize = 0; | ||||
vm->vm_taddr = 0; | vm->vm_taddr = 0; | ||||
vm->vm_daddr = 0; | vm->vm_daddr = 0; | ||||
vm->vm_maxsaddr = 0; | vm->vm_maxsaddr = 0; | ||||
#ifdef PAX_ASLR | |||||
vm->vm_aslr_delta_mmap = 0; | |||||
vm->vm_aslr_delta_stack = 0; | |||||
vm->vm_aslr_delta_exec = 0; | |||||
#endif | |||||
return (vm); | return (vm); | ||||
} | } | ||||
static void | static void | ||||
vmspace_container_reset(struct proc *p) | vmspace_container_reset(struct proc *p) | ||||
{ | { | ||||
#ifdef RACCT | #ifdef RACCT | ||||
▲ Show 20 Lines • Show All 2,947 Lines • ▼ Show 20 Lines | vmspace_fork(struct vmspace *vm1, vm_ooffset_t *fork_charge) | ||||
old_map = &vm1->vm_map; | old_map = &vm1->vm_map; | ||||
/* Copy immutable fields of vm1 to vm2. */ | /* Copy immutable fields of vm1 to vm2. */ | ||||
vm2 = vmspace_alloc(old_map->min_offset, old_map->max_offset, NULL); | vm2 = vmspace_alloc(old_map->min_offset, old_map->max_offset, NULL); | ||||
if (vm2 == NULL) | if (vm2 == NULL) | ||||
return (NULL); | return (NULL); | ||||
vm2->vm_taddr = vm1->vm_taddr; | vm2->vm_taddr = vm1->vm_taddr; | ||||
vm2->vm_daddr = vm1->vm_daddr; | vm2->vm_daddr = vm1->vm_daddr; | ||||
vm2->vm_maxsaddr = vm1->vm_maxsaddr; | vm2->vm_maxsaddr = vm1->vm_maxsaddr; | ||||
#ifdef PAX_ASLR | |||||
vm2->vm_aslr_delta_exec = vm1->vm_aslr_delta_exec; | |||||
vm2->vm_aslr_delta_mmap = vm1->vm_aslr_delta_mmap; | |||||
vm2->vm_aslr_delta_stack = vm1->vm_aslr_delta_stack; | |||||
#endif | |||||
vm_map_lock(old_map); | vm_map_lock(old_map); | ||||
if (old_map->busy) | if (old_map->busy) | ||||
vm_map_wait_busy(old_map); | vm_map_wait_busy(old_map); | ||||
new_map = &vm2->vm_map; | new_map = &vm2->vm_map; | ||||
locked = vm_map_trylock(new_map); /* trylock to silence WITNESS */ | locked = vm_map_trylock(new_map); /* trylock to silence WITNESS */ | ||||
KASSERT(locked, ("vmspace_fork: lock failed")); | KASSERT(locked, ("vmspace_fork: lock failed")); | ||||
old_entry = old_map->header.next; | old_entry = old_map->header.next; | ||||
▲ Show 20 Lines • Show All 1,011 Lines • Show Last 20 Lines |