Changeset View
Changeset View
Standalone View
Standalone View
sys/vm/vm_mmap.c
Show First 20 Lines • Show All 173 Lines • ▼ Show 20 Lines | struct mmap_args { | ||||
off_t pos; | off_t pos; | ||||
}; | }; | ||||
#endif | #endif | ||||
int | int | ||||
sys_mmap(struct thread *td, struct mmap_args *uap) | sys_mmap(struct thread *td, struct mmap_args *uap) | ||||
{ | { | ||||
return (kern_mmap(td, (uintptr_t)uap->addr, uap->len, uap->prot, | return (kern_mmap(td, &(struct mmap_req){ | ||||
uap->flags, uap->fd, uap->pos)); | .mr_hint = (uintptr_t)uap->addr, | ||||
.mr_len = uap->len, | |||||
.mr_prot = uap->prot, | |||||
.mr_flags = uap->flags, | |||||
.mr_fd = uap->fd, | |||||
.mr_pos = uap->pos, | |||||
})); | |||||
} | } | ||||
int | int | ||||
kern_mmap_maxprot(struct proc *p, int prot) | kern_mmap_maxprot(struct proc *p, int prot) | ||||
{ | { | ||||
if ((p->p_flag2 & P2_PROTMAX_DISABLE) != 0 || | if ((p->p_flag2 & P2_PROTMAX_DISABLE) != 0 || | ||||
(p->p_fctl0 & NT_FREEBSD_FCTL_PROTMAX_DISABLE) != 0) | (p->p_fctl0 & NT_FREEBSD_FCTL_PROTMAX_DISABLE) != 0) | ||||
return (_PROT_ALL); | return (_PROT_ALL); | ||||
if (((p->p_flag2 & P2_PROTMAX_ENABLE) != 0 || imply_prot_max) && | if (((p->p_flag2 & P2_PROTMAX_ENABLE) != 0 || imply_prot_max) && | ||||
prot != PROT_NONE) | prot != PROT_NONE) | ||||
return (prot); | return (prot); | ||||
return (_PROT_ALL); | return (_PROT_ALL); | ||||
} | } | ||||
int | int | ||||
kern_mmap(struct thread *td, uintptr_t addr0, size_t len, int prot, int flags, | kern_mmap(struct thread *td, const struct mmap_req *mrp) | ||||
int fd, off_t pos) | |||||
{ | { | ||||
struct mmap_req mr = { | |||||
.mr_hint = addr0, | |||||
.mr_len = len, | |||||
.mr_prot = prot, | |||||
.mr_flags = flags, | |||||
.mr_fd = fd, | |||||
.mr_pos = pos | |||||
}; | |||||
return (kern_mmap_req(td, &mr)); | |||||
} | |||||
int | |||||
kern_mmap_req(struct thread *td, const struct mmap_req *mrp) | |||||
{ | |||||
struct vmspace *vms; | struct vmspace *vms; | ||||
struct file *fp; | struct file *fp; | ||||
struct proc *p; | struct proc *p; | ||||
off_t pos; | off_t pos; | ||||
vm_offset_t addr, orig_addr; | vm_offset_t addr, orig_addr; | ||||
vm_size_t len, pageoff, size; | vm_size_t len, pageoff, size; | ||||
vm_prot_t cap_maxprot; | vm_prot_t cap_maxprot; | ||||
int align, error, fd, flags, max_prot, prot; | int align, error, fd, flags, max_prot, prot; | ||||
▲ Show 20 Lines • Show All 211 Lines • ▼ Show 20 Lines | done: | ||||
return (error); | return (error); | ||||
} | } | ||||
#if defined(COMPAT_FREEBSD6) | #if defined(COMPAT_FREEBSD6) | ||||
int | int | ||||
freebsd6_mmap(struct thread *td, struct freebsd6_mmap_args *uap) | freebsd6_mmap(struct thread *td, struct freebsd6_mmap_args *uap) | ||||
{ | { | ||||
return (kern_mmap(td, &(struct mmap_req){ | |||||
return (kern_mmap(td, (uintptr_t)uap->addr, uap->len, uap->prot, | .mr_hint = (uintptr_t)uap->addr, | ||||
uap->flags, uap->fd, uap->pos)); | .mr_len = uap->len, | ||||
.mr_prot = uap->prot, | |||||
.mr_flags = uap->flags, | |||||
.mr_fd = uap->fd, | |||||
.mr_pos = uap->pos, | |||||
})); | |||||
} | } | ||||
#endif | #endif | ||||
#ifdef COMPAT_43 | #ifdef COMPAT_43 | ||||
#ifndef _SYS_SYSPROTO_H_ | #ifndef _SYS_SYSPROTO_H_ | ||||
struct ommap_args { | struct ommap_args { | ||||
caddr_t addr; | caddr_t addr; | ||||
int len; | int len; | ||||
Show All 35 Lines | #endif | ||||
if (uap->flags & OMAP_COPY) | if (uap->flags & OMAP_COPY) | ||||
flags |= MAP_COPY; | flags |= MAP_COPY; | ||||
if (uap->flags & OMAP_SHARED) | if (uap->flags & OMAP_SHARED) | ||||
flags |= MAP_SHARED; | flags |= MAP_SHARED; | ||||
else | else | ||||
flags |= MAP_PRIVATE; | flags |= MAP_PRIVATE; | ||||
if (uap->flags & OMAP_FIXED) | if (uap->flags & OMAP_FIXED) | ||||
flags |= MAP_FIXED; | flags |= MAP_FIXED; | ||||
return (kern_mmap(td, (uintptr_t)uap->addr, uap->len, prot, flags, | return (kern_mmap(td, &(struct mmap_req){ | ||||
uap->fd, uap->pos)); | .mr_hint = (uintptr_t)uap->addr, | ||||
.mr_len = uap->len, | |||||
.mr_prot = prot, | |||||
.mr_flags = flags, | |||||
.mr_fd = uap->fd, | |||||
.mr_pos = uap->pos, | |||||
})); | |||||
} | } | ||||
#endif /* COMPAT_43 */ | #endif /* COMPAT_43 */ | ||||
#ifndef _SYS_SYSPROTO_H_ | #ifndef _SYS_SYSPROTO_H_ | ||||
struct msync_args { | struct msync_args { | ||||
void *addr; | void *addr; | ||||
size_t len; | size_t len; | ||||
int flags; | int flags; | ||||
▲ Show 20 Lines • Show All 1,178 Lines • Show Last 20 Lines |