Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/kern_exec.c
Show First 20 Lines • Show All 1,096 Lines • ▼ Show 20 Lines | if (map_at_zero) | ||||
sv_minuser = sv->sv_minuser; | sv_minuser = sv->sv_minuser; | ||||
else | else | ||||
sv_minuser = MAX(sv->sv_minuser, PAGE_SIZE); | sv_minuser = MAX(sv->sv_minuser, PAGE_SIZE); | ||||
if (vmspace->vm_refcnt == 1 && vm_map_min(map) == sv_minuser && | if (vmspace->vm_refcnt == 1 && vm_map_min(map) == sv_minuser && | ||||
vm_map_max(map) == sv->sv_maxuser) { | vm_map_max(map) == sv->sv_maxuser) { | ||||
shmexit(vmspace); | shmexit(vmspace); | ||||
pmap_remove_pages(vmspace_pmap(vmspace)); | pmap_remove_pages(vmspace_pmap(vmspace)); | ||||
vm_map_remove(map, vm_map_min(map), vm_map_max(map)); | vm_map_remove(map, vm_map_min(map), vm_map_max(map)); | ||||
/* An exec terminates mlockall(MCL_FUTURE). */ | /* | ||||
* An exec terminates mlockall(MCL_FUTURE), ASLR state | |||||
* must be re-evaluated. | |||||
*/ | |||||
vm_map_lock(map); | vm_map_lock(map); | ||||
vm_map_modflags(map, 0, MAP_WIREFUTURE); | vm_map_modflags(map, 0, MAP_WIREFUTURE | MAP_ASLR | | ||||
MAP_ASLR_IGNSTART); | |||||
vm_map_unlock(map); | vm_map_unlock(map); | ||||
} else { | } else { | ||||
error = vmspace_exec(p, sv_minuser, sv->sv_maxuser); | error = vmspace_exec(p, sv_minuser, sv->sv_maxuser); | ||||
if (error) | if (error) | ||||
return (error); | return (error); | ||||
vmspace = p->p_vmspace; | vmspace = p->p_vmspace; | ||||
map = &vmspace->vm_map; | map = &vmspace->vm_map; | ||||
} | } | ||||
map->flags |= imgp->map_flags; | |||||
/* Map a shared page */ | /* Map a shared page */ | ||||
obj = sv->sv_shared_page_obj; | obj = sv->sv_shared_page_obj; | ||||
if (obj != NULL) { | if (obj != NULL) { | ||||
vm_object_reference(obj); | vm_object_reference(obj); | ||||
error = vm_map_fixed(map, obj, 0, | error = vm_map_fixed(map, obj, 0, | ||||
sv->sv_shared_page_base, sv->sv_shared_page_len, | sv->sv_shared_page_base, sv->sv_shared_page_len, | ||||
VM_PROT_READ | VM_PROT_EXECUTE, | VM_PROT_READ | VM_PROT_EXECUTE, | ||||
▲ Show 20 Lines • Show All 705 Lines • Show Last 20 Lines |