diff options
author | Alan Cox <alc@FreeBSD.org> | 2012-02-16 06:45:51 +0000 |
---|---|---|
committer | Alan Cox <alc@FreeBSD.org> | 2012-02-16 06:45:51 +0000 |
commit | a6492969593bc6a4846ea56ca561bf51a8c7d2a9 (patch) | |
tree | 82c54b5d1d039376b773e5495f507312b9a2a31f /sys/vm/vm_mmap.c | |
parent | c1cb99c965099aa5c772556a6d21238a0c765fbb (diff) | |
download | src-a6492969593bc6a4846ea56ca561bf51a8c7d2a9.tar.gz src-a6492969593bc6a4846ea56ca561bf51a8c7d2a9.zip |
When vm_mmap() is used to map a vm object into a kernel vm_map, it
makes no sense to check the size of the kernel vm_map against the
user-level resource limits for the calling process.
Reviewed by: kib
Notes
Notes:
svn path=/head/; revision=231819
Diffstat (limited to 'sys/vm/vm_mmap.c')
-rw-r--r-- | sys/vm/vm_mmap.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/sys/vm/vm_mmap.c b/sys/vm/vm_mmap.c index 4b4996fde6f7..6ed24f67c34e 100644 --- a/sys/vm/vm_mmap.c +++ b/sys/vm/vm_mmap.c @@ -1438,18 +1438,18 @@ vm_mmap(vm_map_t map, vm_offset_t *addr, vm_size_t size, vm_prot_t prot, size = round_page(size); - PROC_LOCK(td->td_proc); - if (td->td_proc->p_vmspace->vm_map.size + size > - lim_cur(td->td_proc, RLIMIT_VMEM)) { - PROC_UNLOCK(td->td_proc); - return (ENOMEM); - } - if (racct_set(td->td_proc, RACCT_VMEM, - td->td_proc->p_vmspace->vm_map.size + size)) { + if (map == &td->td_proc->p_vmspace->vm_map) { + PROC_LOCK(td->td_proc); + if (map->size + size > lim_cur(td->td_proc, RLIMIT_VMEM)) { + PROC_UNLOCK(td->td_proc); + return (ENOMEM); + } + if (racct_set(td->td_proc, RACCT_VMEM, map->size + size)) { + PROC_UNLOCK(td->td_proc); + return (ENOMEM); + } PROC_UNLOCK(td->td_proc); - return (ENOMEM); } - PROC_UNLOCK(td->td_proc); /* * We currently can only deal with page aligned file offsets. |