Changeset View
Changeset View
Standalone View
Standalone View
head/sys/vm/vm_mmap.c
Show First 20 Lines • Show All 219 Lines • ▼ Show 20 Lines | kern_mmap_fpcheck(struct thread *td, uintptr_t addr0, size_t len, int prot, | ||||
int align, error, max_prot; | int align, error, max_prot; | ||||
cap_rights_t rights; | cap_rights_t rights; | ||||
if ((prot & ~(_PROT_ALL | PROT_MAX(_PROT_ALL))) != 0) | if ((prot & ~(_PROT_ALL | PROT_MAX(_PROT_ALL))) != 0) | ||||
return (EINVAL); | return (EINVAL); | ||||
max_prot = PROT_MAX_EXTRACT(prot); | max_prot = PROT_MAX_EXTRACT(prot); | ||||
prot = PROT_EXTRACT(prot); | prot = PROT_EXTRACT(prot); | ||||
if (max_prot != 0 && (max_prot & prot) != prot) | if (max_prot != 0 && (max_prot & prot) != prot) | ||||
return (EINVAL); | return (ENOTSUP); | ||||
p = td->td_proc; | p = td->td_proc; | ||||
/* | /* | ||||
* Always honor PROT_MAX if set. If not, default to all | * Always honor PROT_MAX if set. If not, default to all | ||||
* permissions unless we're implying maximum permissions. | * permissions unless we're implying maximum permissions. | ||||
*/ | */ | ||||
if (max_prot == 0) | if (max_prot == 0) | ||||
▲ Show 20 Lines • Show All 426 Lines • ▼ Show 20 Lines | #ifdef COMPAT_FREEBSD32 | ||||
} else | } else | ||||
#endif | #endif | ||||
if (addr + size < addr) | if (addr + size < addr) | ||||
return (EINVAL); | return (EINVAL); | ||||
vm_error = KERN_SUCCESS; | vm_error = KERN_SUCCESS; | ||||
if (max_prot != 0) { | if (max_prot != 0) { | ||||
if ((max_prot & prot) != prot) | if ((max_prot & prot) != prot) | ||||
return (EINVAL); | return (ENOTSUP); | ||||
vm_error = vm_map_protect(&td->td_proc->p_vmspace->vm_map, | vm_error = vm_map_protect(&td->td_proc->p_vmspace->vm_map, | ||||
addr, addr + size, max_prot, TRUE); | addr, addr + size, max_prot, TRUE); | ||||
} | } | ||||
if (vm_error == KERN_SUCCESS) | if (vm_error == KERN_SUCCESS) | ||||
vm_error = vm_map_protect(&td->td_proc->p_vmspace->vm_map, | vm_error = vm_map_protect(&td->td_proc->p_vmspace->vm_map, | ||||
addr, addr + size, prot, FALSE); | addr, addr + size, prot, FALSE); | ||||
switch (vm_error) { | switch (vm_error) { | ||||
▲ Show 20 Lines • Show All 981 Lines • Show Last 20 Lines |