diff options
author | alc <alc@FreeBSD.org> | 2012-02-16 06:45:51 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2012-02-16 06:45:51 +0000 |
commit | 506ef17e7f3ab3678d09b09e013110953cf28974 (patch) | |
tree | 82c54b5d1d039376b773e5495f507312b9a2a31f /sys/vm/vm_mmap.c | |
parent | 68e86f3d5f06a494bc61375850d6d89639b1ef90 (diff) | |
download | FreeBSD-src-506ef17e7f3ab3678d09b09e013110953cf28974.zip FreeBSD-src-506ef17e7f3ab3678d09b09e013110953cf28974.tar.gz |
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
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 4b4996f..6ed24f6 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. |